51单片机 C,asm混合编程 疑惑..???

来源:百度知道 编辑:UC知道 时间:2024/06/17 16:17:30
请问,为什么在C程序中加入#pragma ams....代码,再编译,生成的汇编代码就全乱掉了了,
再也找不到 LJMP main; 这条跳转指令了???

没嵌入之前:C:0x0000 020014 LJMP C:0014(main)
main:
C:0x0003 750864 MOV 0x08,#0x64
C:0x0006 30A0FD JNB L(0xA0.0),C:0006
C:0x0009 7F64 MOV R7,#0x64
C:0x000B DFFE DJNZ R7,C:000B
C:0x000D D509FD DJNZ 0x09,C:000D
C:0x0010 E4 CLR A
C:0x0011 F580 MOV P0(0x80),A
C:0x0013 22 RET
C:0x0014 787F MOV R0,#0x7F
C:0x0016 E4 CLR A
C:0x0017 F6 MOV @R0,A
C:0x0018 D8FD DJNZ R0,C:0017
C:0x001A 758109 MOV SP(0x81),#0x09
C:0x001D 020003 LJMP main(C:0003)

嵌入之后:
MAIN:
C:0x0000 750864 MOV 0x08,#0x64
C0001:
C:0x0003 30A0FD JNB L(0xA0.0),C0001(C:0003)
C0002:

因为这条语句多余所以编译器帮你去掉了,main本来就在一开始的位置,所以你在一开头的位置加一条指令跳到一开头的位置相当于浪费了1个指令周期
如果你确实需要这样做的话在main前面加个org 0014h