汇编 | 寄存器内存访问内存中字的存储

前几篇文章中,主要从CPU如何执行指令的角度讲解了8086CPU的逻辑结构、形成物理地址的方法、相关的寄存器以及一些指令。这一章中,我们从访问内存的角度继续学习几个寄存器。

CPU中,用 \(16\)​ 位寄存器来存储一个字。高 \(8\)​ 位存放高位字节,低 \(8\) 位存放低位字节。

在内存中存储时,由于内存单元是字节单元(一个单元存放一个字节),则一个字要用两个地址连续的内存单元来存放,这个字的低位字节存放在低地址单元中,高位字节存放在高地址单元中。

比如我们从 \(0\) 地址开始存放 \(20000\)​ ,这种情况如图3.1 所示。

容量:一个 字 = 2 个字节

先说一下,字单元的概念:字单元,即存放一个字型数据(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\)​​​ 地址字单元中存放的字型数据是多少?

思考后看分析。


\[QAQ \]


分析:

(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\)的字单元中的高位字节单元和低位字节单元。

posted @ 2021-10-03 15:46  RioTian  阅读(177)  评论(0编辑  收藏  举报