[PIC®/AVR®/dsPIC®产品] C语言内穿插汇编方法

[复制链接]
2125|7
 楼主| huangcunxiake 发表于 2024-3-11 23:12 | 显示全部楼层 |阅读模式
  1. unsigned int var;
  2. void main(void)
  3. {
  4. var = 1;
  5. #asm // like this...
  6. BCF 0,3
  7. BANKSEL(_var)
  8. RLF (_var)&07fh
  9. RLF (_var+1)&07fh
  10. #endasm
  11. // do it again the other way...
  12. asm(“BCF 0,3” );
  13. asm(“BANKSEL _var” );
  14. asm(“RLF (_var)&07fh” );
  15. asm(“RLF (_var+1)&07fh” );
  16. }


 楼主| huangcunxiake 发表于 2024-3-11 23:12 | 显示全部楼层
汇编指令也可以使用伪指令 #asm、 #endasm 或语句 asm(); 直接嵌入到 C 代码。
#asm 和 #endasm 伪指令用于开始和结束要嵌入到代码生成器汇编输出中的汇编指令块。 #asm 块在句法上不属于 C 程序的一部分,因此它不遵循正常的 C 控制流规则。
这意味着不应在诸如 if()、 while() 和 for() 语句之类的 C 构造内部或附近使用这种形式的嵌入汇编代码。但是,这是添加多条汇编指令的最简单方法。 #asm 和#endasm 伪指令应分别放在不同的代码行中,且均应放在与汇编代码行独立的行中。
 楼主| huangcunxiake 发表于 2024-3-11 23:13 | 显示全部楼层
asm(); 语句用于将汇编指令嵌入到 C 代码。这种形式的外观和行为都类似于 C 语句。
指令放置在类似于函数调用括号的字符串内,虽然并不发生任何调用。通常在该字符串中放入一条指令,但可以通过用 \n 字符分隔指令来指定多条汇编指令 (例如, asm(“MOVLW 55\nMOVWF _x”);)。如果在每个语句中放入一条指令,并使用多条语句,代码可读性将更高。
您可以在 C 源代码中的任意位置使用 asm() 形式的嵌入汇编代码,因为它可以正确地与所有 C 控制流结构进行交互。
我喜欢打游戏 发表于 2024-3-22 16:24 | 显示全部楼层
什么是穿插汇编
598330983 发表于 2024-3-25 22:21 | 显示全部楼层
学习,原来可以放进去汇编。
CoolSilicon 发表于 2024-3-26 10:57 | 显示全部楼层
这就是传说中的C和汇编的混合编程嘛...
某些情况下确实比较好用的...
可怜的小弗朗士 发表于 2024-3-27 13:49 | 显示全部楼层
这种穿插的方式很值得推介
LEDyyds 发表于 2024-3-27 17:02 | 显示全部楼层
C语言内穿插汇编兼顾开发难易度和运行效率
您需要登录后才可以回帖 登录 | 注册

本版积分规则

223

主题

3745

帖子

11

粉丝
快速回复 在线客服 返回列表 返回顶部