本帖最后由 dengwuyu111 于 2018-3-25 12:34 编辑
在学习汇编的过程中遇到了一个问题,没有思路,前来论坛求救。
现象:程序在仿真时进入中断后跑飞。
部分代码:
ORG 0033H
Timecount DATA 40H
中断代码:
T0inter:
MOV SP,#041H
PUSH ACC
PUSH PSW
INC Timecount;
MOV TH0,#60 ;50mS interrupt.
MOV TL0,#176
POP PSW
POP ACC
RETI
END
经过排查原因是在40H处定义了Timecount , 同时在中断中令SP=41H 这两个地方造成了跑飞,
把SP地址改成42H或者把Timecount定义在50H 程序就正常运行。
。实在想不通为什么ROM 在41H 怎么会被占用了。 当SP=42H时 在仿真过程查看ROM的内容,确实41H内的数值确实在变动。
请各位帮忙分析分析
---------------------------
更正,确实都是在RAM里。描述错了。
经过楼下指点,原因确实是因为在程序中设置了SP的值,导致退出中断时程序找不到 中断现场地址导致了程序跑飞。
SP时应在程序最初初始化时设置。
|