寄存器间接寻址怎么算

来源:本站
导读:目前正在解读《寄存器间接寻址怎么算》的相关信息,《寄存器间接寻址怎么算》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《寄存器间接寻址怎么算》的详细说明。
简介:寄存器间接寻址(register indirect addressing) 操作数在存储器中,其有效地址EA存放在某个寄存器中。寄存器的使用在16位寻址和32位寻址时不一样。 (1)16位寻址 寄存器 有效地址存放在SI, DI, BX, BP中。 如果指令中指定的寄存器是BX, SI, DI,则操作数......

寄存器间接寻址(register indirect addressing)

操作数在存储器中,其有效地址EA存放在某个寄存器中。寄存器的使用在16位寻址和32位寻址时不一样。

(1)16位寻址

寄存器

有效地址存放在SI, DI, BX, BP中。

如果指令中指定的寄存器是BX, SI, DI,则操作数在数据段中,段基址在DS中,操作数的物理地址为:

SI:是源变址寄存器,默认段地址和DI一样,在DS中.和DS联用

DI:是目的变址寄存器.一般情况下与ds联用,来确定某个储存单元的地址

BX:基址寄存器,常用来存放访问内在时的基地址

BP:是基址指针,段地址默认在SS中.可以定位物理地址,比如:”mov ax,[bp+si+6]/mov ax,[bp+di+6]

SS: 堆栈段地址 ,指出当前堆栈的底部地址,即存放堆栈段的段基值。一旦你确定了堆栈地址,ss也不能随便改变了

DS:数据段寄存器,指出当前程序使用的数据所存放段的最低地址,即存放数据段的段基值

物理地址

在一般情况下,如果有效地址在SI、DI和BX中,则以DS段寄存器的内容为段值;

寄存器间接寻址怎么算

如果有效地址在BP中,或者是说是指令中指定的寄存器是BP,则操作数在堆栈中,段基址在SS中(SS段寄存器的内容为段值。),操作数的物理地址为:

物理地址=(SS)×16+(BP)

例如:

MOV AX, [SI] ; 自动引用DS作为段寄存器,以DS段寄存器的内容为段值

假设 (DS)= 5000H, (SI)= 1234H

注意,在汇编语言中,带方括号“[ ]”的操作数表示存储器操作数,括号中的内容作为存储单元的有效地址EA。

若有效地址用SI、DI和BX等之一来指定,则其缺省的段寄存器为DS。

寄存器SI的值不是操作数,而是操作数的地址(有效地址)。该操作数的物理地址应由DS和SI的值形成。

物理地址=(DS)×16+(SI)=50000H+1234H=51234H。那么存储的物理存储单元地址是51234H。

再设该字存储单元的内容是6789H,那么在执行该指令后,(AX)= 6789H。

MOV DL, CS:[BX] ; CS作为段寄存器

指定段超越前缀,此时引用的段寄存器是CS而不是自动引用了DS

目的操作数显式指定的段寄存器为CS

目的操作数的物理地址PA = CS * 16+BX

DL的值为该地址单元中存放的字类型数据

MOV AX, [BP] 引用的段寄存器为SS

设SS=3000H,BP=1000H该指令寻址及执行过程如图所示。

寄存器间接寻址怎么算

目的操作数的物理地址PA =(SS)×16+(BP)=30000H+1000H=31000H

把从物理地址为31000H开始的对应的一个字的值传送给AX寄存器。

(2)32位寻址

寄存器

八个32位通用寄存器均可作为寄存器间接寻址使用。除ESP和EBP默认段寄存器为SS外,其余六个通用寄存器均默认段寄存器为DS。

32位cpu通用寄存器: EAX,EBX,ECX,EDX,ESI,EDI(缺省为DS)/EBP,ESP(缺省默认为SS)

物理地址

**物理地址=(DS/SS)×16+(EAX/EBX/ECX/EDX/ESI/EDI/EBP/ESP)**

寄存器间接寻址方式用于表格处理,执行完一条指令后,只需要修改寄存器内容就可取出表格中的下一项。

提醒:《寄存器间接寻址怎么算》最后刷新时间 2024-03-14 00:53:46,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《寄存器间接寻址怎么算》该内容的真实性请自行鉴别。