8086汇编学习笔记04

寄存器与内存访问

系列文章

字的存储

字单元的概念:存放一个字型数据(16位)的内存单元,由两个地址连续的内存单元组成高地址内存单元中存放字型数据的高位字节低地址内存单元中存放字型数据的低位字节。因此,一个内存单元可以作为一个字单元的高地址内存内存单元,也可以作为另一个字单元的低地址内存单元。

以后会将起始地址为N的字单元简称为N地址字单元。

DS寄存器与[address]

8086CPU中有一个 DS 寄存器,通常用来存放数据的段地址。

8086CPU不支持将数据直接送入段寄存器中的操作,因此如果要将数据送入段寄存器,必须经过某一通用寄存器中转:

MOV BX, 1000  ; 先将数据移入BX寄存器中
MOV DS, BX    ; 再通过BX移入DS寄存器中

[address] 表示一个内存单元,其中的数字 address 表示内存单元的偏移地址。指令执行时,8086CPU自动读取 DS 寄存器中的数据为内存单元的段地址。 例如,如果DS寄存器中的值是1000H,那么“ [0] ”代表内存单元10000H中的内容,“ [4E27] ”代表内存单元14E27H中的内容。

可以通过设置 DS 寄存器中的值,来将一个段地址范围当做数据段使用。

字节与字的传输

可以使用 MOV 指令在内存空间与寄存器之间传输数据,例如:

MOV AL, [0]   ; 将 DS:0 中的数据移到AL寄存器上
MOV [2F], AH  ; 将AH寄存器上的值移到内存 DS:2F 上

由于8086CPU有16根数据线,因此可以一次性传输16位数据,即一个字。也就是说,可以使用 MOV 指令在16位寄存器和字单元间传输数据

MOV AX, [0]   ; 将 DS:0~DS:1 中的字移到AX寄存器上
MOV [2F], AX  ; 将AX寄存器上的值移到内存 DS:2F~DS:30 上

移动前后,高地址和高位字节匹配,低地址和低位字节匹配

假设移动前,DS:0 处的字节为34HDS:1 处的字节为2CH,那么以上语句执行后,AX 寄存器的值为2C34HAH 高位为2CHAL 低位为34HDS:2F 处的字节为34HDS:30 处的字节为2CH

基本汇编指令:MOV、ADD与SUB

之前已经介绍了 MOVADD 指令。
MOV 指令们可以在通用寄存器、段寄存器和内存单元中互相传输数据,也可以将数字直接移动到通用寄存器上:

SUB指令(减法指令)
格式:
SUB register , number
用途:
将寄存器 register 中的值减去 number 对应的值。它的操作和 ADD 指令相反,用法类似。

ADDSUB 指令都不能操作段寄存器