例1(用Mplab-C编写) [td=1,1,3%][td=1,1,52%]例2(用Masm编写) |
Delay() [td=1,1,3%][td=1,1,52%] Delay |
{ [td=1,1,3%][td=1,1,52%] ;此行可加开关中断指令 |
/*此行可加开关中断指令*/ [td=1,1,3%][td=1,1,52%] movlw.10 |
for (i=0; i<=10; i++) [td=1,1,3%][td=1,1,52%] movwf Counter |
SLEEP(); [td=1,1,3%][td=1,1,52%] Loop1 |
} [td=1,1,3%][td=1,1,52%] Sleep |
[td=1,1,3%][td=1,1,52%] decfsz Counter |
[td=1,1,3%][td=1,1,52%] goto Loop1 |
[td=1,1,3%][td=1,1,52%] return |
…… [td=1,1,6%][td=1,1,70%]…… |
while(1) {#asm [td=1,1,6%][td=1,1,70%]while(1) { |
…… [td=1,1,6%] [td=1,1,70%] #asm /*应另起一行*/ |
#endasm [td=1,1,6%] [td=1,1,70%] …… |
}/*不能正确编译*/ [td=1,1,6%] [td=1,1,70%] #endasm |
…… [td=1,1,6%][td=1,1,70%] }/*编译通过*/ |
[td=1,1,6%][td=1,1,70%]…… |
当内嵌汇编指令时,从“#asm”到“endasm”每条指令都必须各占一行,否则编译时会出错。[td=3,1,71%]部分反汇编代码 |
#include <pic16c71> [td=1,1,16%]01A7 [td=1,1,15%]081F [td=1,1,40%]MOVF 1F,W |
#include<math.h> [td=1,1,16%]01A8 [td=1,1,15%]0093 [td=1,1,40%]MOVWF 13 |
[td=1,1,16%];借用 [td=1,1,15%][td=1,1,40%] |
unsigned long Value @0x1 [td=1,1,16%]01A9 [td=1,1,15%]0820 [td=1,1,40%]MOVF 20,W |
char Xm @0x2d; [td=1,1,16%]01AA [td=1,1,15%]0094 [td=1,1,40%]MOVWF 14 |
[td=1,1,16%];借用 [td=1,1,15%][td=1,1,40%] |
void main() [td=1,1,16%]01AB [td=1,1,15%]082D [td=1,1,40%]MOVF 2D,W |
{Value=20; [td=1,1,16%]01AC [td=1,1,15%]0099 [td=1,1,40%]MOVWF 19 |
[td=1,1,16%];借用 [td=1,1,15%][td=1,1,40%] |
Xm=40; [td=1,1,16%]01AD [td=1,1,15%]019A [td=1,1,40%]CLRF1A |
[td=1,1,16%];借用 [td=1,1,15%][td=1,1,40%] |
Value=Value*Xm [td=1,1,16%]01AE [td=1,1,15%]235F [td=1,1,40%]CALL 035Fh |
[td=3,1,71%];调用乘法函数 |
…… [td=1,1,16%]01AF [td=1,1,15%]1283 [td=1,1,40%]BCF 03,5 |
} [td=1,1,16%]01B0 [td=1,1,15%]009F [td=1,1,40%]MOVWF 1F |
[td=3,1,71%];返回结果低字节 |
[td=1,1,16%]01B1 [td=1,1,15%]0804 [td=1,1,40%]MOVF 04,W |
[td=1,1,16%]01B2 [td=1,1,15%]00A0 [td=1,1,40%]MOVWF 20 |
[td=3,1,71%];返回结果高字节 |