在学单片机...看到这个...感觉不错.发来和大家共享下...电子园51单片机学习网0i&U~c2E0|oV(K
电子园51单片机学习网[Z0K;je-T)uXe D:bC中如何直接直接嵌入汇编的方法!
?0J \1hc ?H44606o2J0B;tV,n44606(C51BBS网友cuiwei)原创
jTk3ZS44606//<asm.h>电子园51单片机学习网pS9U pg
#ifdef ASM
~R9@^n44606 unsigned long shiftR1(register unsigned long);电子园51单片机学习网(G/pYle
#else 电子园51单片机学习网_A%k+I8n1|m\s
extern unsigned long shiftR1(register unsigned long);
_4}nG!Vr44606#endif电子园51单片机学习网(ae@7Ju]"X
//end of asm.h
\TS(Q PD44606
2}4v J usXv44606//<asm.c>电子园51单片机学习网^f8KF/t
#define ASM
ERhd K44606#include <asm.h>
x@P4X|44606#include <reg52.h>电子园51单片机学习网1^ Qi[E:I
#pragma OT(4,speed)电子园51单片机学习网1q-DUsckKP&DX
unsigned long shiftR1(register unsigned long x)
:c"s/b'P ~ e1R0W1S44606{电子园51单片机学习网q:U e jm+{T:o yz
#pragma asm
:C2H{T(xCj`#v44606 clr c
?2a] K.[E44606 mov a,r4电子园51单片机学习网I{%A!c7g5qh+u/u#XA
rrc a
`F6e.J7X(d8d.M3l M _44606 mov r4,a
dZ+L z5a44606电子园51单片机学习网@`.Xv,x
mov a,r5电子园51单片机学习网M9aX1m { l
rrc a电子园51单片机学习网u{| [3l
mov r5,a
^1W Mv7m%}H44606电子园51单片机学习网 ^9H6G6Mljw,H4eGPGb
mov a,r6
h4w#B`SEEv44606 rrc a
z j.~U?2G'L]lNB#N44606 mov r6,a
5X Lc+gy;}&@ _g,T44606电子园51单片机学习网]8n&JzhL:J |*|.yW
mov a,r7电子园51单片机学习网U'mgtTLn
rrc a电子园51单片机学习网'c)``}{6d4s2q7f@
mov r7,a
'[O]3z h$t)bm+^ u44606 电子园51单片机学习网1}H#z;nE-cY_T
#pragma endasm电子园51单片机学习网iO-G? Nlo\-I
return(x);电子园51单片机学习网(Br?8e$t}3k
}
8b w LV)Hm44606//end of asm.c
L#^w3kh7R;D2k2Q44606将此源文件加入要编译的工程文件,电子园51单片机学习网2w;A:L T0xo@H*~
将光标指向此文件,选择右键菜单“option for file 'asm.c'”,
&cy)g,T/f&l44606将属性单“properties”中的“Generate Assembler SRC File”“Assemble SRC File”电子园51单片机学习网)q~w8\,ZkFr5_
两项设置成黑体的“√”将“Link Public Only”的“√”去掉,再编译即可。电子园51单片机学习网+r+H y/tu `+D8n|\#Uh
用此方法可以在c源代码的任意位置用#pragma asm和#pragma endasm嵌入汇编语句。电子园51单片机学习网]Jx;Q0Yh*z
但要注意的是在直接使用形参时要小心,在不同的优化级别下产生的汇编代码有所不同,电子园51单片机学习网 M%]i1B-x%L
可以察看对应的.lst文件看一看,得到正确的优化级别后,#pragma OT(x,speed)锁定
-wn1ek3}6VO:~(n n44606优化级别(这里的值是0-9)。
ow5xhZ ?;`1X44606
文章评论(0条评论)
登录后参与讨论