wuzhengmin 发表于 2026-1-3 10:28:16

单步执行后的R0:

执行了我们的指令:MOV R0,#60H ;将立即数60H送到寄存器R0中

R0马上从0变成60H

wuzhengmin 发表于 2026-1-3 10:34:32

现在R0已经指向60H这个单元

我们下一个指令是:

MOV @R0, #56H ;将立即数56H送入到R0间接寻址的单元中,

执行之前,60H单元的内容是00

wuzhengmin 发表于 2026-1-3 10:35:53

执行完之后:

60H单元的内容是56H

wuzhengmin 发表于 2026-1-3 10:46:51

这些细致的跑一下,你就理解了

以下3条MOV指令的含义





MOV   SP, #70H;对堆栈指针赋值
       
        MOV R0,#60H ;将立即数60H送到寄存器R0中
        MOV @R0, #56H ;将立即数56H送入到R0间接寻址的单元中,
                  ;执行后60H单元的内容变为56H


我把用AI8051U实现以上实验过程的项目源程序也打包上传:

wuzhengmin 发表于 2026-1-3 11:02:55

一般来讲,真想学汇编,不用Keil 的Debug,

其实是学不好的,哪怕我们从z80开始经历了很多机型,哪怕讲过这门课,不动手实践

都是纯吹水!所以上面我搞的很细致是有原因的,不这样干,是没法学会汇编的!

所以虽然我没有STC8H8K64U的试验箱,但我有STC AI8051U的试验箱,我打算改写

陈老师的课程实验程序,让本课程的实验,也能在STC AI8051U的试验箱上跑起来!

当然会有困难,慢慢检查我的执行力!

想测试其他指令,怎么办?

很简单,还是推出Debug ,在源程序添加相应语句后再一次Debug ,

最好还是单步执行..........

wuzhengmin 发表于 2026-1-3 11:06:30

例如我想看看立即数传给累加器A:

MOV A, #98H

加入源程序后开始单步执行:

初始画面:

wuzhengmin 发表于 2026-1-3 11:10:55

SP 是默认的0x0007H,

PC 是默认的0xFF0000

我们单步一次:

PC按我们的指令,跳到0xFF0100

wuzhengmin 发表于 2026-1-3 11:15:55

再单步一次,把堆栈设为70H

MOV   SP, #70H;对堆栈指针赋值

执行完,PC变成0xFF0103,堆栈变成0x0070

wuzhengmin 发表于 2026-1-3 11:17:51

再单步2次后:

wuzhengmin 发表于 2026-1-3 11:19:35

现在的累加器A是0

接着单步一次,执行MOV A, #98H

画面变成:

页: 28 29 30 31 32 33 34 35 36 37 [38] 39 40 41 42 43 44 45 46 47
查看完整版本: 有关DMA,山东大学陈桂友教授