打印
[其它应用]

C51为什么要嵌套汇编

[复制链接]
1333|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
中国龙芯CDX|  楼主 | 2023-3-12 22:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
51单片机一个显著优点就是指令执行时间固定,因此可以适应时序要求严格的场合。例如符合ISO7816协议的cpu卡的读写,对时序要求比较严格。其实就是用io脚做出来的同步半双工串口。支持cpu卡的程序一般比较庞大,需要用c51来组织,但是由于c编译的不确定性,必须把底层程序封装成汇编语言模块嵌入到工程中。这就带来几个问题:如何声明函数、参数如何传递等。限于篇幅,不能说得很细。下面举例:
  汇编程序单独保存一个文件,加入到工程中,函数如下:
  _proc_a:
  mov a, r7
  inc a
  mov r7, a
  ret
  用c语言在.h文件中声明: extern unsigned char proc_a(unsigned char val);
  调用时形如: retvalue = proc_a(0x11);
  说明:
  a:汇编程序如果带参数,则需要在汇编程序前多加一个下划线。而声明它的地方不用加(伟福编译器这么要求的)。
  b:函数的形参中第一参数用R7传递,函数返回值用R7返回,这是C51的通用规范。其他参数都有相应规定。函数可以返回一个位,用psw的c位返回。
  c:上面的语句,执行顺序是把0x11给R7,然后跳转子程序,子程序将它加1后送回。
  d:函数跳转到汇编程序时,本区的R0-R7,A,B,PSW,DPTR等寄存器可以供子程序使用,不必考虑调用后是否要恢复这些常规资源。上例中,A的值被函数使用了,编程者不必恢复调用前的值。

使用特权

评论回复
沙发
药无尘| | 2023-7-26 14:44 | 只看该作者
汇编编译和执行的应该会更快吧

使用特权

评论回复
板凳
OKAKAKO| | 2023-9-26 09:55 | 只看该作者
汇编是机器语言执行速率以及执行过程更快

使用特权

评论回复
地板
jf101| | 2023-9-26 12:38 | 只看该作者
51单片机一个显著优点就是指令执行时间固定,因此可以适应时序要求严格的场合。

使用特权

评论回复
5
小夏天的大西瓜| | 2023-9-27 13:12 | 只看该作者
程序编译都是编译成汇编进行机器语言执行的

使用特权

评论回复
6
星辰大海不退缩| | 2023-9-27 16:50 | 只看该作者
c语言内嵌汇编吧,不是嵌套。因为单片机指令就是汇编,c可以代替大部分汇编,但是有的功能c实现不了,就还是需要一两句汇编,所以就是看到的那样,c语言中嵌入汇编语句。

使用特权

评论回复
7
AdaMaYun| | 2024-1-27 22:14 | 只看该作者
单片机指令就是汇编,c可以代替大部分汇编

使用特权

评论回复
8
中国龙芯CDX|  楼主 | 2024-1-27 22:18 | 只看该作者
汇编程序如果带参数,则需要在汇编程序前多加一个下划线

使用特权

评论回复
9
小小蚂蚁举千斤| | 2024-1-27 23:22 | 只看该作者
51单片机一个显著优点就是指令执行时间固定,因此可以适应时序要求严格的场合

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

261

主题

1952

帖子

4

粉丝