文章目录
引言
在第二章中,我们主要从CPU如何执行指令的角度讲解了8086CPU的逻辑结构、形成物理地址的方法、相关寄存器以及一些指令。
这一章中,我们从访问内存的角度继续学习几个寄存器。
3.1 内存中字的存储
例:在0地址处开始存放20000(4E20)
- 高8位存放高位字节,低8位存放低位字节
- 内存单元是字节单元,一个单元只能存放一个字节,一个字的储存要2个单元
- 字单元=2*字节单元
问题3.1
(1)0地址单元中存放的字节型数据是多少?
答:20H
(2)0地址字单元中存放的字型数据是多少?
答:4E20H
(3)2地址字单元中存放的字节型数据是多少?
答:12H
(4)2地址单元存放的字型数据是多少?
答:0012H 注:2地址单元,即起始地址为2的字单元
(5)1地址单元中存放的字型数据是多少?
答:124EH
结论
任何两个地址连续的内存单元,N号单元和N+1号单元,可以将它们看成两个内存单元,也可以看成一个地址为N的字单元中的高位字节单元和低位字节单元。
3.2 DS和[address]
- CPU要读取一个内存单元的时候,必须先给出这个内存单元的地址;
- 8086PC中,内存地址由段地址和偏移地址组成;
- 8086CPU中有一个DS寄存器,通常用来存放要访问的数据的段地址;
例:
要读取10000H单元的内容
mov bx,1000H
mov ds,bx
mov al,[0]
上述指令将1000:0地址的内容送入al
详解mov al,[0]
已知的mov指令可完成的两种传送功能:
(1)将数据直接送入寄存器;如:mov ax,2
(2)将另一个寄存器中的内容送入另一个寄存器中。如:mov ax,bx
此外,mov指令还可以讲一个内存单元中的内容送入一个寄存器。
mov指令格式
mov 寄存器名,内存单元地址
"[…]"存放的是偏移地址,ds中存放的是段地址。
执行指令时,8086CPU会自动读取DS中的数据为内存单元的段地址。
mov的典型错误指令
错误示范
mov ds,1000H
8086CPU不支持直接将数据送入段寄存器的操作,ds是一个段寄存器。
将数据从寄存器送入内存单元
将al中的数据送入10000H内存单元
mov bx,1000H
mov ds,bx
mov [0],al
3.3字的传送
8086CPU是16位结构,有16根数据线,可以一次性传送16位的数据,即一次性传送一个字(两个字节)
问题3.3
注:
mov ax,[0]是将1000:0处的字型数据传到ax
mov al,[0]是将1000:0处的字节型数据传到al
还要注意数据的高低位
问题3.4
注:
sub bx,[2]操作是:
bx=bx中的字型数据-1000:2处的字型数据