用DS和[address]实现字的传送
要解决的问题:CPU从内存单元中要读取数据
要求:CPU要读取一个内存单元的时候,必须先给出这个内存单元的地址;
原理:在8086PC中,内存地址由段地址和偏移地址组成(段地址:偏移地址)
解决方案:DS和[address]配合
用 DS寄存器存放要访问的数据的段地址
偏移地址用[…]形式直接给出
1 | /*将10000H(1000:0)中的数据读到al中*/ |
[0]指出访问数据的偏移地址,尽管此行代码没有出现DS,但指令集规定了出现[…]这样的写法就是要其配合DS来访问一个内存单元
1 | /*将al中的数据写到10000H(1000:0)中*/ |
将段地址送入DS的两种方式
方式1:不能如此,8086CPU不支持将数据直接送入段寄存器(硬件设计的问题)
1 | mov ds,1000H |
方式2:套路:数据→一般的寄存器→段寄存器
1 | mov bx, 1000H |
字的传送
8086CPU可以一次性传送一个字(16位的数据)
示例
1 | mov bx, 1000H |

字的传送案例1
已知内存状态如下图所示,执行如下指令,写出寄存器状态

1 | mov ax, 1000H |
寄存器状态
| 寄存器 | 值 |
|---|---|
| AX | 1000H——1123H (注意读取的是低位开始的16位的字,不是1个字节,读取时高位在前,低位在后) |
| BX | 6622H——6622H+2211H=8833H |
| CX | 2211H——2211H+2211H=8833H |
| DX | 不涉及 |
| SP | 不涉及 |
| BP | 不涉及 |
| SI | 不涉及 |
| DI | 不涉及 |
| DS | 10000H(这是合成的内存物理地址) |
| ES | 不涉及 |
| SS | 不涉及 |
| CS | 不涉及 |
| IP | 不涉及 |
Debug工具验证
略,自行验证
字的传送案例2
已知内存状态如下图所示,执行如下指令,写出寄存器状态

1 | mov ax, 1000H |
