(一) 操作练习
- 编写实验程序,将00H-0FH共16个数写入内存3000H开始的连续16个存储单元中。
原理图:
代码:
CODE SEGMENT 'CODE'
ASSUME CS:CODE
START: XOR AX,AX
MOV DS,AX
MOV SI,3000H
MOV CX,16
MOV AL,0
AA1: MOV [SI],AL
INC AL
INC SI
DEC CX
JNE AA1
JMP $
CODE ENDS
END START
仿真运行结果:
【Register】命令下单步调试:
XOR AX,AX
MOV DS,AX
MOV SI,3000H
MOV CX,16
MOV AL,0
将AX寄存器内容清零,将AX的0值赋值给DS,将3000H地址存储单元赋值给SI,令计数器CX值为16,重复16次循环,令AL寄存器值为0,从0值开始赋值
AA1: MOV [SI],AL
INC AL
INC SI
DEC CX
JNE AA1
JMP $
第一次循环将AL的0值赋值给SI后将AL自增变成01H;将SI自增变成用于下一次循环的地址3001H,将计数器CX自减一,JNE AA1,当循环未结束ZF=0,一直进入AA1循环体执行
【Memory Dump】命令下单步调试:
- 编写程序,将内存3500H单元开始的8个数据复制到3600H单元开始的数据区中。单步运行程序,观察8086内部寄存器的数值变化。
原理图:
程序:
CODE SEGMENT 'CODE'
ASSUME CS:CODE
START:
MOV SI,3500H
MOV DI,3600H
MOV CX,8
AA1:
MOV AL,[SI]
MOV [DI],AL
INC SI
DEC CX
JNE AA1
JMP $
CODE ENDS
END START
运行结果截图:
START:
MOV SI,3500H 将地址3500H赋值给SI寄存器,源变址寄存器
MOV DI,3600H 将地址3600H赋值给SI寄存器,目的寄存器
MOV CX,8 计数器8
AA1: 循环体
MOV AL,[SI] 将地址3500H的数据赋值给AL寄存器
MOV [DI],AL 将从3500H地址获得的数据从AL赋值给地址3600H地址单元
INC DI 目的寄存器自增
INC SI 源变址寄存器自增
DEC CX 计数器减一
JNE AA1 检查ZF不等于0,一直执行至循环结束
JMP $