一文看懂汇编语言中有效地址和偏移地址的区别

电子说

1.3w人已加入

描述

  汇编中偏移地址的理解

  偏移地址也称为偏移量,由于8086/8088CPU内部的ALU只能进行16位(16进制的话4X4,用4位表示,0x0000-0xFFFF)的运算,而8086/8088有20(16进制的话4X5,用5位表示,0x00000-0xFFFFF)条地址线。为了方便只能进行16运算的8086/8088CPU,于是我们便将5位变成两个4位,也即把物理地址分成段地址和偏移地址,如下图所示:

偏移地址

  那么通过段地址和偏移地址怎么得到物理地址呢?

  物理地址=段地址*16(10进制)+偏移地址。(2进制的话,也就是段地址《《4|偏移地址)。

  有效地址的理解

  有效地址EA是一16位无符号数,表示操作数所在单元到段首的距离即逻辑地址的偏移地址。当操作数是存放在存储器中时,存储器的存储单元的物理地址有两部分组成。一部分是偏移地址;一部分是段地址。在8086/8088的各种寻址方式中,寻找存储单元所需的偏移地址可由各种成分组成,称为有效地址,用EA表示。可以通过存储器寻址方式获得有效地址。

  有效地址可以由几部分组成:基址寄存器内容、变址寄存器内容、比例因子和位移量。

  如何由有效地址求得物理地址

  物理地址指CPU寻址主存时使用的20位地址,它确定了某一实际位置的内存单元。(2分)内存单元物理地址可由段址和段内的偏移量确定。内存单元在段内的偏移量称为有效地址(EA)。

  物理地址=段址×16+段内的偏移量。

偏移地址

  有效操作地址寻址方式

  根据指令内容确定操作数地址的过程称为寻址。完善的寻址方式可为用户组织和使用数据提供方便。

  ①直接寻址:指令地址域中表示的是操作数地址。

  ②间接寻址:指令地址域中表示的是操作数地址的地址即指令地址码对应的存储单元所给出的是地址A,操作数据存放在地址A指示的主存单元内。有的计算机的指令可以多次间接寻址,如A指示的主存单元内存放的是另一地址B,而操作数据存放在B指示的主存单元内,称为多重间接寻址。

  ③立即寻址:指令地址域中表示的是操作数本身。

  ④变址寻址:指令地址域中表示的是变址寄存器号i和位移值D。将指定的变址寄存器内容E与位移值D相加,其和E+D为操作数地址。许多计算机具有双变址功能,即将两个变址寄存器内容与位移值相加,得操作数地址。变址寻址有利于数组操作和程序共用。同时,位移值长度可短于地址长度,因而指令长度可以缩短。

  ⑤相对寻址:指令地址域中表示的是位移值D。程序计数器内容(即本条指令的地址)K与位移值D相加,得操作数地址K+D。当程序在主存储器浮动时,相对寻址能保持原有程序功能。此外,还有自增寻址、自减寻址、组合寻址等寻址方式。寻址方式可由操作码确定,也可在地址域中设标志,指明寻址方式。

  汇编语言中有效地址和偏移地址的区别

  在8086的机子上,有效地址=段地址左移4位+偏移地址,偏移地址与有效地址是一样的。但是就ibm的硬件来说,他们的寻址方式也分为2种,一是实地址寻址方式,另一种是保护虚地址寻址方式。此两种寻址方式非常不同,在8086的机子上,有效地址=段地址左移4位+偏移地址,因为它只有实地址寻址方式,而在286之后,就存在虚地址寻址方式,这就涉及到有关段以及描述符,描述符表,和其他的问题,请您自己参见有关接口的书。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分