单步执行后的R0:
执行了我们的指令:MOV R0,#60H ;将立即数60H送到寄存器R0中
R0马上从0变成60H
现在R0已经指向60H这个单元
我们下一个指令是:
MOV @R0, #56H ;将立即数56H送入到R0间接寻址的单元中,
执行之前,60H单元的内容是00
执行完之后:
60H单元的内容是56H
这些细致的跑一下,你就理解了
以下3条MOV指令的含义
MOV SP, #70H;对堆栈指针赋值
MOV R0,#60H ;将立即数60H送到寄存器R0中
MOV @R0, #56H ;将立即数56H送入到R0间接寻址的单元中,
;执行后60H单元的内容变为56H
我把用AI8051U实现以上实验过程的项目源程序也打包上传:
一般来讲,真想学汇编,不用Keil 的Debug,
其实是学不好的,哪怕我们从z80开始经历了很多机型,哪怕讲过这门课,不动手实践
都是纯吹水!所以上面我搞的很细致是有原因的,不这样干,是没法学会汇编的!
所以虽然我没有STC8H8K64U的试验箱,但我有STC AI8051U的试验箱,我打算改写
陈老师的课程实验程序,让本课程的实验,也能在STC AI8051U的试验箱上跑起来!
当然会有困难,慢慢检查我的执行力!
想测试其他指令,怎么办?
很简单,还是推出Debug ,在源程序添加相应语句后再一次Debug ,
最好还是单步执行..........
例如我想看看立即数传给累加器A:
MOV A, #98H
加入源程序后开始单步执行:
初始画面:
SP 是默认的0x0007H,
PC 是默认的0xFF0000
我们单步一次:
PC按我们的指令,跳到0xFF0100
再单步一次,把堆栈设为70H
MOV SP, #70H;对堆栈指针赋值
执行完,PC变成0xFF0103,堆栈变成0x0070
再单步2次后:
现在的累加器A是0
接着单步一次,执行MOV A, #98H
画面变成: