ImageVerifierCode 换一换
格式:DOCX , 页数:61 ,大小:276.29KB ,
资源ID:9886021      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9886021.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(X86指令详解.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

X86指令详解.docx

1、X86指令详解X86指令详解80x86指令系统 80x86指令系统,指令按功能可分为以下七个部分。 (1) 数据传送指令。 (2) 算术运算指令。 (3) 逻辑运算指令。 (4) 串操作指令。 (5) 控制转移指令。 (6) 处理器控制指令。 (7) 保护方式指令。 3.3.1 数据传送指令包括:通用数据传送指令、地址传送指令、标志寄存器传送指令、符号扩展指令、扩展传送指令等。 一、通用数据传送指令 1传送指令 传送指令是使用最频繁的指令,格式:MOV DEST,SRC 功能:把一个字节,字或双字从源操作数SRC传送至目的操作数DEST。 传送指令允许的数据流方向见图3。 3.11 由上图可知

2、,数据允许流动方向为:通用寄存器之间、通用寄存器和存储器之间、通用寄存器和段寄存器之间、段寄存器和存储器之间,另外还允许立即数传送至通用寄存器或存储器。但在上述传送过程中,段寄存器CS的值不能用传送指令改变。 3.12CPU内部寄存器之间的数据传送。 MOV AL,DH ;AL?DH (8位) MOV DS,AX ;DS?AX (16位) MOV EAX,ESI ;EAX?ESI (32位) 3.13CPU内部寄存器和存储器之间的数据传送。 MOV BX,AX ;间接寻址 (16位) MOV EAX,EBX+ESI ;基址变址寻址 (32位) MOV AL,BLOCK ;BLOCK为变量名,直

3、接寻址(8位) 3.14立即数送通用寄存器、存储器。 MOV EAX,12345678H ;EAX?12345678H (32位) MOV BX,12H ;间接寻址 (8位) MOV AX,1234H;AX?1234H(16位) 使用该指令应注意以下问题: ?源和目的操作数不允许同时为存储器操作数; ?源和目的操作数数据类型必须一致; ?源和目的操作数不允许同时为段寄存器; ?目的操作数不允许为CS和立即数; ?当源操作数为立即数时,目的操作数不允许为段寄存器; ?传送操作不影响标志位。 2扩展传送指令 格式:MOV SX DEST,SRC MOV ZX DEST,SRC 功能:将源操作数由8

4、位扩展到16位送目的操作数,或由16位扩展到32位送目的操作数。其中MOVSX是按有符号数扩展,MOVZX是按无符号数扩展。无符号数或正数高位扩展为0,负数高位扩展为全“1”。 3.15带符号数扩展 MOV BL,80H ; -128 MOVSX AX,BL ; 将80H扩展为FF80H后送AX中。 3.16无符号数扩展 MOV BL,80H ; 128 MOVZX AX,BL ; 将80H扩展为0080H后送AX中。 使用该指令应注意以下问题: ?目的操作数应为16位或32位通用寄存器; ?源操作数长度须小于目的操作数长度,为8位或16位通用寄存器或存储器操作数; ?扩展传送操作不影响标志位

5、。 3交换指令 (1) 格式:XCHG OPR1,OPR2 功能:交换操作数OPR1和OPR2的值,操作数数据类型为字节、字或双字。允许通用寄存器之间,通用寄存器和存储器之间交换数据。 3.17 XCHG AX,BX;通用寄存器之间交换数据(16位) XCHG ESI,EDI;通用寄存器之间交换数据(32位) XCHG BX,SI;通用寄存器和存储器之间交换数据(16位) XCHG AL,BX;通用寄存器和存储器之间交换数据(8位) 使用该指令应注意以下问题: ?操作数OPR1和OPR2不允许同为存储器操作数; ?操作数数据类型必须一致; ?交换指令不影响标志位。 如要实现存储器操作数交换,可

6、用如下指令实现: MOV AL,BLOCK1 XCHG AL,BLOCK2 MOV BLOCK1,AL (2) 格式:BSWAP REG 功能:将32位通用寄存器中,第1个字节和第4个字节交换,第2个字节和第3个字节交换。 3.18 MOV EAX,44332211H BSWAP EAX;EAX=11223344H 使用该指令应注意以下问题: ?操作数为32位通用寄存器; ?交换指令不影响标志位。 二、堆栈操作指令 1压栈指令 (1) 格式:PUSH SRC 功能:将源操作数压下堆栈,源操作数允许为16位或32位通用寄存器、存储器和立即数以及16位段寄存器。当操作数数据类型为字类型,压栈操作使

7、SP值减2;当数据类型为双字类型,压栈操作使SP值减4。 3.19 PUSH AX ;通用寄存器操作数入栈(16位) PUSH EBX ;通用寄存器操作数入栈(32位) PUSH SI ;存储器操作数入栈(16位) PUSH DWORD PTR DI ;存储器操作数入栈(32位) PUSHW 0A123H ;立即数入栈(16位) PUSHD 20H ;立即数入栈(32位) (2) 格式:PUSHA PUSHAD 功能:PUSHA将16位通用寄存器压入堆栈,压栈顺序为AX,CX,DX,BX,SP,BP,SI,DI。 PUSHAD将32位通用寄存器压入堆栈,压栈顺序为EAX,ECX,EDX,EBX

8、,ESP,EBP,ESI,EDI。 2出栈指令 (1) 格式:POP DEST 功能:从栈顶弹出操作数送入目的操作数。目的操作数允许为16或32位通用寄存器、存储器和16位段寄存器。当操作数数据类型为字类型,出栈操作使SP加2;当操作数数据类型为双字类型,出栈操作使SP加4。 3.20 POP AX ;操作数出栈送寄存器(16位) POP ECX ;操作数出栈送寄存器(32位) POP BX ;操作数出栈送存储器(16位) POP DWORD PTR SI ;操作数出栈送存储器(32位) (2) 格式:POPA POPAD 功能:POPA从堆栈移出16字节数据,并且按顺序存入寄存器DI,SI,

9、BP,SP,BX,DX,CX,AX中。 POPAD从堆栈移出32字节数据,并且按顺序存入寄存器EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX中。 使用堆栈操作指令应注意以下问题。 (1) 目的操作数不允许为CS以及立即数。 (2) 堆栈操作指令不影响标志位。 三、地址传送指令 (1) 格式:LEA REG,MEM 功能:将源操作数的有效地址传送到通用寄存器,操作数REG为16位或32位通用寄存器,源操作数为16位或32位存储器操作数。 3.21 LEA BX,BLOCK;将BLOCK的有效地址传送到BX中(16位) LEA EAX,EBX;将EBX内容(有效地址)传送到EAX中

10、(32位) (2) 格式LDS(ES,FS,GS,SS)REG,MEM 功能:根据源操作数指定的偏移地址,在数据段中取出段地址和偏移地址分别送指定的段寄存器和指定的通用寄存器。 3.22 LES BX,SI ;将32位地址指针分别送ES和BX LSS EAX,EDI ;将48位地址指针分别送SS和EAX 3.23 DATA1 DD buff LDS BX,DATA1;将buff的32位地址指针分别送DS和BX 地址传送指令对标志位无影响。 四、标志寄存器传送指令 (1) 格式:LAHF SAHF 功能:LAHF将标志寄存器中低8位送AH中。SAHF将AH中内容送标志寄存器中低8位。 (2) 格

11、式:PUSHF POPF 功能:PUSHF将标志寄存器低16位内容压入堆栈,SP?SP-2。POPF将当前栈顶一个字传送到标志寄存器低16位中,SP?SP+2。 (3) 格式:PUSHFD POPFD 功能:PUSHFD将标志寄存器32位内容压入堆栈SP?SP-4。POPFD将当前栈顶一个双字传送到32位标志寄存器中,SP?SP+4。 上述SAHF,POPF,POPFD均影响相应的标志寄存器内容。 五、查表指令 格式:XLAT 功能:将寄存器AL中的内容转换成存储器表格中的对应值。实现直接查表功能。 XLAT指令规定:BX寄存器存放表的首地址,AL寄存器中存放表内偏移量,执行XLAT指令,以段

12、寄存器DS的内容为段基址,有效地址为BX和AL内容之和,取出表中一个字节内容送AL中。 3.24内存中有一起始地址为TABLE的编码表,试编程将表中顺序号为4的存储单元内容送寄存器AL。 ?MODEL SMALL ?DATA TABLE DB 11H,22H,33H,44H,55H 某编码表 ?CODE ?STARTUP MOV AL,4 ;AL?4 MOV BX,OFFSET TABLE ;BX?TABLE表首地址 XLAT ;结果在AL中,AL=55H ?EXIT END 查表指令不影响标志位。 六、符号扩展指令 (1) 格式:CBW 功能:将AL中8位带符号数,进行带符号扩展为16位,送

13、AX中。带符号扩展是指对正数高位扩展为全“0”,对负数高位扩展为全“1”。 3.25AL=55H 经CBW扩展后 AX=0055H AL=A5H 经CBW扩展后 AX=FFA5H (2) 格式:CWD 功能:将AX中16位带符号数,进行带符号扩展为32位,送DX和AX中。高16位送DX中,低16位送AX中。 (3) 格式:CWDE 功能:将AX中16位带符号数,进行带符号扩展为32位,送EAX中。 (4) 格式:CDQ 功能:将EAX中32位带符号数,进行带符号扩展为64位,送EDX和EAX中。低32位送EAX中,高32位送EDX中。 符号扩展指令对标志位无影响。 3.3.2 80x86指令包

14、括加、减、乘、除四种基本算术运算操作及十进制算术运算调整指令。二进制加、减法指令,带符号操作数采用补码表示时,无符号数和带符号数据运算可以使用相同的指令。二进制乘、除法指令分带符号数和无符号数运算指令。 一、加法指令 格式:ADDDEST,SRC ADCDEST,SRC 功能:ADD是将源操作数与目的操作数相加,结果传送到目的操作数。ADC是将源操作数与目的操作数以及CF(低位进位)值相加,结果传送到目的操作数。 源操作数可以是通用寄存器、存储器或立即数。目的操作数可以是通用寄存器或存储器操作数。 ADD,ADC指令影响标志位为OF,SF,ZF,AF,PF,CF。 3.26 MOV AX,98

15、76H ADD AH,AL;AX=0E76H CF=1 SF=0O F=0 ZF=0 AF=0 PF=0 ADC AH,AL;AX=8576H CF=0 SF=1O F=1 ZF=0 AF=1 PF=0 二、减法指令 格式:SUB DEST,SRC SBB DEST,SRC 功能:SUB将目的操作数减源操作数,结果送目的操作数。SBB将目的操作数减源操作数,还要减CF(低位借位)值,结果送目的操作数。 源操作数可以是通用寄存器、存储器或立即数。目的操作数可以是通用寄存器或存储器操作数。 SUB,SBB指令影响标志位为OF,SF,ZF,AF,PF,CF。 327 MOV AX, 9966H;AX

16、=9966H SUB AL, 80H;AL=E6HCF=1SF=1OF=1ZF=0AF=0PF=0 SBB AH, 80H;AH=18HCF=0SF=0OF=0ZF=0AF=0PF=1 三、加1减1指令 格式:INC DEST DEC DEST 功能:INC指令将目的操作数加1,结果送目的操作数。DEC指令将目的操作数减1,结果送目的操作数。目的操作数为通用寄存器或存储器操作数。 INC,DEC指令影响标志位为OF,SF,ZF,AF,PF。 328 INC BL;BL?BL+1 INC AX;AX?AX+1 INC WORDPTR BX;存储器操作数加1 DEC BYTE PTR SI;存储器

17、操作数减1 DEC EAX;EAX?EAX-1 四、比较指令 (1) 格式:CMP DEST,SRC 功能:目的操作数减源操作数,结果不回送。源操作数为通用寄存器、存储器和立即数。目的操作数为通用寄存器、存储器操作数。 CMP指令影响标志位为OF,SF,ZF,AF,PF,CF。 329 CMP CX,3 CMP WORD PTR SI,3 CMP AX,BLOCK 执行比较指令后,对状态标志位影响见表3.2。对于两个数的比较(AX-BX)有以下3种情况。 3.2CMP ? 两个正数比较,使用SF标志位判断。 SF=0,则AX?BX,若ZF=1,则AX=BX SF=1,则AXBX ? 两个无符号

18、数比较,使用CF标志位判断。 CF=0,则AX?BX,若ZF=1,则AX=BX CF=1,则AXBX ? 两个负数比较,使用SF标志位判断。 SF=0,则AX?BX,若ZF=1,则AX=BX SF=1,则AXBX ? 两个异符号数比较。 如果OF=0,仍可用SF标志判断大小。 如果OF=1,说明结果的符号位发生错误,所以 SF=0,则AXBX SF=1,则AXBX 综上所述:两个异号数比较 当OF=0,SF=0,则AXBX SF=1,则AXBX 当OF=1,SF=0,则AXBX SF=1,则AXBX 用逻辑表达式表示为: 若OF?-SF=0,则AXBX 若OF?-SF=1,则AXBX (2)

19、格式:CMPXCHGDEST,REG 功能:目的操作数减源操作数, 如果DEST=SRC,则SRC?DEST。 如果DEST?SRC,则DEST?ACC(AL,AX,EAX)。 源操作数允许为通用寄存器。目的操作数可以为通用寄存器,存储器操作数。 CMPXCHG影响标志位为OF,SF,ZF,AF,PF,CF。 (3) 格式:CMPXCHG8BMEM 功能:EDX:EAX中值减存储器操作数。 如果EDX:EAX=MEM64,则ECX:EBX?MEM64。 如果EDX:EAX?MEM64,则MEM64?EDX:EAX。 该指令为64位比较交换指令,影响ZF标志位。 330 CMPXCHG8BQWO

20、RDPTREBX 五、交换相加指令 格式:XADDDEST,REG 功能:目的操作数加源操作数,结果送目的操作数。原目的操作数内容送源操作数。源操作数允许为通用寄存器。目的操作数允许为通用寄存器、存储器操作数。 XADD指令影响标志位为OF,SF,ZF,AF,PF,CF。 六、求补指令 格式:NEGDEST 功能:对目的操作数求补,用零减去目的操作数,结果送目的操作数。目的操作数为通用寄存器、存储器操作数。 NEG指令影响标志位为OF,SF,ZF,AF,PF,CF。 七、乘法指令 (1) 格式:MULSRC IMULSRC 功能:MUL为无符号数乘法指令,IMUL为带符号数乘法指令。源操作数为

21、通用寄存器或存储器操作数。目的操作数缺省存放在ACC(AL,AX,EAX)中,乘积存AX,DX:AX,EDX:EAX中。 字节乘:AL?AX 字乘:AX?DX?AX 双字乘:EAX?EDX?EAX MUL,IMUL指令执行后,CF=OF=0,表示乘积高位无有效数据;CF=OF=1表示乘积高位含有效数据,对其它标志位无定义。 331 MUL BL;字节乘 MUL WORD PTR SI;字乘 IMUL BYTE PTR DI;字节乘 IMUL DWORD PTR ECX;双字乘 如果使用IMUL指令,积采用补码形式表示。 (2) 格式:IMULDEST,SRC 功能:将目的操作数乘以源操作数,结

22、果送目的操作数。目的操作数为16位或32位通用寄存器或存储器操作数。源操作数为16位或32位通用寄存器、存储器或立即数。 源操作数和目的操作数数据类型要求一致。乘积仅取和目的操作数相同的位数,高位部分将被舍去,并且CF=OF=1。其它标志位无定义。 (3) 格式:IMUL DEST,SRC1,SRC2 功能:将源操作数SRC1与源操作数SRC2相乘,结果送目的操作数。目的操作数DEST为16位或32位,允许为通用寄存器。源操作数SRC1为16位或32位通用寄存器或存储器操作数。源操作数SRC2允许为立即数。 332IMULEAX,EBX,12H 要求目的操作数和源操作数SRC1类型相同,当乘积

23、超出目的操作数部分,将被舍去,并且使CF=OF=1,在使用这类指令时,需在IMUL指令后加一条判断溢出的指令,溢出时转错误处理执行程序。 八、除法指令 格式:DIV SRC IDIV SRC 功能:DIV为无符号数除法,IDIV为带符号数除法。源操作数作为除数,为通用寄存器或存储器操作数。被除数缺省在目的操作数AX,DX:AX,EDX:EAX中。 字节除法:AX/SRC商?AL,余数?AH 字除法:DX?AX/SRC商?AX,余数?DX 双字除法:EDX?EAX/SRC商?EAX,余数?EDX 由于被除数必须是除数的双倍字长,一般应使用扩展指令进行高位扩展。当进行无符号数除法时,被除数高位按0

24、扩展为双倍除数字长。当进行有符号数除法时,被除数以补码表示。可使用扩展指令CBW,CWD,CWDE,CDQ进行高位扩展。例如: MOV AX,BLOCK CWD;被除数高位扩展 MOV BX,1000H IDIV BX 对于带符号除法,其商和余数均采用补码形式表示,余数与被除数同符号。当除数为零或商超过了规定数据类型所能表示的范围时,将会出现溢出现象,产生一个中断类型码为“0”的中断。执行除法指令后标志位无定义。 九、BCD算术运算 十进制数在机器中采用BCD码表示,以压缩格式存放,即一个字节存储2位BCD码,BCD加减法是在二进制加减运算的基础上,对其二进制结果进行调整,将结果调整成BCD码

25、表示形式。 (1) 格式:DAA 功能:将存放在AL中的二进制和数,调整为压缩格式的BCD码表示形式。 调整方法:若AL中低4位大于9或标志AF=1(表示低4位向高4位有进位),则 AL+6?AL,1?AF, 若AL中高4位大于9,或标志CF=1,(表示高4位有进位),则 AL+60H?AL,1?CF, DAA指令一般紧跟在ADD或ADC指令之后使用,影响标志位为SF,ZF,AF,PF,CF。OF无定义。 333 ADD AL,BL DAA (2) 格式:DAS 功能:将存放在AL中的二进制差数,调整为压缩的BCD码表示形式。 调整方法:若AL中低4位大于9或标志AF=1(表示低4位向高位借位

26、),则 AL-6?AL,1?AF 若AL中高4位大于9或标志CF=1(表示高4位向高位借位),则 AL-60H?AL,1?CF DAS指令一般紧跟在SUB或SBB指令之后使用,影响标志位为SF,ZF,AF,PF,CF。OF无定义。 334 SUB AL,BL DAS 十、ASCII算术运算 数字09的ASCII码为30H39H,机器采用一个字节存放一位ASCII码,对于ASCII码的算术运算是在二进制运算基础上进行调整。调整指令有加、减、乘、除四种调整指令。 (1) 格式:AAA 功能:将存放在AL中的二进制和数,调整为ASCII码表示的结果。 调整方法:若AL中低4位小于或等于9,仅AL中高

27、4位清0,AF?CF。若AL中低4位大于9或标志AF=1(进位),则AL+6?AL,AH+1?AH,1?AF,AF?CF,AL中高4位清0。 AAA指令一般紧跟在ADD或ADC指令之后使用,影响标志位为AF,CF。其它标志位无定义。 335 MOV AX,0036H ADD,AL,35H AAA;AX=0101H (2) 格式:AAS 功能:将存放在AL中的二进制差数,调整为ASCII码表示形式 调整方法:若AL中低4位小于等于9,仅AL中高4位清0,AF?CF。若AL中低4位大于9或标志AF=1,则AL-6?AL,AH-1?AH,1?AF,AF?CF,AL中高4位清0。 AAS指令一般紧跟在

28、SUB,SBB指令之后使用,影响标志位为AF,CF。其它标志位无定义。 336 MOV AX,0132H SUB AL,35H AAS;AX=0007H (3) 格式:AAM 功能:将存放在AL中的二进制积数,调整为ASCII码表示形式。 调整方法:AL/10商?AH,余数?AL AAM指令一般紧跟在MUL指令之后使用,影响标志位为SF,ZF,PF。其它标志位无定义。 337 MOV AL,07H MOV BL,09H MUL BL;AX=003FH AAM;AX=0603H (4) 格式:AAD 功能:将AX中两位非压缩BCD码(一个字节存放一位BCD码),转换为二进制数的表示形式。 调整方

29、法:AH?AL0?AH AAD指令用于二进制除法DIV操作之前,影响的标志位为SF,ZF,PF。其它标志位无定义。 338 MOV AX,0605H MOV BL,09H AAD;AX=0041H DIV BL;AX=0207H 使用该类指令应注意,加法、减法和乘法调整指令都是紧跟在算术运算指令之后,将二进制的运算结果调整为非压缩BCD码表示形式,而除法调整指令必须放在除法指令之前进行,以避免除法出现错误的结果。 使用算术运算类指令应注意: ?如果没有特别规定,参与运算的两个操作数数据类型必须一致,且只允许一个为存储器操作数; ?如果参与运算的操作数只有一个,且为存储器操作数,必须使用PTR伪

30、指令说明数据类型; ?操作数不允许为段寄存器。 ?目的操作数不允许为立即数; ?如果是存储器寻址,则存储器各种寻址方式均可使用。 333 一、逻辑指令 1逻辑与指令 格式:AND DEST,SRC 功能:目的操作数和源操作数按位进行逻辑与运算,结果存目的操作数中。源操作数可以是通用寄存器、存储器或立即数。目的操作数可以是通用寄存器或存储器操作数。 339 AND AL,BL AND EBX,ECX AND DI,1101H AND指令常用于将操作数中某位清0(称屏蔽),只须将要清0的位与0,其它不变的位与1即可。 340AND AL,0FH;将AL中高4位清0,低4位保持不变。 AND指令影响标志位为SF,ZF,PF,并且使OF=CF=0。 2逻辑或指令 格式:OR DEST,SRC 功能:目的操作数和源操作数按位进行逻辑或运算,结果存目的操作数中。源操作数可以是通用寄存器、存储器或立即数。目的操作数可

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

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