单片机,汇编,一个简单程序分析

2025-04-07 19:12:05
推荐回答(2个)
回答1:

51单片机复位的时候SP = 07H,调用函数的时候SP会加1然后把下一条指令的地址低位压栈,然后SP再加1,压栈高位
MOV 20H,#1AH 指令长度为3
MOV A,20H 指令长度为2
LCALL D1 指令长度为3
MOV 21H,A 指令长度为2
MOV A,20H 指令长度为2
SWAP A 指令长度为1
LCALL D1 指令长度为3
MOV 22H,A 根据以上指令的长度,这条指令的起始地址为0010H,当执行上面的LCALLD1时SP + 1,压栈低位,(08H) = 10H,SP再加1,压栈高位(09H) = 00H
子函数返回的时候会把SP当前指向地址的值弹出到PC高位,然后SP - 1,再把当前值弹出到PC低位,然后SP再减1,但是出栈并不会改变已经压栈的数据

回答2:

其他单元没用到就不用去考虑,但你得单步运行看一下,08H是哪里里引起变化的