打印
[PIC®/AVR®/dsPIC®产品]

C语言内穿插汇编方法

[复制链接]
1383|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
huangcunxiake|  楼主 | 2024-3-11 23:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
unsigned int var;
void main(void)
{
var = 1;
#asm // like this...
BCF 0,3
BANKSEL(_var)
RLF (_var)&07fh
RLF (_var+1)&07fh
#endasm
// do it again the other way...
asm(“BCF 0,3” );
asm(“BANKSEL _var” );
asm(“RLF (_var)&07fh” );
asm(“RLF (_var+1)&07fh” );
}


使用特权

评论回复
沙发
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 | 只看该作者
什么是穿插汇编

使用特权

评论回复
5
598330983| | 2024-3-25 22:21 | 只看该作者
学习,原来可以放进去汇编。

使用特权

评论回复
6
CoolSilicon| | 2024-3-26 10:57 | 只看该作者
这就是传说中的C和汇编的混合编程嘛...
某些情况下确实比较好用的...

使用特权

评论回复
7
可怜的小弗朗士| | 2024-3-27 13:49 | 只看该作者
这种穿插的方式很值得推介

使用特权

评论回复
8
LEDyyds| | 2024-3-27 17:02 | 只看该作者
C语言内穿插汇编兼顾开发难易度和运行效率

使用特权

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

本版积分规则

204

主题

3478

帖子

10

粉丝