原创 C中如何直接直接嵌入汇编的方法

2009-8-16 00:17 1105 4 4 分类: MCU/ 嵌入式

发布: 2009-4-05 11:24 |  作者: wang1jin |   查看: 24次



&Rn5f NJ j0在学单片机...看到这个...感觉不错.发来和大家共享下...

Ii1C ymi3C0 电子园51单片机学习网Z,v"R?t:n

C中如何直接直接嵌入汇编的方法!

5L:U ^Q_6[wx0 电子园51单片机学习网n` I}Px

(C51BBS网友cuiwei)原创电子园51单片机学习网t1eZ&s\ I+X `/o
//<asm.h>电子园51单片机学习网`#H"z+GB,Q g7h
#ifdef ASM电子园51单片机学习网{z@0Gc
         unsigned long shiftR1(register unsigned long);电子园51单片机学习网&VS?i4~#r3ZuGJ#w
#else    电子园51单片机学习网D1X@0}T"vG
         extern unsigned long shiftR1(register unsigned long);电子园51单片机学习网_,B3`3l!Cq C]
#endif
$N(h @6r6b-\ \0//end of asm.h电子园51单片机学习网 Z/?T`2N,_c.u4Q

|x5HS-\^ O i0//<asm.c>
])q+]b|G%L9U1g5u0#define ASM电子园51单片机学习网_,y\.A|O#U
#include <asm.h>
UU9Z-Vyvwwd0#include <reg52.h>
iVge7X9i0#pragma OT(4,speed)电子园51单片机学习网pt"JO'p[JB
unsigned long    shiftR1(register unsigned long    x)
?Z5pV/X1ed0{电子园51单片机学习网*yq ^e0{.[Ul
    #pragma asm
Abg b0I ~h3j9oV0    clr c电子园51单片机学习网8OV`5\e ~llQR#T c
    mov a,r4
"Y5JF`8W5Z1g(y oX UuE0    rrc a电子园51单片机学习网i7{Zx]9wnp
    mov r4,a电子园51单片机学习网[9]Bi p5U9j1[xY;H

9UN7K a]G,W0Z0    mov a,r5电子园51单片机学习网1I5mMlr[s/K)z
    rrc a电子园51单片机学习网 }|e%z+D&j
    mov r5,a
t,F;H.KR9C0电子园51单片机学习网?%G@Cv!Y{
    mov a,r6
sp#{RyaX0    rrc a电子园51单片机学习网X'gop(E/ua;r;E
    mov r6,a电子园51单片机学习网{MF6hT

!YF3t _A0    mov a,r7
+YXg_h*O0    rrc a电子园51单片机学习网'u-y^EaVa
    mov r7,a电子园51单片机学习网.Wr6\2J+o6t T'W
    
RAeC#d9T0    #pragma endasm
C `7qm*U0    return(x);电子园51单片机学习网E'R6zOoT[5]
}电子园51单片机学习网"gpj$T\u9a^+Rpci
//end of asm.c
qlc,ULU%Z}(l0将此源文件加入要编译的工程文件,电子园51单片机学习网2X8G!N/\ngg
将光标指向此文件,选择右键菜单“option for file 'asm.c'”,
JCg.?n0将属性单“properties”中的“Generate Assembler SRC File”“Assemble SRC File”电子园51单片机学习网Si-^ y6tLw"Qn
两项设置成黑体的“√”将“Link Public Only”的“√”去掉,再编译即可。
'g J'Ky4kN0用此方法可以在c源代码的任意位置用#pragma asm和#pragma endasm嵌入汇编语句。
*@BudwlL9wW0但要注意的是在直接使用形参时要小心,在不同的优化级别下产生的汇编代码有所不同,
bo4B-w'_0可以察看对应的.lst文件看一看,得到正确的优化级别后,#pragma OT(x,speed)锁定电子园51单片机学习网8[2`\Ha6k't'l"^+X
优化级别(这里的值是0-9)。
X+r[LAz}DP7^4T0电子园51单片机学习网:txo[6\ |5p

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
4
关闭 站长推荐上一条 /3 下一条