寄存器寻址方式

更新时间:2023-07-04 08:22

寄存器寻址方式,是一种寻址方式,总共有14个16位寄存器,8个8位寄存器,7种寻址方式

寄存器介绍

总共有14个16位寄存器,8个8位寄存器

通用寄存器:

数据寄存器:

AH(8位)AL(8位)AX(16位)(AX和AL又称累加器)

BH(8位)BL(8位)BX(16位)(BX又称基址寄存器,唯一作为存储器指针使用寄存器)

CH(8位)CL(8位)CX(16位)(CX用于字符串操作,控制循环的次数,CL用于移位)

DH(8位)DL(8位)DX(16位)(DX一般用来做32位的乘除法时存放被除数或者保留余数)

指针寄存器:

SP堆栈指针(存放栈顶地址)

BP基址指针(存放堆栈基址偏移)

变址寄存器:主要用于存放某个存储单元地址的偏移,或某组存储单元开始地址的偏移,

即作为存储器(短)指针使用。作为通用寄存器,它们可以保存16位算术逻辑运算中的操

作数和运算结果,有时运算结果就是需要的存储单元地址的偏移.

SI源地址(源变址寄存器)

DI目的地址(目的变址寄存器)

控制寄存器:

IP指令指针

FLAG标志寄存器

①进位标志 CF,记录运算时最高有效位产生的进位值。

②符号标志 SF,记录运算结果的符号。结果为负时置1,否则置0。

③零标志 ZF,运算结果为0时ZF位置1,否则置0。

④溢出标志 OF,在运算过程中,如操作数超出了机器可表示数的范围称为溢出。溢出时OF位置1,否则置0。

辅助进位标志 AF,记录运算时第3位(半个字节)产生的进位值。

⑥奇偶标志 PF,用来为机器中传送信息时可能产生的代码出错情况提供检验条件。当结果操作数中1的个数为偶数时置1,否则置0。

段寄存器

CS代码段IP

DS数据段

SS堆栈段SPBP

ES附加段

方式分类

二、七种寻址方式:

1、立即寻址方式:

操作数就包含在指令中。作为指令的一部分,跟在操作码后存放在代码段。

这种操作数成为立即数。立即数可以是8位的,也可以是16位的。

例如:

指令:MOVAX,1234H

则:AX=1234H

2、寄存器寻址方式:

操作数在CPU内部的寄存器中,指令指定寄存器号。

对于16位操作数,寄存器可以是:AX、BX、CX、DX、SI、DI、SP和BP等。

对于8位操作数,寄存器可以是AL、AH、BL、BH、CL、CH、DL、DH。

这种寻址方式由于操作数就在寄存器中,不需要访问存储器来取得操作数

因而可以取得较高的运算速度。

3、直接寻址方式:

操作数在寄存器中,指令直接包含有操作数的有效地址(偏移地址)

注:操作数一般存放在数据段

所以操作数的地址由DS加上指令中直接给出的16位偏移得到。如果采用

段超越前缀,则操作数也可含在数据段外的其他段中。

例如:

MOVAX,[8054]

如(DS)=2000H,

则执行结果为(AX)=3050H

(物理地址=20000+8054=28054H)

28054H里的内容为3050H

汇编语言指令中,可以用符号地址代替数值地址

如:MOVAX,VALUE

此时VALUE为存放操作数单元的符号地址。

如写成:MOVAX,[VALUE]也是可以的,两者是等效的。

如VALUE在附加段中,则应指定段超越前缀如下:

MOVAX,ES:VALUE或MOVAX,ES:[VALUE]

4、寄存器间接寻址方式:

操作数在存储器中,操作数有效地址在SI、DI、BX、BP

这四个寄存器之一中。在一般情况下,如果有效地址在

SI、DI和BX中,则以DS段寄存器中的内容为段值。如果

有效地址在BP中,则以SS段寄存器中的内容为段值

例如:

MOVAX,[SI]

如果(DS)=5000H(SI)=1234H

则物理地址=50000+1234=51234H

51234H地址中的内容为:6789H

执行该指令后,(AX)=6789H

5、寄存器相对寻址方式:

操作数在存储器中,操作数的有效地址是一个基址寄存器(BX、BP)

变址寄存器(SI、DI)的内容加上指令中给定的8位或16位位移量之和

BX8位位移量

EA(有效地址)=BP+

SI16位位移量

DI

在一般情况下,如果SI、DI、或BX中的内容作为有效地址的一部分,那么

引用的段寄存器是DS;如果BP中的内容作为有效地址的一部分,那么引用的

段寄存器是SS。

物理地址=16d×(DS)+(BX)+8

或(SI)或16位位移量

或(DI)

物理地址=16d×(SS)+(BP)+8位位移量

或16位位移量

在指令中给定的8位或16位位移量采用补码形式表示。在计算有效地址时,如

位移量是8位,则被带符号扩展成16位。

例如:

MOVAX,[DI+1223H]

假设,(DS)=5000H,(DI)=3678H

则物理地址=50000+3678+1233=5489BH

5489BH地址中的内容:55AAH

执行该指令后AX=55AAH

下面指令中,源操作数采用寄存器相对寻址,引用的段寄存器是SS:MOVBX,[BP-4]

下面指令中,目的操作数采用寄存器相对寻址,引用的段寄存器是ES:MOVES:[BX+5],AL

指令:MOVAX,[SI+3]与MOVAX,3[SI]是等价的

6、基址加变址寻址方式:

操作数在寄存器中,操作数的有效地址由:

基址寄存器之一的内容与变址寄存器之一的内容相加

BXSI

即:EA=+

BPDI

在一般情况下,如果BP之内容作为有效地址的一部分,则以SS之内容为段值,否则已DS

为段值。

例如:

MOVAX,[BX][DI]

如:(DS)=2100H,

(BX)=0158H,

(DI)=10A5H

则EA=0158+10A5=11FD

物理地址=21000+11FD=221FDH

221FDH地址中的内容:1234H

执行该指令后AX=1234H

下面指令中,目的操作数采用基址加变址寻址

引用的段寄存器是DS:MOVDS:[BP+SI],AL

下面指令中,源操作数采用基址加变址寻址,

引用的段寄存器ES:MOVAX,ES:[BX+SI]

这种寻址方式使用与数组或表格处理。用基址寄存器存放数组首地址,而用变地寄存器

来定位数组中的各元素,或反之。由于两个寄存器都可改变,所以能更加灵活地访问数

组或表格中的元素。

下面的两种表示方法是等价的:

MOVAX,[BX+DI]

MOVAX,[DI][BX]

7、相对基址加变址寻址方式

操作数在存储器中,操作数的有效地址由于基址寄存器之一的内容与变址寄存器之一的

内容及指令中给定的8位或16位位移量相加得到。

BXSI8位

即:EA=++位移量

BPDI16位

在一般情况下,如果BP中的内容作为有效地址的一部分,则以SS段寄存器中的内容为段

值,否则以DS段寄存器中的内容为段值。

在指令中给定的8位或16位位移量采用补码形式表示。

在计算有效地址时,如果位移量是8位,那么被带符号扩展成16位。

当所得的有效地址操作FFFFH时,就取其64K的模

例如:

MOVAX,[BX+DI-2]

假设,(DS)=5000H,(BX)=1223H,DI=54H,(51275)=54H,(51276)=76H

物理地址=50000+1223+0054+FFFE(-2各位取反末位加一)=51275H

执行该指令后(AX)=7654H

相对基址加变址这种寻址方式的表示方法多种多样,以下四种方法均是等价的:

MOVAX,[BX+DI+1234H],MOVAX,1234H[BX][DI]

MOVAX1234H[BX+DI],MOVAX,1234H[DI][BX]

免责声明
隐私政策
用户协议
目录 22
0{{catalogNumber[index]}}. {{item.title}}
{{item.title}}