c51中嵌套汇编的方法
方法一:在每个汇编语句前加asm即可。如
本文引用地址:https://www.eepw.com.cn/article/201611/315818.htmvoidreset_da
{
asmmovr0,#0dfh
asmdo_resetdata:
asmmov@r0,#00h
asmdjnzr0,do_resetdata
return;
}
方法二:把asm作为关键字后续汇编用大括号括起来即可。如下:
voidreset_da
{
asm
{movr0,#0dfh
do_resetdata:
mov@r0,#00h
djnzr0,do_resetdata
}
return;
}
keilc6.20c直接嵌入汇编的方法
发表于2007-5-2418:23:17
#ifdefASM
unsignedlongshiftR1(registerunsignedlong);
#else
externunsignedlongshiftR1(registerunsignedlong);
#endif
//endofasm.h
//
#defineASM
#include
#include
#pragmaOT(4,speed)
unsignedlongshiftR1(registerunsignedlongx)
{
#pragmaasm
clrc
mova,r4
rrca
movr4,a
mova,r5
rrca
movr5,a
mova,r6
rrca
movr6,a
mova,r7
rrca
movr7,a
#pragmaendasm
return(x);
}
//endofasm.c
将此源文件加入要编译的工程文件,
将光标指向此文件,选择右键菜单“optionforfileasm.c”,
将属性单“properties”中的“GenerateAssemblerSRCFile”“AssembleSRCFile”
两项设置成黑体的“√”将“LinkPublicOn
用此方法可以在c源代码的任意位置用#pragmaasm和#pragmaendasm嵌入汇编语句。
但要注意的是在直接使用形参时要小心,在不同的优化级别下产生的汇编代码有所不同,
可以察看对应的.lst文件看一看,得到正确的优化级别后,#pragmaOT(x,speed)锁定
优化级别(这里的值是0-9)。
评论