wuzhengmin 发表于 2026-1-2 19:57:39

比较复杂:



第七集到此结束

wuzhengmin 发表于 2026-1-3 08:50:07

今天开始学习第八课

第八集 汇编指令一

其实我个人很认可陈老师的理念,教材和上课都不能太难

结合自己的职业体会,汇编这样的课程,没有实验缓冲,纯理论,就是浪费学生的时间

现在唯一的麻烦是我手头有STC32G12K128和Ai8051U的试验箱,但是没有STC8H8K64U的试验箱

不知道用STC32G12K128的试验箱,能否顶替STC8H8K64U的试验箱?

今天学习C语言里的=,如何在汇编实现?



wuzhengmin 发表于 2026-1-3 08:55:18

1.传送指令——MOV

wuzhengmin 发表于 2026-1-3 09:04:11

具体理解小心看陈老师的解释:

wuzhengmin 发表于 2026-1-3 09:58:20

马上举个例子:

我们建立个新项目:

主程序如下:

$NOMOD51
$include (../../COMM-AI8051U/AI8051U.INC)
       


    Fosc_KHZ    EQU 24000   ;24000KHZ
               
        ORG 0000H

        LJMP MAIN;跳转到主程序;
       
        ORG   0100H   ;定义起始存储器位置
MAIN:
        MOV   SP, #70H;对堆栈指针赋值
       
        MOV R0,#60H ;将立即数60H送到寄存器R0中
        MOV @R0, #56H ;将立即数56H送入到R0间接寻址的单元中,
                  ;执行后60H单元的内容变为56H
       
       
LOOP:
        LJMP   LOOP
        END
       
重点看这2句:

MOV R0,#60H ;将立即数60H送到寄存器R0中
        MOV @R0, #56H ;将立即数56H送入到R0间接寻址的单元中,
                  ;执行后60H单元的内容变为56H

我们去Keil 的调试Debug 去看看:

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

进入Debug:

wuzhengmin 发表于 2026-1-3 10:10:03

先在Memory1存储器观察窗口,先输入个D:0

是什么意思?意思是我们要看内部RAM的内容,:0的意思是从地址00H开始看,我们要求从0号单元开始显示出来

一开始都是0:

wuzhengmin 发表于 2026-1-3 10:13:15

当然最好拖动,调整一下存储器窗口,让他显示的是整数00 102030 .....

参见下图:

就是让每行刚好是16个数据


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

我们单步,按F11

SP马上随指令变化:


wuzhengmin 发表于 2026-1-3 10:25:03

继续往下执行一步,看看工作寄存器R0 变化否?

执行前的R0:


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