已知MOV指令的几种形式:
MOV 寄存器, 立即数 MOV AX, 4000H
MOV 寄存器, 寄存器 MOV AX, BX
MOV 寄存器, 内存 MOV AX, [0]
MOV 内存, 寄存器 MOV [0], AX
MOV 段寄存器, 寄存器 MOV DS, AX
MOV 寄存器, 段寄存器 MOV AX, DS
注意下列MOV指令是不能在8086CPU下被执行的:
MOV 段寄存器, 立即数
已知ADD指令的几种形式:
ADD 寄存器, 立即数 ADD AX, 4000H
ADD 寄存器, 寄存器 ADD AX, BX
ADD 寄存器, 内存 ADD AX, [0]
ADD 内存, 寄存器 ADD [0], AX
注意下列ADD指令是不能在8086CPU下被执行的:
ADD 寄存器, 段寄存器
ADD 段寄存器, 寄存器
ADD 段寄存器, 立即数
已知SUB指令的几种形式:
SUB 寄存器, 立即数 SUB AX, 4000H
SUB 寄存器, 寄存器 SUB AX, BX
SUB 寄存器, 内存 SUB AX, [0]
SUB 内存, 寄存器 SUB [0], AX
注意下列SUB指令是不能在8086CPU下被执行的:
SUB 寄存器, 段寄存器
SUB 段寄存器, 寄存器
SUB 段寄存器, 立即数
数据段:
我们可以将一组长度为N(N<=64KB)、地址连续、起始地址为16的倍数的内存单元当做专门存储数据的内存空间,从而定义了一个数据段。
比如我们用123B0H~123B9H这段空间来存放数据:
段地址:1230H
偏移地址:0H~9H
长度:10字节
或
段地址:1230H
偏移地址:B0H~B9H
长度:10字节
或
……
我们习惯上采用向右偏移16位二进制位的方法来定义该数据的段地址。
如何访问数据段中的数据呢?
用DS存放数据段的段地址,再根据需要,用相关指令访问数据段中的具体单元。
例如:我们将123B0H~123BAH的内存单元定义为数据段,我们现在要累加这个数据段中的前三个单元中的数据,代码如下:
MOV AX, 123BH
MOV DS, AX
MOV AL, [0]
ADD AL, [1]
ADD AL, [2]
3.1~3.5小结:
(1)字在内存单元中存储时,要用两个地址连续的内存单元来存放,字的低位字节存放在地地址单元中,高位自己存放在高位地址单元中。
(2)用MOV指令要访问内存单元,可以再MOV指令中只给出单元的偏移地址,此时,段地址默认在DS寄存器中。
实验MOV AX, 1000:[0] 失败
实验MOV AX, 1000:0 失败
(3)[address]表示一个偏移地址为address的内存单元。
(4)在内存和寄存器之间传送字型数据的时候,高地址单元和高八位寄存器对应,地地址单元和低八位寄存器对应。
(5)MOV ADD SUB是具有两个操作对象的指令,JMP是具有一个操作对象的指令。
(6)可以根据自己的推测,在DEBUG中实验指令的新格式。