第3章+实方式指令寻址及指令系统_第1页
第3章+实方式指令寻址及指令系统_第2页
第3章+实方式指令寻址及指令系统_第3页
第3章+实方式指令寻址及指令系统_第4页
第3章+实方式指令寻址及指令系统_第5页
已阅读5页,还剩185页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、授课教师:授课教师:计算机学院 张晓丽邮邮 箱:箱:l3.1. 指令的基本指令的基本寻址方式寻址方式l3.2. 实方式实方式32位指令寻址位指令寻址 l3.3. 实方式指令系统实方式指令系统l3.4. 字符设备字符设备I/O功能调用功能调用l3.1. 指令的基本指令的基本寻址方式寻址方式l3.2. 实方式实方式32位指令寻址位指令寻址 l3.3. 实方式指令系统实方式指令系统l3.4. 字符设备字符设备I/O功能调用功能调用l8086 CPU的指令系统的基本指令基本指令包括: 数据传送类指令数据传送类指令 算术运算类指令算术运算类指令 位操作类指令位操作类指令 串操作类指令串操作类指令 控制转

2、移类指令控制转移类指令 处理机控制类指令处理机控制类指令操作类型操作类型1. 数据传送数据传送源源目的目的寄存器寄存器寄存器寄存器寄存器寄存器寄存器寄存器存储器存储器存储器存储器存储器存储器存储器存储器置置“1”,清,清“0”2. 算术逻辑操作算术逻辑操作加、减、乘、除、增加、减、乘、除、增 1、减、减 1、求补、浮点运算、十进制运算、求补、浮点运算、十进制运算与、或、非、异或、位操作、位测试、位清除、位求反与、或、非、异或、位操作、位测试、位清除、位求反如如 8086MOVESTORELOADMOVEPUSHPOP例如例如MOVEMOVEADD SUB MUL DIV INC DEC CMP

3、 NEG AAA AAS AAM AAD AND OR NOT XOR TEST3. 移位操作移位操作算术移位算术移位4. 转移转移(1) 无条件转移无条件转移 JMP(2) 条件转移条件转移 结果为零转结果为零转 (Z = 1) JZ 结果溢出转结果溢出转 (O = 1)JO 结果有进位转(结果有进位转(C = 1)JC 跳过一条指令跳过一条指令 SKP循环移位循环移位(带进位和不带进位)(带进位和不带进位)如如300305306307SKP DZ D = 0 则跳则跳逻辑移位逻辑移位完成触发器完成触发器IN AX, nOUT DX, ALOUT n, AXOUT DX, AX(4) 陷阱(

4、陷阱(Trap)与陷阱指令与陷阱指令意外事故的中断意外事故的中断 陷阱指令陷阱指令如如 8086 INT TYPE 软中断软中断提供给用户使用的陷阱指令,完成系统调用提供给用户使用的陷阱指令,完成系统调用5. 输入输出输入输出 隐指令隐指令 一般不提供给用户直接使用一般不提供给用户直接使用 在出现事故时,由在出现事故时,由 CPU 自动产生并执行自动产生并执行IN AL, DXIN AX, DX 入入 端口地址端口地址 CPU 的寄存器的寄存器 出出 CPU 的寄存器的寄存器 端口地址端口地址如如如如IN AL, nOUT n, ALOther:非数值处理指令特权指令向量指令多处理机指令一、操

5、作数类型一、操作数类型 地址地址 数字数字 字符字符 逻辑数逻辑数无符号整数无符号整数定点数、浮点数、十进制数定点数、浮点数、十进制数ASCII逻辑运算逻辑运算 (布尔类型布尔类型)二、数据在存储器中的存放方式二、数据在存储器中的存放方式字地址字地址 为为 低字节低字节 地址地址字地址字地址 为为 高字节高字节 地址地址37621540字地址字地址04低字节低字节04512673字地址字地址04低字节低字节 寻址方式寻址方式 确定确定 本条本条 指令指令 的的 操作数地址操作数地址 下一条下一条 指令指令 的的 指令地址指令地址指令寻址指令寻址数据寻址数据寻址 寻寻址址方式方式一、指令寻址一、

6、指令寻址 顺序顺序( PC ) + 1 PC 跳跃跳跃由由转移指令转移指令指出指出LDA 1000ADD 1001DEC 1200JMP 7LDA 2000SUB 2001INCSTA 2500LDA 1100.0123456789PC+1指令地址寻址方式指令地址寻址方式指令地址指令地址指令指令顺序寻址顺序寻址1顺序寻址顺序寻址2顺序寻址顺序寻址3跳跃寻址跳跃寻址7顺序寻址顺序寻址8二、数据寻址二、数据寻址 形式地址形式地址 A 指令字中的地址指令字中的地址 有效地址有效地址 EA 操作数的真实地址操作数的真实地址 约定约定 指令字长指令字长 = 存储字长存储字长 = 机器字长机器字长形式地址

7、形式地址 A操作码操作码寻址特征寻址特征指令一般由操作码OP 、寻址方式MOD和一个或多个操作数OD等字段组成操作码OP寻址方式MOD操作数ODlPC微机的多数指令有一个或两个操作数有一个或两个操作数,当然也可以没有操作数没有操作数l常见的表示形式如下:OPOP 操作数操作数 OP 目的操作数目的操作数 , 源操作数源操作数 l单操作数指令单操作数指令只需指定一个操作数 INC AX ; AX+1-AXl双操作数指令双操作数指令需要指定两个操作数 SUB BX,CX ; BX-CX-BXl没有操作数指令没有操作数指令,即隐含操作数指令 在OD位置虽然未明确给出操作数, 但在指令OP中隐含有事先

8、安排的操作数 CLC ; 0-CF指令字长指令字长指令字长决定于指令字长决定于操作码的长度操作码的长度指令字长 = 存储字长2. 指令字长指令字长 可变可变操作数地址的长度操作数地址的长度操作数地址的个数操作数地址的个数1. 指令字长指令字长 固定固定 控制简单 控制复杂 指令字长为8的倍数 常用指令设计单字长格式 操作数:操作数: 立即数立即数寄存器数寄存器数存储器数存储器数立即数寻址立即数寻址 寻址方式寻址方式寄存器寻址寄存器寻址存储器寻址存储器寻址l立即寻址立即寻址l寄存器寻址寄存器寻址l直接寻址直接寻址l寄存器间接寻址寄存器间接寻址l寄存器相对寻址寄存器相对寻址l基址变址寻址基址变址寻

9、址l相对基址变址寻址相对基址变址寻址lEA = Disp + (SI/DI/None) + (BX/BP/None)以BP寻址PA,默认用SS以BX、SI、DI或变量寻址,默认DSl越段:越段:改变默认使用的段寄存器DS可被CS、SS或ES、FS、GS越段SS可被DS、CS或ES、FS、GS越段l例例: 变量FIVE段地址4000H已在DS中,EA=0010H,则: FIVE DB 5 MOV AL FIVElPA=DS*24+10H=40010Hl例例: 变量FIVE段地址4000H已在ES中,EA=0010H,则可采用越段形式: MOV AL, ES:FIVElPA=ES*24+10H=4

10、0010Hl不可越段的情况不可越段的情况程序以指针IP寻址,系统规定用代码段寄存器CS与与IP计算指令地址以堆栈指针SP寻址PA,用SS对于串操作串操作,ES用来作为目的操作数的段寄存器SSDSDSDSSSDS可被可被CS、SS或或ES、FS、GS越段越段SS可被可被DS、CS或或ES、FS、GS越段越段寻址方式寻址方式 1. 立即寻址立即寻址 指令执行阶段不访存指令执行阶段不访存 A 的的位数位数限制了立即数的范围限制了立即数的范围OP # A立即寻址特征立即寻址特征立即数立即数 可正可负可正可负 补码补码 形式地址形式地址 A 就是操作数就是操作数l寻址特点寻址特点 指令操作码和操作数都在

11、存储器代码段中l汇编格式汇编格式 n(n为立即操作数,是用8位或16位二进制补码表示的有符号数)l图形表示图形表示l如果立即数为16位或32位, 将按“高高低低高高低低”的原则进行存储 指令指令“MOV AX, 4576H”的存储形式和执行情况的存储形式和执行情况lMOV AX, 10 。执行后(。执行后(AX)=?解:解:源操作数为立即寻址方式,立即数为10,存放在指令的下一单元。 执行:执行:10AX 执行后:执行后:(AX)=000AH 图形表示:图形表示:2. 直接寻址直接寻址 EA = A操作数操作数主存主存寻址特征寻址特征LDAAAACC 执行阶段访问一次存储器执行阶段访问一次存储

12、器 A 的位数决定了该指令操作数的的位数决定了该指令操作数的寻址范围寻址范围 操作数的地址操作数的地址不易修改不易修改(必须修改(必须修改A)有效地址由形式地址直接给出有效地址由形式地址直接给出l特点特点指令操作码OP后直接给出操作数的1616位偏移地址位偏移地址EAEA OP与直接地址在代码段,操作数据一般在数据段 l功能:功能:指令下一字单元的内容是操作数的偏移地址EA PA=DS*16+NNl图形表示图形表示l寄存器和存储器内容为:(AX)=1212H,BUF为数据段定义的变量, 其偏移地址是2000H,(DS)=3000H,(32000H)=4545H。执行指令:执行指令:MOV AX

13、 ,BUF执行后:(执行后:(AX)=? l解:解:执行:(执行:(32000H)AX执行后:(执行后:(AX)=4545H图形表示:图形表示: MOV BX, 1234H,在执行时,(DS)=2000H,内存单元21234H的值为5213H。问该指令执行后,BX的值是什么?直接寻址示例直接寻址示例直接寻址示例直接寻址示例3. 隐含寻址隐含寻址 操作数地址隐含在操作码中操作数地址隐含在操作码中ADDA操作数操作数主存主存寻址特征寻址特征AACC暂存暂存ALU另一个操作数另一个操作数隐含在隐含在 ACC 中中如如 8086MUL 指令指令被乘数隐含在被乘数隐含在 AX(16位)或位)或 AL(8

14、位)中位)中MOVS 指令指令源操作数的地址隐含在源操作数的地址隐含在 SI 中中目的操作数的地址隐含在目的操作数的地址隐含在 DI 中中 指令字中少了一个地址字段,可缩短指令字长指令字中少了一个地址字段,可缩短指令字长4. 间接寻址间接寻址 EA =(A) 有效地址由形式地址间接提供有效地址由形式地址间接提供OPA寻址特征寻址特征AEA主存主存EAA1EA A1主存主存 EA10 执行指令阶段执行指令阶段 2 次访存次访存 可可扩大寻址范围扩大寻址范围 便于便于编制程序编制程序OPA寻址特征寻址特征A一次间址一次间址多次间址多次间址操作数操作数操作数操作数多次访存多次访存5. 寄存器寻址寄存

15、器寻址 EA = Ri 执行阶段不访存,只访问寄存器,执行执行阶段不访存,只访问寄存器,执行速度快速度快OPRi寻址特征寻址特征 寄存器个数有限,可寄存器个数有限,可缩短指令字长缩短指令字长操作数操作数R0RiRn寄存器寄存器有效地址即为寄存器编号有效地址即为寄存器编号l特点特点 操作数操作数在指令指明的寄存器寄存器中l功能功能 操作数直接存放在寄存器中l图形表示图形表示l下列程序执行后,(AX)=? (BX)=? MOV AX,1234H MOV BX,5678H ADD AX,BXl执行:执行: 1234HAX 5678HBX (AX)+(BX)AXl执行后:执行后:(AX)=68ACH,

16、(BX)=5678Hl图形表示:图形表示:6. 寄存器间接寻址寄存器间接寻址 有效地址在寄存器中,有效地址在寄存器中, 操作数在存储器中,执行阶段操作数在存储器中,执行阶段访存访存操作数操作数主存主存OPRi寻址特征寻址特征 便于编制循环程序便于编制循环程序地址地址R0RiRn寄存器寄存器 EA = ( Ri )有效地址在寄存器中有效地址在寄存器中l寄存器间接寻址方式中,寄存器R的内容为操作数的偏移地址操作数的偏移地址EAEA,操作数在存储器存储器中,即: EAEA = = BX / BP / DI / SIBX / BP / DI / SI PA=DS*16+BX/SI/DI PA=SS*1

17、6+BPl不可越段的情况不可越段的情况程序以指针IP寻址,系统规定用代码段寄存器CS与与IP计算指令地址以堆栈指针SP寻址PA,用SS对于串操作串操作,ES用来作为目的操作数的段寄存器 寄存器和存储器内容分别为:(AX)=0,(BP)=0030H,(SS)=2000H,(20030H)=1234Hl执行指令:执行指令:MOV AX MOV AX ,BP BP l执行后:(执行后:(AXAX)=?=?,(,(BPBP)=?=?, (SSSS)=?=?,(,(20030H20030H)=?=?解:解: 图形表示: 假设有指令:MOV BX, DI,(DS)=1000H,(DI)=2345H,存储单

18、元12345H的内容是4354H。问执行指令后,BX的值是什么?寄存器间接寻址示例寄存器间接寻址示例假设有指令:MOV BX, SI,(DS)=1000H,(DI)=2345H,(SS)=2000H, (SI)=2348H存储单元12345H的内容是4354H 12348H 4356H。问执行指令后,BX的值是什么?寄存器间接寻址示例寄存器间接寻址示例l 解:解: 该操作数的物理地址应由DS和DI的值形成,即: PA=(DS)*16+(DI)=1000H*16+2345H=12345H 寄存器间接寻址示例寄存器间接寻址示例l寻址特点寻址特点 操作数的偏移地址EA为寄存器的内容加寄存器的内容加位

19、移量位移量,操作数在存储器中 l汇编格式汇编格式 XR(X X表示位移量,是表示位移量,是8 8位或位或1616位二进位二进制补码表示的有符号数)制补码表示的有符号数)l 功能功能 操作数存放在存储器,寄存器R的内容加位移量X为操作数的偏移地址EA PA=DS*16+BX/SI/DI+X PA=SS*16+BP+Xl设执行前: (AX)=0040H,(BX)=0030H,(DS)=2000H,(20036H)=0050H l执行指令:ADD 6BX,AXl执行后:(执行后:(AX)=?,(,(BX)=?, (DS)=?,(,(20036H)=? 执行:执行:(20036H)+(AX) 2003

20、6H 执行后:执行后:(AX)=0040H, (BX)=0030H, (DS)=2000H, (20036H)=0090H 假设指令: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。 该指令的执行效果是

21、:把从物理地址为12445H开始的一个字的值传送给BX。7. 基址寻址基址寻址(1) 采用采用专用寄存器专用寄存器作基址寄存器作基址寄存器EA = ( BR ) + ABR 为基址寄存器为基址寄存器OPA操作数操作数主存主存寻址特征寻址特征ALUBR 可扩大可扩大寻址范围寻址范围 便于便于程序搬家程序搬家 BR 内容由内容由操作系统操作系统或管理程序确定或管理程序确定 在程序的执行过程中在程序的执行过程中 BR 内容不变,内容不变,形式地址形式地址 A 可变可变为程序为程序/数据分配存储空间数据分配存储空间(2) 采用采用通用寄存器通用寄存器作基址寄存器作基址寄存器操作数操作数主存主存寻址特征

22、寻址特征ALUOPR0AR0 作基址寄存器作基址寄存器 由用户由用户指定指定哪个通用寄存器作为基址寄存器哪个通用寄存器作为基址寄存器通用寄存器通用寄存器R0Rn-1R1 基址寄存器的内容由基址寄存器的内容由操作系统操作系统确定确定 在程序的执行过程中在程序的执行过程中 R0 内容不变,形式地址内容不变,形式地址 A 可变可变8. 变址寻址变址寻址OPA操作数操作数主存主存寻址特征寻址特征ALUIX 可扩大可扩大寻址范围寻址范围 可与其他基址寻址合用可与其他基址寻址合用 EA=A+(IX)+(BR) IX 的内容由的内容由用户用户给定给定 在程序的执行过程中在程序的执行过程中 IX 内容可变,形

23、式地址内容可变,形式地址 A 不变不变通用寄存器也可以作为变址寄存器通用寄存器也可以作为变址寄存器EA = ( IX ) +AIX 为变址寄存器(专用)为变址寄存器(专用)处理数组问题处理数组问题例例 设数据块首地址为设数据块首地址为 D,求求 N 个数的平均值个数的平均值直接寻址直接寻址变址寻址变址寻址LDA DADD D + 1ADD D + 2ADD D + ( N -1 )DIV # NSTA ANSLDA # 0LDX # 0INXCPX # NBNE MDIV # NSTA ANS共共 N + 2 条指令条指令共共 8 条指令条指令ADD X, DMX 为变址寄存器为变址寄存器D

24、为形式地址为形式地址(X) 和和 #N 比较比较(X) +1 X结果不为零则转结果不为零则转l特点特点操作数的偏移地址EA是指令中基址寄存器基址寄存器内容加上变址寄存器变址寄存器内容之和操作数在存储器中 l格式:格式: BR + IR PA=DS*16+BX+/SI/DI PA=SS*16+BP+SI/DI假设指令:MOV BX, BX+SI, (DS)=1000H,(BX)=2100H,(SI)=0011H,内存单元12111H的内容为1234H。问指令执行后,BX的值是什么?基址变址基址变址寻址示例寻址示例解:解: 根据基址加变址寻址方式的规则,在本指令的源操作数的有效地址EA为:EA=(

25、BX)+(SI)=2100H+0011H=2111H 该操作数的物理地址应由DS和EA的值形成,即:PA=(DS)*16+EA=1000H*16+2111H=12111H 该指令的执行效果是:把从物理地址为12111H开始的一个字的值传送给BX。基址变址基址变址寻址示例寻址示例9. 相对寻址相对寻址 EA = ( PC ) + A A 是相对于当前指令的位移量(可正可负,补码)是相对于当前指令的位移量(可正可负,补码) A 的位数决定操作数的的位数决定操作数的寻址范围寻址范围 广泛用于广泛用于转移指令转移指令操作数操作数寻址特征寻址特征ALUOPA相对距离相对距离 A1000PC 主存主存10

26、00AOP (1) 相对寻址举例相对寻址举例 3*LDA # 0LDX # 0ADD X, DINXCPX # NBNE MDIV # NSTA ANSMM+1M+2M+3相对寻址特征相对寻址特征* M 随程序所在存储空间的位置不同而不同 指令 BNE *-3与 指令 ADD X, D 相对位移量不变 指令 BNE*-3 操作数的有效地址为 EA = ( M+3 ) 3 = M(2) 按字节寻址的相对寻址举例按字节寻址的相对寻址举例OP位移量位移量2000 H2008 H8JMP * + 8OP06 H2000 H2008 H8设设 当前指令地址当前指令地址 PC = 2000H转移后的目的地

27、址为转移后的目的地址为 2008H因为因为 取出取出 JMP * + 8 后后 PC = 2002H二字节指令二字节指令故故 JMP * + 8 指令指令 的第二字节为的第二字节为 2008H - 2002H = 06Hl特点特点操作数的偏移地址EA是指令中基址寄存器基址寄存器内容、变址寄存器内容、位移量内容、变址寄存器内容、位移量三项和操作数在存储器中 l汇编格式:汇编格式:XBR+IR PA=DS*16+BX+SI/DI+X PA=SS*16+BP+SI/DI+X假设指令:MOV AX, BX+SI+200H,(DS)=1000H,(BX)= 2100H,(SI)=0010H,内存单元12

28、310H的内容为1234H。问指令执行后,AX的值是什么? 相对基址变址寻址示例相对基址变址寻址示例解:解: 根据相对基址加变址寻址方式的规则,本指令中源操作数的有效地址EA为:EA=(BX)+(SI)+200H=2100H+0010H+200H=2310H 该操作数的物理地址应由DS和EA的值形成,即:PA=(DS)*16+EA=1000H*16+2310H=12310H 该指令的执行效果是:把从物理地址为12310H开始的一个字的值传送给AX。 相对基址变址寻址示例相对基址变址寻址示例l 相对基址加变址寻址方式有多种等价多种等价的书写方式,书写格式: BX+SI+1000H 1000HBX

29、+SI 1000HBXSI 1000HSIBX 等格式都是正确的,并且其寻址含义也一致, 但格式:BX1000H+SI、SI1000H+BX 等是错误的,即所用寄存器不能在” ”之外 该限制对寄存器相对寻址方式的书写同样起作用。相对基址加变址寻址方式与其它寻址方式之间的变形关系源操作数指令的变形源操作数的寻址方式只有一个偏移量MOV AX, 100H直接寻址方式只有一个寄存器MOV AX, BX 或MOV AX, SI寄存器间接寻址方式有一个寄存器和偏移量MOV AX, BX+100H 或MOV AX, SI+100H寄存器相对寻址方式有二个寄存器MOV AX, BX+SI基址加变址寻址方式有

30、二个寄存器和常数项MOV AX, BX+SI+100H相对基址加变址寻址方式10. 堆栈寻址堆栈寻址 堆栈堆栈硬堆栈硬堆栈软堆栈软堆栈多个寄存器多个寄存器指定的存储空间指定的存储空间 先进后出先进后出(一个入出口)(一个入出口)栈顶地址栈顶地址 由由 SP 指出指出 11FFFH +12000 H 进栈进栈 (SP) 1 SP 出栈出栈 (SP)+ 1 SP栈顶栈顶栈底栈底2000 HSP2000 H1FFF HSP1FFFH栈顶栈顶栈底栈底进栈进栈出栈出栈 1FFF H栈顶栈顶 2000 H栈顶栈顶(2) 堆栈寻址举例堆栈寻址举例15200HACCSPX栈顶栈顶200H栈底栈底主存主存151

31、FFHACCSP15栈顶栈顶200H栈底栈底主存主存X1FFH PUSH A 前前 PUSH A 后后 POP A 前前 POP A 后后Y1FFHACCSPX栈顶栈顶200H栈底栈底主存主存151FFH15200HACCSP栈顶栈顶200H栈底栈底主存主存X15(3) SP 的修改与主存编址方法有关的修改与主存编址方法有关 按按 字字 编址编址进栈进栈出栈出栈(SP) 1 SP(SP)+ 1 SP 按按 字节字节 编址编址存储字长存储字长 16 位位进栈进栈出栈出栈(SP) 2 SP(SP)+ 2 SP存储字长存储字长 32 位位进栈进栈出栈出栈(SP) 4 SP(SP)+ 4 SPl若BX

32、=0158H, DI=10A5H, 位移量DISP=1B57H, 数据段寄存器DS=2100H,l则按照直接寻址、寄存器寻址、寄存器间接寻址(假定用假定用BX)、寄存器相对寻址(假定用假定用BX)、基址变址寻址(假定用假定用BX、DI)、相对基址变址寻址(假定用假定用BX、DI)得到的偏移地址和物理地址是多少?l直接寻址直接寻址 EA=DISP=1B57H, PA=DS*24+EA=21000H+1B57H=22B57Hl寄存器寻址:寄存器寻址:无EAl寄存器间接寻址寄存器间接寻址 EA=BX=0158H PA=DS*24+EA=21000H+0158H=21158Hl 寄存器相对寻址寄存器相

33、对寻址 EA=BX+DISP=0158H+1B57H=1CAFH PA=21000H+1CAFH=22CAFHl基址变址寻址基址变址寻址 EA=0158H+10A5H=11FDH PA=21000H+11FDH=221FDHl相对基址变址寻址相对基址变址寻址 EA=0158H+10A5H+1B57H=2D54H PA=21000H+2D54H=23D54Hl 用16位寄存器来访问存储单元时,只能使用基地址和变址寄存器来作为地址偏移量的一部分 但在用32位寄存器寻址时,不存在上述限制, 所有32位寄存器位寄存器(EAX、EBX、ECX、EDX、ESI、EDI、EBP和ESP)都可以是地址偏移量地

34、址偏移量的一个组成部分。 l 当用32位地址偏移量进行寻址时,内存地址的偏移量可分为三部分: 一个一个32位基址寄存器位基址寄存器 一个可乘一个可乘1、2、4或或8的的32位变址寄存器位变址寄存器 一个一个8位位/32位的偏移常量位的偏移常量l 并且这三部分还可进行任意组合,省去其中之一或之二。 l基址寄存器基址寄存器 EAX、EBX、ECX、EDX ESI、EDI、EBP和ESP l变址寄存器变址寄存器 EAX、EBX、ECX、EDX ESI、EDI和EBP (除ESP之外) l用32位地址偏移量进行寻址的有效地址计算公式归纳如下: lMOV AX, 123456HlMOV EAX, EBX

35、lMOV EBX, ECX*2lMOV EBX, EAX+100HlMOV EDX, EAX*4+200HlMOV EBX, EAX+EDX*2lMOV EBX, EAX+EDX*2+300HlMOV AX, ESP 由于32位寻址方式能使用所有的通用寄存器, 和该有效地址相组合的段寄存器也就有新的规定。1、地址中寄存器的书写顺序决定该寄存器是基址寄存器,还是变址寄存器;如:EBX+EBP中的EBX是基址寄存器,EBP是变址寄存器, 而EBP+EBX中的EBP是基址寄存器,EBX是变址寄存器;2、默认段寄存器的选用取决于基址寄存器基址寄存器;3、基址寄存器是EBP或ESP时,默认段寄存器是SS

36、, 否则,默认段寄存器是DS;4、在指令中,如果使用段前缀的方式,则显式段寄存器优先。列举几个32位地址寻址指令及其内存操作数的段寄存器。MOV AX, 123456H;默认段寄存器DSMOV EAX, EBX+EBP;默认段寄存器DSMOV EBX, EBP+EBX;默认段寄存器SSMOV EBX, EAX+100H;默认段寄存器DSMOV EDX, ES:EAX*4+200H;显式段寄存器ESMOV ESP+EDX*2, AX;默认段寄存器SSMOV EBX, GS:EAX+EDX*2+300H;显式段寄存器GSMOV AX, ESP;默认段寄存器SSl多种寻址方式能方便、灵活的存取操作数

37、, 支持高级语言的某些数据结构 1. 简单变量寻址2. 数组或表格数据的寻址3. 记录型数组的寻址 存取简单变量有时使用直接寻址方式,如果变量有基本地址, 就将基本地址-BX / SI / DI, 则存取某个变量 EA = BX / SI / DI 表格数据的存取也可当作是数组的存取,均可用寄存器、寄存器相对、基址变址喝相对基址变址等寻址方式。l(1)存取基本数组:数组的基本地址-BX,某个元素到数组基本地址的距离-SI / DI, 则: EA = BX + SI / DI 或者位移量DISP=数组开始地址, BX / SI / DI =数组元素到数组开始地址的距离,则: EA = BX +

38、BX / SI / DI + DISPl(2)对于赋值语句A(i) = B (j)应指出两个变址寄存器。如对应元素ai可使用DI; 对应元素bj用SI, 则两组元素的地址分别为: EA = SI + DISP EA = DI + DISP l(3)存取二维数组A(i, j): 数组起始地址-BX, BX兼行元素相对数组起始地址变址,而列元素又相对行元素的变址量-SI / DI, 则存取某个元素应有: EA = BX + SI / BX + DIl若DISP = 数组元素的起始地址, BX = 行元素变址量, SI 或 DI = 列元素相对行元素的变址,则存取某个元素应有: EA = BX +

39、SI / DI + DISPl数组和记录结合使用。 设雇员的记录有四个数据项(雇员、保险号、雇龄和工资),由多个雇员的记录组成一个数组,则任一雇员记录项地址的形式描述为 F=f(M, I, J) 其中,F为数组记录项的地址,M为数组的基本地址, I为数组的元素(记录), J为元素的数据项, f则表示记录型数组。 对此,存取任一记录中的数据项(如雇龄项)的操作数寻址对应描述为: 偏移地址 = f(基址,变址,位移)l假定基址指针再BX,与数组元素相一致的变址值在SI,记录中项的位置用DISP表示,则 EA = BX + SI + DISP。l4.堆栈数据结构寻址l堆栈采用以BP为基址指针的寻址,

40、方便数据结构相同而参数不同的数据存取。当存取堆栈中的简单变量时 EA = BP + DISP 若存取堆栈中的数据和记录,则 EA = BP +SI / DI + DISPl寻址方式对多数指令而言,是要计算出操作数的地址,但是也由少数指令是为了形成程序转移的地址(如无条件转移指令JMP、调用指令CALL等)。l程序正常顺序执行时,每取出一条指令执行IP+n-IP,其中n为取出指令的字节数;然后形成下一条指令的地址: PA = CS * 24 + IPl但是如果程序发生转移时,需要计算出转移偏移地址EA并修改IP,有时还需要修改CS的值。这种情况操作的对象是一个地址,地址的内容是要取出的指令,而不

41、是上述讲到的操作数,因此称之为程序转移寻址。l段内转移是指程序在同一段代码内,仅改变IP的值而不改变CS的值所发生的转移。l而段间转移是程序要从一个代码段转移到另一个代码段,则不仅改变IP的值,同时也要改变CS的值。l无论是段内还是段间发生的转移都有直接和间接的形式,因此程序转移有四种寻址。l段内直接转移和间接转移寻址如下图:l1.段内直接寻址(Intrasegment Direct Addressing) 转移偏移地址EA是指令中8位或16位位移量(DISP8,16)与指令指针IP当前内容之和。即: EA = IP + DISP8,16 - IPl2.段内间接寻址(Intrasegment

42、Indirect Addressing) 转移偏移地址 EA 如果指定的是16位的寄存器,则将寄存器的内容-IP。 如果指定的是存储器中的一个字,则将该存储单元的内容-IP。 (EA) - IPl程序段间的直接或间接转移如下图:l1.段间直接寻址(Intersegment Direct Addressing)l 转移偏移地址EA-IPl 转移段地址-CSl2.段间间接寻址(Intersegment Indirect Addressing)l(EA)-IPl(EA+2)-CSl 实地址方式32位指令寻址,指在32位的PC机上使用16位的存储机制,执行32位的非保护方式及非虚拟方式的指令,达到直接

43、存取32位寄存器和32位存储器操作数的目的。l几个概念l位域:一个相邻的位系列,在该序列中每一个作为一个独立的单位处理,一个位域可以从任何字节的任何位置开始。l位串:相邻位的序列,可以从任何字节的任何位置开始。l串:字节、字、双字的序列。l实方式的近程指针:16位的段内偏移值。l偏移地址EAl EA=基址变址 比例因子位移量l基址寄存器可以是任意一个32位通用寄存器。l变址寄存器是指除了堆栈指针ESP以外的7个通用寄存器。l比例因子是1、2、4、8可以分别用于字节、字、双字、四字的变址。l常数位移量可以指8位或32位。l如果使用ESPEBP为基址寄存器,则SS是默认的段寄存器,也可用CS、DS

44、、ES、FS、GS来替换SS;l使用EAX、EBX、ECX、EDX、ESI、EDI为基址寄存器,则DS是默认的段寄存器,同样也能用CS、SS、ES、FS、GS来越段替换DSlMOV AX ,DS:BP lMOV FS:EBP,ECX;DS、FS分别替换了缺省段SSl为了取得指令代码,只能用CS;PUSH、POP等指令与堆栈有关,也只能用SS。此外,在指令代码32位的程序堆栈操作时,要确保ESP/SP的内容(地址)总是为4的倍数。l例如:lPUSH 12345678H l;ESP/SP-4-ESP/SP,12345678-ESP/SP POP EAX ; (ESP/SP)-EAX, ESP/SP

45、+4- ESP/SPl 32位的指令寻址包括数据寻址和程序转移寻址。一般寻址的基本概念与16位汇编寻址概念相似,特殊的寻址方式如上叙述。现介绍如下:l(1)立即寻址l MOV EAX,19461201H; 19461201H-EAX 与16位寻址相似。 (2) 寄存器寻址lMOV EAX,ECX ;ECX-EAX 与16位寻址相似l(1)直接寻址lMOV EAX,4612H ;EA=4612,(EA)-EAX 与16位寻址相似。l(2)寄存器间接寻址lMOV ECX,EDX ;ECX间接指示存放操作数EA在EAX 中,EA=ECX,EDX-EA,与16位寻址相似。l(3)寄存器相对寻址lMOV

46、 ECX,EAX+24 ; EA=EAX,(EA)-ECXl(4)基址变址寻址lMOV EAX ,EBX ESI ; EA=EBX+ESI,(EA)-EAXl(5)相对基址变址寻址lSUB EAX,EBX+ESI+0FF0H ;EA=EBX+ESI+0FF0H,EAX-(EA)-EAX(6)带比例因子的变址lMOV ECX,ESI*4 ;EA=ESI4,(EA)-ECX(7)基址与带比例因子的变址寻址lMOV ECX,EAXEDX*8 ;EA=EAX+EDX8,(EA)-ECX(8)基址与带位移量及比例因子的变址寻址lMOV EAX,LTABEDI*4EBP+80 ;EA=LTAB+EDI4+

47、EBP+80,(EA)-EAXl有相对EIP的段内直接寻址,段内间接寻址、段间直接寻址和段间间接寻址。l32位机汇编指令或有32位操作数的情形识别涉及指令机器码格式的有关前缀表示。这些在相应的汇编列表文件(*.LST)或DEBUG过程中可以看到,如前缀代码67H或66H。l66|83 E0 0F AND EAX,0FH ;EAX0FH-EAX 66|8B CB MOV ECX,EAXl67|8B 1475 00000026 MOV DX,26HESI*2l67|66|8B 04B0 MOV EAX,EAX+ESI*4l指令系统是一台机器所有指令的集合。 Pentium系列机指令系统庞大、类型多

48、样,约有300多条指令,其中包括基本指令100多条。 具有支持多进程、多任务、虚拟存储器和多媒体等功能的32位指令。l1.数据传送类指令l2.算术运算类指令l3.逻辑和移位操作类指令l4.串操作与重复前缀类指令l5.控制转移类指令l6.处理机控制类指令l7.其它指令lOPD表示目的操作数; OPS表示源操作数; (OPS)表示OPS的内容; (OPD)表示OPD的内容; -表示传送; R表示通用寄存器; Sr表示段寄存器; M表示主存储器; lXXXX:XXXX 表示组合号, “:”表示其前后组成一个数; L表示操作数的长度; d表示立即数; B/W/D表示字节或字或双字。l通用数据传送指令l

49、堆栈操作指令l标志寄存器传送指令l地址传送指令l输入输出指令l1.传送指令MOVl2.数据交换指令XCHGl3.查表转换指令 XLAT语句格式:MOV OPD,OPSl功能:将源操作数传送入目的地址,源地址内容不变。即(OPS)OPD。l下图描述了MOV指令在传送数据时允许传送的路径及类型。l(1) OPD,OPS的类型(8/16/32位)必须一致.l(2) OPD不能使用立即数。l(3) 双操作数不能同时为内存中的数据。l(4) 段寄存器不能直接送立即数.l(5) 指令执行后不影响FLAGS的标志位的状态.l(6) 不能任意改变CSlMOV AX,BUF ;BUF是变量,源操作数为直接寻址l

50、MOV BH,DI ;源操作数为寄存器间接寻址lMOV DI,ES:3SI ;源操作数为变址寻址,使用跨段前缀lMOV BP,3BX+SI ;源操作数为基址加变址寻址lMOV BUFA,DL ;BUFA是一字节变量lMOV BP,AX ;使用SS段寄存器lMOV DS:BP,DL ;使用跨段前缀lMOV BUF,DS ;BUF是个字变量lMOV ES ,BUFl语句格式:XCHG OPD,OPSl功能:将源地址与目的地址中的内容互换。 即(OPD)OPS,(OPS)OPD。l寄存器与存储器之间数据交换。lMOVAX,5678H;(AX)=5678HlMOVBX,0FFFFH;(BX)=0FFF

51、FHlXCHG AX,BX ;(AX)=0FFFH, (BX)=5678Hl格式:MOVSX OPD, OPS MOVZX OPD, OPSl它们将OPS的内容-OPD,但是对于OPD左边空缺的位,MOVSX全部用OPS的符号填充(作符号延伸), 可以对有符号的数进行符号扩展;而MOVZX是全部以零(0)填充,可对无符号数进行0扩展. 注意:OPD的位数比OPS的位数长lMOV CL, 88H MOVZX AX, CL ;AX = 0088H MOVSX BX, CL ;BX = FF88Hl另外也可如下书写指令:lMOVSX CX, BL MOVSX EAX, BUFlMOVZX AX, C

52、L MOVSX EBX, ALlMOVZX ESI, BUF MOVZX EDX,DIl语句格式:XLAT OPS或XLATl功能:将(BX)为首址(AL)为位移量的字节存储单元中的数据送AL寄存器。即(BX+AL)AL。l1.进栈指令PUSHl2.出栈指令POPl3.PUSHA/PUSHAD指令l4.POPA/POPAD指令l语句格式: PUSH OPS ; W/D, R/Sr/M/dl功能:将寄存器、段寄存器、立即数或存储器中的一个字数据压入堆栈顶部,指令视操作数长度为字(2字节)或双字(4字节)和地址为16位/32位,先将SP/ESP - 2/4-SP/ESP,后将OPS-SP/ESP。

53、l语句格式: POP OPD ; W/D, R/Sr/M/dl功能: 视OPD长度为字或双字,先将当前SP/ESP指向的内容-OPD,后将SP/ESP+2/4-SP/ESP 。l从POP指令功能可看出,该指令为PUSH指令的逆过程,一般成对使用。l格式: PUSHA ; 压入8个字通用寄存器. PUSHAD ; 压入8个双字通用寄存器. l格式: POPA ;弹出到8个16位通用寄存器 POPAD ; 弹出到8个32位通用寄存器l1.标志送AH指令LAHFl2.AH送标志指令SAHFl3.标志寄存器进栈指令PUSHFl4.标志寄存器出栈指令POPFl语句格式:LAHFl功能:将标志寄存器的低8

54、位送入AH寄存器。即(FLAGS)7-0AH。该指令的执行对标志位无影响。l【例】标志寄存器传送。执行前:(FLAGS)=0485H,(AX)=0FFFFH执行指令:LAHF执行后 : AH =85Hl语句格式:SAHFl功能:将AH的内容送入标志寄存器的低8位,高8位不变。即(AH)FLAGS7-0。l从该指令功能可看出,SAHF为LAHF的逆过程。 l语句格式:lPUSHF 功能:将标志寄存器的内容压入堆栈。即(FLAGS)- 堆栈。 lPOPFl功能:将堆栈顶端的内容送到标志寄存器。即堆栈- (FLAGS )。l1传送偏移地址指令 LEAl2传送偏移地址及数据段首址指令LDSl3传送偏移

55、地址及附加数据段指令LESl语句格式: LEA OPD,OPS ;OPS的EA-OPD ;OPD是16/32位的R,OPS是Ml功能:主存按源地址的寻址方式计算偏移地址,将偏移地址送入指定寄存器。l【例】主存偏移地址的获取。MOV BX,0100H;(BX)=0100HMOV SI, 0210H;(SI) =0210HLEA BX,1234BX+SI ; (BX)=1544Hl语句格式:LDS/LES/LFS/LGS/LSS OPD,OPS ;EA = OPSl功能: 地址传送LDS等指令中,OPD为R(16位),OPS为M(32位).操作对FLAGS无影响,执行后结果为:(EA)-R ;全程

56、指针的偏移地址(EA+2)- LDS/LES/LFS/LGS/LSS ;全程指针的段地址l1输入指令INl2输出指令OUTl输入指令用来从指定的外设寄存器取信息送入累加器。它有四种形式:l(1)语句格式:INAL,PORT 功能:(PORT) ALl(2)语句格式:INAX,PORT 功能:(PORT) AXl(3)语句格式:INAL,DX 功能:(DX) ALl(4)语句格式:INAX,DX 功能:(DX) AXl输出指令用来把累加器的内容送往指定的外设存储器,它有四种形式:l(1)语句格式:OUT PORT,AL 功能:(AL)PORTl(2)语句格式:OUT PORT,AX 功能:(AX

57、)PORTl(3)语句格式:OUT DX,AL 功能:(AL)DXl(4)语句格式:OUT DX,AX 功能:(AX)DX逻辑运算指令l1求反指令NOTl2逻辑乘指令ANDl3测试指令TESTl4逻辑加指令ORl5按位加指令XORl语句格式:NOT OPDl功能:将目的地址中的内容逐位取反后送入目的地址。即(OPD)求反OPD 【例】逻辑非运算。MOV AX,878AH;(AX)=878AHNOT AX ;(AX)=7875Hl语句格式:AND OPD, OPSl功能:将目的操作数和源操作数进行逻辑乘运算,结果存目的地址。即(OPD)(OPS)OPD。该指令用于清除目的操作数中与源操作数置0的

58、对应位。说明:逻辑乘的运算法则为:11=1,10=0,01=0,00=0【例】将AL中第3位和第7位清零。MOV AL,0FFH AND AL,77H l语句格式:TEST OPD,OPS功能:源地址和目的地址的内容执行按位的逻辑乘运算,结果不送入目的地址。即(OPD)(OPS)。【例】测试AX中的第12位是否为0,不为0则转L。TEST AX,1000HJNE L l语句格式:OR OPD,OPS功能:将目的操作数和源操作数进行逻辑加运算,结果存目的地址。即(OPD)(OPS)OPD。说明:逻辑加的运算法则为:11=1,10=1,01=1,00=0。【例】将AL寄存器中第3位和第7位置1。M

59、OV AL,0 OR AL,88H l语句格式: XOR OPD,OPS功能:目的操作数与源操作数做按位加运算,结果送入目的地址。即(OPD)(OPS) OPD。说明:按位加的运算法则为;11=0,10=1,01=1,00=0。【例】按位加运算。MOV AL,45H;(AL)=45HXOR AL,31H;(AL)=74Hl移位指令包括算术移位指令、逻辑移位指令和循环移位指令,分别进行左移和右移操作。这些指令均有统一的语句格式:SAL/SHL OPD, OPS ;左移SAR OPD, OPS ;算术右移 SHR OPD, OPS ;逻辑右移其中,OPD是8/16/32位的R/M;OPS是计数值(

60、即移位次数),有三种情形:OPS即可是8位的立即数或CL的内容(移位前次数-CL)。其功能为将目的操作数的所有位按操作符规定的方式移动1位或按寄存器CL规定的次数(0255)移动,结果送入目的地址。目的操作数是8位(或16位)的寄存器数据或存储器数据。语句格式:SAL OPD,1 或SHL OPD,1 SAL OPD,CL或SHL OPD,CL功能:将(OPD)向左移动CL指定的次数,最低位补入相应的,的内容为最后移入位的值。语句格式:SAR OPD,1或SAR OPD,CLlCF功能:将(OPD)向右移动CL指定的次数且最高位保持不变;CF的内容为最后移入位的值。MOV BH,0F4H ;(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论