寄存器的功能是存储二进制代码,它是由具有存储功能的触发器组合起来构成的。一个触发器可以存储1位二进制代码,故存放n位二进制代码的寄存器,需用n个触发器来构成。下面小编给大家介绍一下“寄存器寻址方式举例”

一、寄存器寻址方式举例

寄存器寻址就是利用寄存器中的数值作为操作数,这种寻址方式是各类微处理器经常采用的一种方式,也是一种执行效率较高的寻址方式。

寄存器寻址是指操作数存放在CPU内部的寄存器中,指令中给出操作数所在的寄存器名。寄存器操作数可以是8位寄存器AH、AL、BH、BL、CH、CL、DH、DL,也可以是16位寄存器AX、BX、CX、DX、SP、BP、SI、DI等。因为寄存器寻址不需要通过总线操作访问存储器,所以指令执行速度比较快。

寄存器寻址( Register Addressing)是以通用寄存器的内容作为操作数的寻址方式,在该寻址方式下,操作数存放在寄存器中。寄存器寻址方式的寻址对象为:A,B,DPTR,RO~R7。其中,B仅在乘除法指令中为寄存器寻址,在其他指令中为直接寻址。A可以按寄存器寻址又可以直接寻址,直接寻址时写成ACC。

1、立即寻址方式

操作数就包含在指令中。作为指令的一部分,跟在操作码后存放在代码段。这种操作数成为立即数。立即数可以是8位的,也可以是16位的。

例如:

指令: MOV AX,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中,所以,其物理地址将由数据段寄存器DS和指令中给出的有效地址直接形成,但如果使用段超越前缀,那么操作数可存放在其它段。

例:假设有指令:MOV BX, [1234H],在执行时,(DS)=2000H,内存单元21234H的值为5213H。问该指令执行后,BX的值是什么?

解:根据直接寻址方式的寻址规则,把该指令的具体执行过程用下图来表示。

从图中,可看出执行该指令要分三部分:

由于1234H是一个直接地址,它紧跟在指令的操作码之后,随取指令而被读出;

访问数据段的段寄存器是DS,所以,用DS的值和偏移量1234H相加,得存储单元的物理地址:21234H;

取单元21234H的值5213H,并按“高高低低”的原则存入寄存器BX中。

所以,在执行该指令后,BX的值就为5213H。

由于数据段的段寄存器默认为DS,如果要指定访问其它段内的数据,可在指令中用段前缀的方式显式地书写出来。

下面指令的目标操作数就是带有段前缀的直接寻址方式。

MOV ES:[1000H], AX

直接寻址方式常用于处理内存单元的数据,其操作数是内存变量的值,该寻址方式可在64K字节的段内进行寻址。

注意:立即寻址方式和直接寻址方式的书写格式的不同,直接寻址的地址要写在括号“[”,“]”内。在程序中,直接地址通常用内存变量名来表示,如:MOV BX, VARW,其中,VARW是内存字变量。

试比较下列指令中源操作数的寻址方式(VARW是内存字变量):

MOV AX, 1234H MOV AX, [1234H] ; 前者是立即寻址,后者是直接寻址

MOV AX, VARW MOV AX, [VARW] ; 两者是等效的,均为直接寻址

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

如:MOV AX,VALUE

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

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

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

MOV AX,ES:VALUE 或 MOV AX,ES:[VALUE]

4、寄存器间接寻址方式

操作数在寄存器中,操作数有效地址在SI、DI、BX、BP这四个寄存器之一中。在不使用段超越前缀的情况下,如果有效地址在SI、DI和BX中,则以DS段寄存器中的内容为段值。如果有效地址在BP中,则以SS段寄存器中的内容为段值。

例如:

MOV AX, [DI]

如果(DS) = 1000H (DI) = 2345H

则物理地址 = 1000H * 16 + 2345H = 12345H

12345H地址中的内容为:4354H

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

5、寄存器相对寻址方式

操作数在存储器中,操作数的有效地址是一个基址寄存器(BX、BP)或变址寄存器(SI、DI)的内容加上指令中给定的8位或16位位移量之和。

例:假设指令:MOV BX, [SI+100H],在执行它时,(DS)=1000H,(SI)=2345H,内存单元12445H的内容为2715H,问该指令执行后,BX的值是什么?

解:根据寄存器相对寻址方式的规则,在执行本例指令时,源操作数的有效地址EA为:

EA=(SI)+100H=2345H+100H=2445H

该操作数的物理地址应由DS和EA的值形成,即:

PA=(DS)*16+EA=1000H*16+2445H=12445H。

所以,该指令的执行效果是:把从物理地址为12445H开始的一个字的值传送给BX。

6、基址加变址寻址方式

基址加变址寻址方式是指将寄存器(该寄存器一般指基址寄存器)的内容与指令中给出的地址偏移量相加,从而得到一个操作数的有效地址。

在基址加变址寻址方式中,通常把BX和BP看作是基址寄存器,把SI和DI看作变址寄存器,可把两种方式组合起来形成一种新的寻址方式。基址加变址的寻址方式是把一个基址寄存器BX或BP的内容,加上变址寄存器SI或DI的内容,并以一个段寄存器作为地址基准,作为操作数的地址。

当基址寄存器为BX时,段寄存器使用DS,当基址寄存器为BP时,段寄存器用SS。

例子:MOV AX, [BX+SI] 基址加变址寻址, MOV AX, [BX+DI+0400H] 带位移的基址加变址寻址。

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

在相对基址变址寻址方式中,通常把BX和BP看作是基址寄存器,把SI和DI看作变址寄存器。它是把一个基址寄存器BX或BP的内容,加上变址寄存器SI或DI的内容,再加上指令中给定的8位或16位位移量,并以一个段寄存器作为地址基准,作为操作数的地址。

当基址寄存器为BX时,段寄存器使用DS。当基址寄存器为BP时,段寄存器则用SS。

例:假设指令:MOV AX, [BX+SI+200H],在执行时,(DS)=1000H,(BX)=2100H,(SI)=0010H,内存单元12310H的内容为1234H。问该指令执行后,AX的值是什么?

解:根据相对基址加变址寻址方式的规则,在执行本例指令时,源操作数的有效地址EA为:

EA=(BX)+(SI)+200H=2100H+0010H+200H=2310H

该操作数的物理地址应由DS和EA的值形成,即:

PA=(DS)*16+EA=1000H*16+2310H=12310H

所以,该指令的执行效果是:把从物理地址为12310H开始的一个字的值传送给AX。

寄存器后偏移寻址计算题

设地址一共有32位

if(addra1 <=15)

addra2 <= addra1 + 16; //延迟16个单位

else

addra2 <= addra1 - 16;

if(addrb1 <=23)

addrb2 <= addrb1 + 8; // 延迟8个单位

else

addrb2 <= addrb1 - 8;

利用rom来进行延迟操作或者移位操作的时候,通过设置延迟放入的地址,移位寄存器来设置延迟的时长。

关键词: 寄存器寻址方式举例 二进制代码寄存器 寄存器立即寻址方式 寄存器的功能 寄存器间接寻址方式 寄存器移位寻址