第三章 寄存器(内存访问)
3.1 内存中字的存储
在0地址处开始存放20000(4E20H):
小端模式:高字节存放高地址位,低字节存放低地址位(0号单元是低地址单元,1号单元是高地址单元)
问:1地址单元存放的字型数据是多少?
答:124EH
结论:任何两个地址连续的内存单元,N号单元和N+1号单元,可以将它们看成两个内存单元,也可以看成一个地址为N的字单元中的高位字节单元和低位字节单元。
3.2 DS和[address]
- CPU要读取一个内存单元的时候,必须先给出这个内存单元的地址
- 在8086PC中,内存地址由段地址和偏移地址组成
- 8086CPU中有一个DS寄存器,通常用来存放要访问的数据的段地址
例如:我们要读取10000H单元的内容可以用如下程序段进行:
mov bx, 1000H
mov ds, bx
mov al, [0]
上面三条指令将10000H(1000:0)中的数据读到al中
mov指令的功能
将数据直接送入寄存器
mov ax,2
将一个寄存器中的内容送入另一个寄存器
mov bx,ax
将一个内存单元中的内容送入另一个寄存器
mov al, [0]
- 格式:mov 寄存器名, 内存单元地址
- […]表示一个内存单元,[…]中的0表示内存单元的偏移地址。
- 执行指令时,8086CPU自动取DS中的数据为内存单元的段。
注意:8086CPU不支持将数据直接送入段寄存器 (由于硬件设计问题)
mov ds, 1000H是非法的 ❌
正确做法:数据->通用寄存器->段寄存器 ✅
怎样将数据从寄存器al送入内存单元10000H?(反向操作~)
mov bx, 1000H
mov ds, bx
mov [0] al
3.3 字的传送
因为8086CPU是16位结构,有16根数据线,所以,可以一次性传送16位的数据,也就是一次性传送一个字。
比如:
mov bx 1000H
mov ds, bx
mov ax, [0] ;1000:0处的字型数据送入ax
mov [0], cx ; cx中的16位数据送到1000:0处
问题3.3
TODO: P14