8086汇编中物理地址的合成方式


前言

在自学汇编语言的同时,学校也在上“微机原理与应用”这门课。感觉学这类东西还是要结合实验, 不然像现在的“微机原理”课一样,很多东西非常抽象,光看书根本无法理解。关于8086处理器对地址的处理,虽然感觉这部份应该很好理解,但是为了巩固印象,水一篇文章总结一下。

8086中地址的处理方式及原因

8086处理器使用 “段地址:偏移地址” 的方式表示地址。例如:073F:0000表示073F00这个物理地址,其中段地址和偏移地址都是16位的数字。 事实上,8086处理器中的地址加法器会把段地址乘16,再与偏移地址相加以合成物理地址。例如073F:0005对应的物理地址是073FH * 10H + 5H = 073F5H。(H表示16进制)。

之所以用这种看起来啰哩啰唆的方式表示地址,是因为8086处理器有20根地址总线,可以传送20位地址, 然而,8086处理器是16位处理器,一次只能处理16位的数据,所以要依靠两个16位的数据来间接表示20位的地址。

补充

如果足够细心,就会发现这种寻址方式存在一个有趣的问题:如果偏移地址不止一个十六进制位,会出现什么情况呢?

假设有一个地址:073F:0022,按照上面的方式合成物理地址:073FH * 10H + 22H = 07412H。看起来,这个地址也可以写成0741:0002。这两种写法都是正确的。

实际上,同一个物理地址对应多个“段地址:偏移地址”。只要按照正确的法则合成物理地址,就不会出错。


文章作者: LouisZ
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 LouisZ !
  目录