汇编语言操作数的选址方式Word文档格式.docx

上传人:b****6 文档编号:18238903 上传时间:2022-12-14 格式:DOCX 页数:10 大小:20.07KB
下载 相关 举报
汇编语言操作数的选址方式Word文档格式.docx_第1页
第1页 / 共10页
汇编语言操作数的选址方式Word文档格式.docx_第2页
第2页 / 共10页
汇编语言操作数的选址方式Word文档格式.docx_第3页
第3页 / 共10页
汇编语言操作数的选址方式Word文档格式.docx_第4页
第4页 / 共10页
汇编语言操作数的选址方式Word文档格式.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

汇编语言操作数的选址方式Word文档格式.docx

《汇编语言操作数的选址方式Word文档格式.docx》由会员分享,可在线阅读,更多相关《汇编语言操作数的选址方式Word文档格式.docx(10页珍藏版)》请在冰豆网上搜索。

汇编语言操作数的选址方式Word文档格式.docx

图3.1是指令“MOVAX,4576H”存储形式和执行示意图。

3.2寄存器寻址方式

指令所要的操作数已存储在某寄存器中,或把目标操作数存入寄存器。

把在指令中指出所使用寄存器(即:

寄存器的助忆符)的寻址方式称为寄存器寻址方式。

指令中可以引用的寄存器及其符号名称如下:

、8位寄存器有:

AH、AL、BH、BL、CH、CL、DH和DL等;

、16位寄存器有:

AX、BX、CX、DX、SI、DI、SP、BP和段寄存器等;

、32位寄存器有:

EAX、EBX、ECX、EDX、ESI、EDI、ESP和EBP等。

寄存器寻址方式是一种简单快捷的寻址方式,源和目的操作数都可以是寄存器。

1、源操作数是寄存器寻址方式

如:

ADDVARD,EAX  ADDVARW,AX   MOVVARB,BH等。

VARD、VARW和VARB是双字,字和字节类型的内存变量。

在第4章将会学到如何定义它们。

2、目的操作数是寄存器寻址方式

ADDBH,78h    ADDAX,1234h   MOVEBX,12345678H等。

3、源和目的操作数都是寄存器寻址方式

MOVEAX,EBX   MOVAX,BX    MOVDH,BL等。

由于指令所需的操作数已存储在寄存器中,或操作的结果存入寄存器,这样,在指令执行过程中,会减少读/写存储器单元的次数,所以,使用寄存器寻址方式的指令具有较快的执行速度。

通常情况下,我们提倡在编写汇编语言程序时,应尽可能地使用寄存器寻址方式,但也不要把它绝对化。

3.3直接寻址方式

指令所要的操作数存放在内存中,在指令中直接给出该操作数的有效地址,这种寻址方式为直接寻址方式。

在通常情况下,操作数存放在数据段中,所以,其物理地址将由数据段寄存器DS和指令中给出的有效地址直接形成,但如果使用段超越前缀,那么,操作数可存放在其它段。

例3.1假设有指令:

MOVBX,[1234H],在执行时,(DS)=2000H,内存单元21234H的值为5213H。

问该指令执行后,BX的值是什么?

解:

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

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

图3.2直接寻址方式的存储和执行示意图

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

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

21234H;

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

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

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

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

MOV ES:

[1000H],AX

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

注意:

立即寻址方式和直接寻址方式的书写格式的不同,直接寻址的地址要写在括号“[”,“]”内。

在程序中,直接地址通常用内存变量名来表示,如:

MOVBX,VARW,其中,VARW是内存字变量。

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

MOV AX,1234H

MOV AX,[1234H]

;

前者是立即寻址,后者是直接寻址

MOV AX,VARW

MOV AX,[VARW]

两者是等效的,均为直接寻址

3.4寄存器间接寻址方式

操作数在存储器中,操作数的有效地址用SI、DI、BX和BP等四个寄存器之一来指定,称这种寻址方式为寄存器间接寻址方式。

该寻址方式物理地址的计算方法如下:

寄存器间接寻址方式读取存储单元的原理如图3.3所示。

图3.3读取操作数过程的示意图

在不使用段超越前缀的情况下,有下列规定:

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

若有效地址用BP来指定,则其缺省的段寄存器为SS(即:

堆栈段)。

例3.2假设有指令:

MOVBX,[DI],在执行时,(DS)=1000H,(DI)=2345H,存储单元12345H的内容是4354H。

问执行指令后,BX的值是什么?

根据寄存器间接寻址方式的规则,在执行本例指令时,寄存器DI的值不是操作数,而是操作数的地址。

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

PA=(DS)*16+DI=1000H*16+2345H=12345H。

所以,该指令的执行效果是:

把从物理地址为12345H开始的一个字的值传送给BX。

其执行过程如右图3.4所示。

图3.4读取操作数过程的示意图

3.5寄存器相对寻址方式

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

其有效地址的计算公式如右式所示。

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

、若有效地址用BP来指定,则其缺省的段寄存器为SS。

指令中给出的8位/16位偏移量用补码表示。

在计算有效地址时,如果偏移量是8位,则进行符号扩展成16位。

当所得的有效地址超过0FFFFH,则取其64K的模。

例3.3假设指令:

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

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

图3.5寄存器相对寻址方式的执行过程示意图

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

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

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

把从物理地址为12445H开始的一个字的值传送给BX。

其执行过程如图3.5所示。

3.6基址加变址寻址方式

操作数在存储器中,其有效地址是一个基址寄存器(BX、BP)和一个变址寄存器(SI、DI)的内容之和。

在不使用段超越前缀的情况下,规定:

如果有效地址中含有BP,则缺省的段寄存器为SS;

否则,缺省的段寄存器为DS。

例3.4假设指令:

MOVBX,[BX+SI],在执行时,(DS)=1000H,(BX)=2100H,(SI)=0011H,内存单元12111H的内容为1234H。

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

EA=(BX)+(SI)=2100H+0011H=2111H

PA=(DS)*16+EA=1000H*16+2111H=12111H

把从物理地址为12111H开始的一个字的值传送给BX。

其执行过程如右图3.6所示。

图3.6基址加变址寻址方式的执行过程示意图

3.7相对基址加变址寻址方式

操作数在存储器中,其有效地址是一个基址寄存器(BX、BP)的值、一个变址寄存器(SI、DI)的值和指令中的8位/16位偏移量之和。

如果有效地址中含有BP,则其缺省的段寄存器为SS;

否则,其缺省的段寄存器为DS。

例3.5假设指令:

MOVAX,[BX+SI+200H],在执行时,(DS)=1000H,(BX)=2100H,(SI)=0010H,内存单元12310H的内容为1234H。

问该指令执行后,AX的值是什么?

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

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

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

把从物理地址为12310H开始的一个字的值传送给AX。

其执行过程如图3.7所示。

从相对基址加变址这种寻址方式来看,由于它的可变因素较多,看起来就显得复杂些,但正因为其可变因素多,它的灵活性也就很高。

比如:

图3.7相对基址加变址寻址方式的执行过程示意图

用D1[i]来访问一维数组D1的第i个元素,它的寻址有一个自由度,用D2[i][j]来访问二维数组D2的第i行、第j列的元素,其寻址有二个自由度。

多一个可变的量,其寻址方式的灵活度也就相应提高了。

相对基址加变址寻址方式有多种等价的书写方式,下面的书写格式都是正确的,并且其寻址含义也是一致的。

MOV AX,[BX+SI+1000H]   MOV AX,1000H[BX+SI]

MOV AX,1000H[BX][SI]   MOV AX,1000H[SI][BX]

但书写格式BX[1000+SI]和SI[1000H+BX]等是错误的,即所用寄存器不能在“[“,”]”之外,该限制对寄存器相对寻址方式的书写也同样起作用。

相对基址加变址寻址方式是以上7种寻址方式中最复杂的一种寻址方式,它可变形为其它类型的存储器寻址方式。

表3.1列举出该寻址方式与其它寻址方式之间的变形关系。

表3.1相对基址加变址寻址方式与其它寻址方式之间的变形关系

源操作数

指令的变形

源操作数的寻址方式

只有偏移量

MOV AX,[100H]

直接寻址方式

只有一个寄存器

MOV AX,[BX]或MOVAX,[SI]

寄存器间接寻址方式

有一个寄存器和偏移量

MOV AX,[BX+100H]或MOVAX,[SI+100H]

寄存器相对寻址方式

有二个寄存器

MOV AX,[BX+SI]

基址加变址寻址方式

有二个寄存器和偏移量

MOV AX,[BX+SI+100H]

相对基址加变址寻址方式

3.832位地址的寻址方式

在32位微机系统中,除了支持前面的七种寻址方式外,又提供了一种更灵活、方便,但也更复杂的内存寻址方式,从而使内存地址的寻址范围得到了进一步扩大。

在用16位寄存器来访问存储单元时,只能使用基地址寄存器(BX和BP)和变址寄存器(SI和DI)来作为地址偏移量的一部分,但在用32位寄存器寻址时,不存在上述限制,所有32位寄存器(EAX、EBX、ECX、EDX、ESI、EDI、EBP和ESP)都可以是地址偏移量的一个组成部分。

当用32位地址偏移量进行寻址时,内存地址的偏移量可分为三部分:

一个32位基址寄存器,一个可乘1、2、4或8的32位变址寄存器,一个8位/32位的偏移常量,并且这三部分还可进行任意组合,省去其中之一或之二。

32位基址寄存器是:

EAX、EBX、ECX、EDX、ESI、EDI、EBP和ESP;

32位变址寄存器是:

EAX、EBX、ECX、EDX、ESI、EDI和EBP(除ESP之外)。

下面列举几个32位地址寻址指令:

MOVAX,[123456H]

MOVEAX,[EBX]

MOVEBX,[ECX*2]

MOVEBX,[EAX+100H]

MOVEDX,[EAX*4+200H]

MOVEBX,[EAX+EDX*2]

MOVEBX,[EAX+EDX*2+300H]

MOVAX,[ESP]

用32位地址偏移量进行寻址的有效地址计算公式归纳如右式所示。

由于32位寻址方式能使用所有的通用寄存器,所以,和该有效地址相组合的段寄存器也就有新的规定。

具体规定如下:

1、地址中寄存器的书写顺序决定该寄存器是基址寄存器,还是变址寄存器;

[EBX+EBP]中的EBX是基址寄存器,EBP是变址寄存器,而[EBP+EBX]中的EBP是基址寄存器,EBX是变址寄存器;

2、默认段寄存器的选用取决于基址寄存器;

3、基址寄存器是EBP或ESP时,默认的段寄存器是SS,否则,默认的段寄存器是DS;

4、在指令中,如果使用段前缀的方式,那么,显式段寄存器优先。

下面列举几个32位地址寻址指令及其内存操作数的段寄存器。

指令的举例

访问内存单元所用的段寄存器

MOV 

AX,[123456H]

默认段寄存器DS

EAX,[EBX+EBP]

EBX,[EBP+EBX]

默认段寄存器SS

EBX,[EAX+100H]

EDX,ES:

[EAX*4+200H]

显式段寄存器ES

[ESP+EDX*2],AX 

EBX,GS:

[EAX+EDX*2+300H]

显式段寄存器GS

AX,[ESP] 

3.9操作数寻址方式的小结

下面控件是学习和理解操作数寻址方式的控件,它把各种寻址方式的变化和限制组合在一起。

通过它,读者能更进一步掌握寻址方式的书写格式。

3.10习题

3.1、访问内存单元的寻址方式有几种?

它们具体是哪些?

3.2、指出下列各种操作数的寻址方式。

1)、[BX]

3)、435H

5)、[23]

7)、[DI+32]

9)、[EAX+90]

2)、SI

4)、[BP+DI+123]

6)、data 

 

(data是一个内存变量名)

8)、[BX+SI]

10)、[BP+4]

3.3、哪些寄存器的值可用于表示内存单元的偏移量?

3.4、判断下列操作数的寻址方式的正确性,对正确的,指出其寻址方式,对错误的,说明其错误原因。

1)、[AX]

3)、BP

5)、DS

7)、[BX+BP+32]

9)、[CX+90]

11)、BX+90H

13)、SI[100h]

15)、[EAX+EBX*6]

2)、[EAX]

4)、[SI+DI]

6)、BH

8)、[BL+44]

10)、EDX

12)、[DX]

14)、[BX*4]

16)、[DX+90H]

3.5、已知寄存器EBX、DI和BP的值分别为12345H、0FFF0H和42H,试分别计算出下列各操作数的有效地址。

3)、[BP+DI]

5)、[1234H]

2)、[DI+123H]

4)、[BX+DI+200H]

6)、[EBX*2+345H]

3.6、指出下列各寻址方式所使用的段寄存器。

1)、[SI+34h]

3)、ES:

[BP+DI]

5)、[BP+1234H]

2)、[456H]

6)、FS:

[EBX*2+345H]

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1