以下说的都是与C51相关的:
我有个C文件(a.c),我用keil编译它,烧进
单片机,他是能够正常执行的。然后我用反汇编工具得到c文件对应的汇编文件a.asm,这个汇编文件跟 我调试a.c程序时的汇编窗口内容一样(keil调试C程序时,会弹出一个汇编窗口的),我再用keil编译它,结果有错误:Temp.asm(1509): error A45: UNDEFINED SYMBOL (PASS-2)
我上网查过它的含义:意思是我跳转的地方不存在。我查了一下,确实不存在。
出错语句(蓝 {MOD}字体):
Q0C02: MOV @R0,A ;0C02 F6
DJNZ R0,Q0C02 ;0C03 D8 FD
MOV SP,#23H ;0C05 75 81 23
LJMP Q0C46 ;0C08 02 0C 46
;==========================================================================
Q0C0B: LJMP Q0EF7 ;0C0B 02 0E F7
;==========================================================================
Q0C0E: CLR A ;0C0E E4
....
LJMP Q0C0A ;0F0D 02 0C 0A
但是调试C程序,汇编窗口也有这一句汇编(蓝 {MOD}字体):
C:0x0F04 AF19 MOV R7,0x19
C:0x0F06 AE18 MOV R6,Temputer(0x18)
C:0x0F08 120C8B LCALL deal(C:0C8B)
161: }
C:0x0F0B 80EA SJMP main(C:0EF7)
C:0x0F0D 020C0A LJMP C:0C0A
为什么C语言能通过编译
下面为调试C程序图片:
先说下我反汇编整个程序的原因。
我现在在做课设,规定要用汇编写代码。我想用C写代码,编译出可执行文件后,反汇编得到汇编代码。
我现在遇到的问题 , 就是跳转的位置是另一条指令的其中一个字节。如何解决这问题。
一周热门 更多>