天天看点

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

前几篇文章中,主要从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)的字单元中的高位字节单元和低位字节单元。