欢迎来到天天文库
浏览记录
ID:12311348
大小:544.00 KB
页数:31页
时间:2018-07-16
《80x86汇编指令详解》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、80x86汇编指令详解(上)2008年01月15日星期二15:0580x86指令系统,指令按功能可分为以下七个部分。 (1)数据传送指令。 (2)算术运算指令。 (3)逻辑运算指令。 (4)串操作指令。 (5)控制转移指令。 (6)处理器控制指令。 (7)保护方式指令。 3.3.1数据传送指令 数据传送指令包括:通用数据传送指令、地址传送指令、标志寄存器传送指令、符号扩展指令、扩展传送指令等。 一、通用数据传送指令 1传送指令 传送指令是使用最频繁的指令,格式:MOVDEST,SRC 功能
2、:把一个字节,字或双字从源操作数SRC传送至目的操作数DEST。 传送指令允许的数据流方向见图311。图3.11 传送指令数据流 由上图可知,数据允许流动方向为:通用寄存器之间、通用寄存器和存储器之间、通用寄存器和段寄存器之间、段寄存器和存储器之间,另外还允许立即数传送至通用寄存器或存储器。但在上述传送过程中,段寄存器CS的值不能用传送指令改变。 例3.12CPU内部寄存器之间的数据传送。 MOVAL,DH ;AL←DH (8位) MOVDS,AX ;DS←AX (16位) MO
3、VEAX,ESI ;EAX←ESI (32位) 例3.13CPU内部寄存器和存储器之间的数据传送。 MOV[BX],AX ;间接寻址 (16位) MOVEAX,[EBX+ESI] ;基址变址寻址 (32位) MOVAL,BLOCK ;BLOCK为变量名,直接寻址(8位)例3.14立即数送通用寄存器、存储器。 MOVEAX,12345678H ;EAX←12345678H (32位) MOV[BX],12H ;间接寻址 (8位) MOV
4、AX,1234H;AX←1234H(16位) 使用该指令应注意以下问题: ·源和目的操作数不允许同时为存储器操作数; ·源和目的操作数数据类型必须一致; ·源和目的操作数不允许同时为段寄存器; ·目的操作数不允许为CS和立即数; ·当源操作数为立即数时,目的操作数不允许为段寄存器; ·传送操作不影响标志位。 2扩展传送指令 格式:MOVSX DEST,SRC MOVZX DEST,SRC 功能:将源操作数由8位扩展到16位送目的操作数,或由16位扩展到32位送目的操作数。其中MOVSX是
5、按有符号数扩展,MOVZX是按无符号数扩展。无符号数或正数高位扩展为0,负数高位扩展为全“1”。 例3.15带符号数扩展 MOVBL,80H ; -128 MOVSXAX,BL ; 将80H扩展为FF80H后送AX中。 例3.16无符号数扩展 MOVBL,80H ; 128 MOVZXAX,BL ; 将80H扩展为0080H后送AX中。 使用该指令应注意以下问题: ·目的操作数应为16位或32位通用寄存器; ·源操作数长度须小于目的操作数长度,为8位或16位通用寄存器或存储器操作数; ·
6、扩展传送操作不影响标志位。 3交换指令 (1)格式:XCHGOPR1,OPR2 功能:交换操作数OPR1和OPR2的值,操作数数据类型为字节、字或双字。允许通用寄存器之间,通用寄存器和存储器之间交换数据。 例3.17 XCHGAX,BX;通用寄存器之间交换数据(16位) XCHGESI,EDI;通用寄存器之间交换数据(32位) XCHGBX,[SI];通用寄存器和存储器之间交换数据(16位) XCHGAL,[BX];通用寄存器和存储器之间交换数据(8位) 使用该指令应注意以下问题: ·操
7、作数OPR1和OPR2不允许同为存储器操作数; ·操作数数据类型必须一致; ·交换指令不影响标志位。 如要实现存储器操作数交换,可用如下指令实现: MOVAL,BLOCK1 XCHGAL,BLOCK2 MOVBLOCK1,AL (2)格式:BSWAPREG 功能:将32位通用寄存器中,第1个字节和第4个字节交换,第2个字节和第3个字节交换。例3.18 MOVEAX,44332211H BSWAPEAX;EAX=1122
8、3344H 使用该指令应注意以下问题: ·操作数为32位通用寄存器; ·交换指令不影响标志位。 二、堆栈操作指令 1压栈指令 (1)格式:PUSHSRC 功能:将源操作数压下堆栈,源操作数允许为16位或32位通用寄存器、存储器和立即数以及16位段寄存器。当操作数数据类型为字类型,压栈操作使SP值减2;当数据类型为双字类型,压栈操作使SP值减4。
此文档下载收益归作者所有