汇编 | 寄存器内存访问内存中字的存储
前几篇文章中,主要从CPU如何执行指令的角度讲解了8086CPU的逻辑结构、形成物理地址的方法、相关的寄存器以及一些指令。这一章中,我们从访问内存的角度继续学习几个寄存器。
CPU中,用 \(16\) 位寄存器来存储一个字。高 \(8\) 位存放高位字节,低 \(8\) 位存放低位字节。
在内存中存储时,由于内存单元是字节单元(一个单元存放一个字节),则一个字要用两个地址连续的内存单元来存放,这个字的低位字节存放在低地址单元中,高位字节存放在高地址单元中。
比如我们从 \(0\) 地址开始存放 \(20000\) ,这种情况如图3.1 所示。
先说一下,字单元的概念:字单元,即存放一个字型数据(16 位),由两个地址连续的内存单元组成。高地址内存单元中存放字型数据的高位字节,低地址内存单元中存放字型数据的低位字节。
在图3.1中,我们用 \(0, 1\) 两个内存单元存放数据 \(20000(4E20H), 0, 1\) 两个内存单元用来存储一个字,这两个单元可以看作一个起始地址为 \(0\) 的字单元(存放一个字的内存单元,由 \(0, 1\) 两个字节单元组成)。对于这个字单元来说,\(0\) 号单元是低地址单元,\(1\) 号单元是高地址单元,则字型数据 \(4E20H\) 的低位字节存放在 \(0\) 号单元中,高位字节存放在 \(1\) 号单元中。同理,将 \(2, 3\) 号单元看作一个字单元,它的起始地址为 \(2\)。在这个字单元中存放数据 \(18(0012H)\),则在 \(2\) 号单元中存放低位字节\(12H\),在 \(3\) 号单元中存放高位字节 \(00H\)
这里涉及新的概念:字单元,即存放一个字型数据( \(16\) 位)的内存单元,由两个地址连续的内存单元组成。高地址内存单元中存放字型数据的高位字节,低地址内存单元中存放字型数据的低位字节。
在以后的文章中,将起始地址为 \(N\) 的字单元简称为 \(N\) 地址字单元。比如一个字单元由 \(2. 3\) 两个内存单元组成,则这个字单元的起始地址为 \(2\) ,我们可以说这是 \(2\) 地址字单元.
问题3.1
对于图3.1
(1) \(0\) 地址单元中存放的字节型数据是多少?
(2) \(0\) 地址字单元中存放的字型数据是多少?
(3) \(2\) 地址单元中存放的字节型数据是多少?
(4) \(2\) 地址字单元中存放的字型数据是多少?
(5) \(1\) 地址字单元中存放的字型数据是多少?
思考后看分析。
分析:
(1) \(0\)地址单元中存放的字节型数据:\(20H\);
(2) \(0\)地址字单元中存放的字型数据:\(4E20H\);
(3) \(2\)地址单元中存放的字节型数据:\(12H\);
(4) \(2\)地址字单元中存放的字型数据:\(0012H\);
(5) \(1\) 地址字单元,即起始地址为两个单元存储一个字型数据,高位放在即:\(4EH\),它们组成字型数据是\(124EH\) .的字单元,它由 \(1\) 号单元和 \(2\) 号单元组成,用这 \(2\) 号单元中,即:\(12H\),低位放在1号单元中,大小为:\(46860\)
从上面的问题中我们看到,任何两个地址连续的内存单元,\(N\)号单元和\(N+1\)号单元,可以将它们看成两个内存单元,也可看成一个地址为\(N\)的字单元中的高位字节单元和低位字节单元。