接口指令

上传人:kms****20 文档编号:41225780 上传时间:2018-05-28 格式:DOC 页数:13 大小:40.50KB
返回 下载 相关 举报
接口指令_第1页
第1页 / 共13页
接口指令_第2页
第2页 / 共13页
接口指令_第3页
第3页 / 共13页
接口指令_第4页
第4页 / 共13页
接口指令_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《接口指令》由会员分享,可在线阅读,更多相关《接口指令(13页珍藏版)》请在金锄头文库上搜索。

1、接口指令接口指令80X86 的指令系统和寻址方式计算机解决实际问题是通过执行指令序列实现的。指令中所要完成的操作表现为操作码,其它表现为与操作数或操作数地址有关的信息。形式为: 操作码 操作数 .操作数所谓寻址方式指的是指令按什么方式寻找到所需的操作数或与其有关的信息。与数据有关的寻址方式这种寻址方式用来确定操作数地址从而找到操作数。我们以数据传送指令 MOV 为例来说明。其汇编格式为: mov 目标, 源(源-目标)1.立即寻址方式(immediate addressing)操作数直接包含在指令中,紧跟在操作码之后的寻址方式称为立即寻址方式,把该操作数称为立即数。MOV AL, 6 ;(AL

2、)=6MOV AX, 3064H ;(AX)=3064H这种寻址方式只能出现在源操作数的位置。其它寻址方式既可以出现在源也可以出现在目标操作数位置。2.寄存器寻址方式(register addressing)操作数直接包含在寄存器中,由指令指定寄存器号的寻址方式。MOV BX, AX ;(BX)=(AX)MOV DI, 5678H ;(DI)=5678H除以上两种寻址方式外,以下各种寻址方式的操作数都在存储器中,其操作数称为存储器操作数。由于 80X86 对内存采用分段管理,因此由以下寻址方式得到的只是有效地址(简写为 EAeffective address,在 IBM PC 中就是操作数地址

3、的偏移量部分) 。有效地址可以由以下四种成分组成:*位移量(displacement)是存放在指令中的一个 8 位、16 位或 32位的数,它是一个地址。*基址(base)是存放在基址寄存器中的内容。通常用来指向数据段中数组或字符串的首地址。*变址(index)是存放在变址寄存器中的内容。通常用来访问数组中的某个元素或字符串中的某个字符。*比例因子(scale factor)是 80386 以上 CPU 新增加的。其值可为1、2、4 或 8。寻址中,可用变址寄存器的内容乘以比例因子来取得变址值。EA = 基址(变址比例因子)位移量在某些情况下,80X86 允许程序员用段跨越前缀来改变系统所指定

4、的默认段。格式为“段寄存器名:” 。但在以下三种情况下,不允许使用段跨越前缀:o 串处理指令的目的串必须用 ES 段。o PUSH 指令的目的和 POP 指令的源必须用 SS 段。o 指令必须存放在 CS 段中。上页 EA 的计算公式中,等号右边的四种成分可以任意组合使用,在各种不同组合下其中每一种成分均可空缺,但比例因子只能与变址寄存器同时使用,这样就可得到以下 6 种不同组合的访问存储器的数据寻址方式。3.直接寻址方式(direct addressing)操作数的有效地址直接包含在指令中的寻址方式。有效地址存放在代码段的指令操作码之后,但操作数本身在存储器中,所以必须先求出操作数的物理地址

5、。这种寻址方式常用于存取简单变量。MOV AL, 78H在实模式中,若 DS 3000H,(30078H) 12H。则 DS:78H 表示物理地址 30078H,该指令的执行结果是(AL) 12H 。直接寻址方式可以使用段跨越前缀,如MOV AL, ES:78H。由于在汇编语言中用符号表示地址,所以指令“MOVAL,VAR”中的源操作数寻址方式是直接寻址,VAR 是内存的符号地址。如写成“MOV AL,VAR”也可以,两者是等效的。直接寻址方式适用于处理单个变量。80X86 中为了使指令字不要过长,规定双操作数指令的两个操作数中,只能有一个使用存储器寻址方式,这就是一个变量常常先要送到寄存器的

6、原因。4.寄存器间接寻址方式(registerindirect addressing)操作数的有效地址在基址寄存器 BX、BP 或变址寄存器 SI、DI 中,而操作数在存储器中的寻址方式。对于 386 以上 CPU,允许使用任何 32 位通用寄存器。凡使用 BP、ESP 和 EBP 时,其默认段为 SS 段(缺省情况操作数在堆栈段) 。其它寄存器的默认段为 DS 寄存器(缺省情况操作数在数据段) 。这两种情况都允许使用段超越前缀。例: MOV AL, BX注意 BX 用 括起来,表示 BX 寄存器中是有效地址而不是操作数,这也是与寄存器寻址方式在汇编格式上的区别。若(DS)=3000H,(BX

7、)=78H,(30078H)=12H,则物理地址为:10H*3000H+78H=30078H,执行结果:(AL)=12H。例: MOV AX, BP若(SS)=2000H,(BP)=80H,(20080H)=12H,(20081H)=56H, 执行结果: (AX)=5612H。利用这种寻址方式再配合修改寄存器内容的指令可以方便地处理一维数组。5.寄存器相对寻址方式(register relative addressing)也称为直接变址寻址方式。操作数的有效地址是一个基址(BX、BP)或变址(SI、DI)寄存器的内容和指令中给定的一个位移量(disp)之和。有效地址由 2 部分组成。对于 38

8、6 以上允许使用任何 32 位通用寄存器。即:EA(基址或变址寄存器)disp或:EA(32 位通用寄存器)+disp (386 型号以上)例: MOV AL, 8BX 或 MOV AL, BX8若(DS) 3000H,(BX) 70H,(30078H) 12H则物理地址10H(DS)(BX)830078H,结果(AL)=12H。例:MOV AX, COUNTSI 或 MOV AX, COUNT+SI其中 COUNT 为 16 位位移量的符号地址。若(DS) 3000H,(SI) 2000H,COUNT3000H则物理地址10H(DS)(SI)COUNT35000H。使用这种寻址方式可以访问一

9、维数组,其中 COUNT 是数组起始地址的偏移量,寄存器中是数组元素的下标乘以元素的长度(一个元素占用的字节数) ,下标从 0 开始计数。寄存器相对寻址方式允许使用段跨越前缀。6.基址变址寻址方式(based indexed addressing)操作数的有效地址是一个基址寄存器(BX、BP)和一个变址寄存器(SI、DI)的内容之和。386 以上允许使用变址部分除 ESP 以外的任何两个 32 位通用寄存器组合。缺省使用段寄存器的情况由基址寄存器决定。允许使用段超越前缀。例: MOV AL,BXSI 或 MOV AL,BXSIAL = DS * 10H + BX + SI使用这种寻址方式可以访

10、问一维数组,其中 BX 存放数组起始地址的偏移量,SI 存放数组元素的下标乘以元素的长度,下标从 0 开始计数。7.相对基址变址寻址方式(relative based indexed addressing)例:MOV AL,MASKBXSI 或 MOV AL,MASKBXSI 或 MOV AL,MASKBXSIAL = DS * 10H + MASK + BX + SI这种寻址方式通常用于对二维数组的寻址。如存储器中存放着由多个记录组成的文件,则位移量可指向文件之首,基址寄存器指向某个记录,变址寄存器则指向该记录中的一个元素。8.比例变址寻址方式(scaled indexed addressi

11、ng)注意:80386 以上的微处理器才提供。EA(基址寄存器)(变址寄存器)比例因子disp其优点在于:对于元素大小为 2、4、8 字节的数组,可以在变址寄存器中给出元素下标,而由寻址方式控制直接用比例因子把下标转换为变址值。可以看出,它实际上是 386 以上 CPU 存储器操作数寻址方式的通用公式。1、指出源操作数的寻址方式 MOV BX,2000H ;立即数寻址 MOV BX,2000H;直接寻址 MOV BX, SI ;寄存器间接寻址 MOV BX,SI2000H ;寄存器相对寻址 MOV BXSI,AL ;寄存器寻址 ADD AX,BXDI80 ;基址变址相对寻址 MUL BL ;寄

12、存器寻址 JMP BX ;段内间接寻址 SUB AX, BX ;寄存器寻址 IN AL,DX ;端口间接寻址 INC WORD PTR BP+10H ;寄存器相对寻址 MOV CL,LENGTH VAR ;立即数寻址 MOV BL,OFFSET VAR1 ;立即数寻址2、指出下列指令是否正确 (1) MOV DS,0100H;错误。源操作数是立即数时,目的操作数不能是段寄存器(2) MOV BP,AL;错误。操作数类型不一致(3) XCHG AH,AL ;正确。(4) OUT 310H,AL;错误。端口直接寻址的范围应在 0FFH 之间(5) MOV BX,BX ;正确。(6) MOV ES:

13、BXDI ,AX ;正确。(7) MOV AX,SIDI ;错误。存储器寻址中有效地址不能由两个变址寄存器组成(8) MOV SS:BX+SI+100H,BX ;正确。(9) AND AX,BL ;错误。操作数类型不一致(10) MOV DX,DS:BP ;正确(11) ADD SI,20H ;错误,目的操作数类型不明确。(12) MOV 30H,AL ;错误,目的操作数不能为立即数(13) PUSH 2000H;错误。堆栈指令的操作数不能是立即数(14) MOV SI,2000H;错误。两个操作数不能同时为存储器操作数(15) MOV SI,AL ;错误。操作数类型不一致(16) ADD 2

14、000H,20H; 错误,目的操作数类型不明确(17) MOV CS,AX;错误,目的操作数不能为代码段寄存器(18) INC DI ;错误,目的操作数类型不明确(19) OUT BX,AL;错误。端口间接寻址的寄存器只能是 DX寄存器(20) SHL BX,3 ;错误。移位次数大于 1 时应该用 CL寄存器(21) XCHG CX,DS ;错误。交换指令中不能出现段寄存器(22) POP AL ;错误。堆栈指令的操作数只能是字操作数(即 16 位操作数) 3. 写出下列指令中存储器操作数物理地址的计算表达式:1)MOV AL, DI (DS)10H + ( DI )(2)MOV AX, BX

15、+SI (DS)10H + ( BX ) + (SI)(3) MOV 5BX+DI,AL (DS)10H + ( BX ) + (DI) + 5(4)ADD AL, ES:BX (ES)10H + ( BX )5) SUB AX, 1000H (DS)10H + 1000H(6)ADC AX, BX+DI+2000H (DS)10H+(BX)+(DI)+2000H(7) MOV CX, BP+SI (SS)10H + ( BP ) + (SI)(8)INC BYTE PTRDI (DS)10H + ( DI )4. 若(DS)=3000H, (BX)=2000H, (SI)=0100H,(ES)=4000H,计算下列各指令中存储器操作数的物理地址。1)MOV BX,AL(DS)10H + ( BX ) = 32000H(2)ADD AL, BX+SI+1000H(DS)10H + ( BX ) + (SI)+1000H = 33100H(3)MOV AL,BX+SI(DS)

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号