x86 汇编指令集

一、汇编标志位:

CF: 进位标志
	进位标志CF主要用来反映运算是否产生进位或借位。如果运算结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0。
	使用该标志位的情况有:多字(字节)数的加减运算,无符号数的大小比较运算,移位操作,字(字节)之间移位,专门改变CF值的指令等。
PF: 奇偶标志
	奇偶标志PF用于反映运算结果中“1”的个数的奇偶性。如果“1”的个数为偶数,则PF的值为1,否则其值为0。
	利用PF可进行奇偶校验检查,或产生奇偶校验位。在数据传送过程中,为了提供传送的可靠性,如果采用奇偶校验的方法,就可使用该标志位。
AF: 辅助进位标志
	在发生下列情况时,辅助进位标志AF的值被置为1,否则其值为0:
	(1)、在字操作时,发生低字节向高字节进位或借位时;
	(2)、在字节操作时,发生低4位向高4位进位或借位时。
ZF: 零标志
	零标志ZF用来反映运算结果是否为0。如果运算结果为0,则其值为1,否则其值为0。在判断运算结果是否为0时,可使用此标志位。
SF: 符号标志
	符号标志SF用来反映运算结果的符号位,它与运算结果的最高位相同。在微机系统中,有符号数采用补码表示法,所以,SF也就反映运算结果的正负号。运算结果为正数时,SF的值为0,否则其值为1。
OF: 溢出标志
	溢出标志OF用于反映有符号数加减运算所得结果是否溢出。如果运算结果超过当前运算位数所能表示的范围,则称为溢出,OF的值被置为1,否则,OF的值被清为0。
TF: 追踪标志
	当追踪标志TF被置为1时,CPU进入单步执行方式,即每执行一条指令,产生一个单步中断请求。这种方式主要用于程序的调试。
IF: 中断允许标志
	(1)、当IF=1时,CPU可以响应CPU外部的可屏蔽中断发出的中断请求;
	(2)、当IF=0时,CPU不响应CPU外部的可屏蔽中断发出的中断请求
DF: 方向标志
	方向标志DF用来决定在串操作指令执行时有关指针寄存器发生调整的方向。

二、常见寄存器

寄存器		16位		32位		64位
累加寄存器	AX		EAX		RAX
基址寄存器	BX		EBX		RBX
计数寄存器	CX		ECX		RCX
数据寄存器	DX		EDX		RDX
堆栈基指针	BP		EBP		RBP
变址寄存器	SI		ESI		RSI
堆栈顶指针	SP		ESP		RSP
指令寄存器	IP		EIP		RIP

三、汇编指令集

(1) 数据传送指令。

1. 通用数据传输指令:MOV
		格式:MOV DEST,SRC  
		功能:把一个字节,字或双字从源操作数SRC传送至目的操作数DEST。

2. 扩展传送指令: MOV SX, MOV ZX
		格式:MOV SX DEST,SRC
		          MOV ZX DEST,SRC
		功能:将源操作数由8位扩展到16位送目的操作数,或由16位扩展到32位送目的操作数。
		          MOV SX是按有符号数扩展
		          MOV ZX是按无符号数扩展。无符号数或正数高位扩展为0,负数高位扩展为全“1”。
		例:    MOV BL,80H  ; -128
	  	          MOV SX AX,BL  ; 将80H扩展为FF80H后送AX中。
		          MOV BL,80H  ; 128
	  	          MOV ZX AX,BL  ; 将80H扩展为0080H后送AX中

3. 交换指令:XCHG BSWAP 
		格式:XCHG OPR1,OPR2
		          BSWAP REG
		功能:XCHG :交换操作数OPR1和OPR2的值,操作数数据类型为字节、字或双字。
		         BSWAP :将32位通用寄存器中,第1个字节和第4个字节交换,第2个字节和第3个字节交换。

4. 压栈指令:PUSH PUSHA PUSHAD
		格式:PUSH SRC
		功能:将源操作数压下堆栈,源操作数允许为16位或32位通用寄存器、存储器和立即数以及16位段寄存器。当操作数数据类型为字类型,压栈操作使SP值减2;当数据类型为双字类型,压栈操作使SP值减4。
		          PUSHA将16位通用寄存器压入堆栈,压栈顺序为AX,CX,DX,BX,SP,BP,SI,DI。
		          PUSHAD将32位通用寄存器压入堆栈,压栈顺序为EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI。

5. 出栈指令:POP POPA POPAD
		格式:POP DEST
		功能:从栈顶弹出操作数送入目的操作数。
		         POPA从堆栈移出16字节数据,
		         POPAD从堆栈移出32字节数据
6. 地址传送指令:LEA 
		格式:LEA REG,MEM
		功能:将源操作数的有效地址传送到通用寄存器,

7. 查表指令:XLAT

8. 符合扩展指令 CBW CWD CWDE CDQ
		格式:CBW :将AL中8位带符号数,进行带符号扩展为16位,送AX中。
		          CWD :将AX中16位带符号数,进行带符号扩展为32位
		          CWDE:将AX中16位带符号数,进行带符号扩展为32位,送EAX中。
		          CDQ:将EAX中32位带符号数,进行带符号扩展为64位,送EDX和EAX中。低32位送EAX中,高32位送EDX中。

(2) 算术运算指令。

1. 加法指令:ADD
		交互相加指令:XADD
		格式:ADD DEST,SRC
		         XADD DEST,REG
		功能:ADD是将源操作数与目的操作数相加,结果传送到目的操作数。

2. 减法指令:SUB 
		格式:SUB DEST,SRC
		功能:SUB将目的操作数减源操作数,结果送目的操作数。

3. 自增自减指令:INC DEC
		格式:INC DEST 
		          DEC DEST
		功能:INC指令将目的操作数加1,结果送目的操作数。
		         DEC指令将目的操作数减1,结果送目的操作数。

4. 比较指令:CMP 
		格式:CMP DEST,SRC
		功能:目的操作数减源操作数,结果不回送。
		结果:两个正数比较,使用SF标志位判断。
	    		SF=0,则AX>BX,若ZF=1,则AX=BX
	    		SF=1,则AX<BX
		          两个无符号数比较,使用CF标志位判断。
	    		CF=0,则AX>BX,若ZF=1,则AX=BX
	    		CF=1,则AX<BX
		          两个负数比较,使用SF标志位判断。
	    		SF=0,则AX>BX,若ZF=1,则AX=BX
	    		SF=1,则AX<BX
		          两个异符号数比较。
	    		如果OF=0,仍可用SF标志判断大小。
	    		如果OF=1,说明结果的符号位发生错误,所以
	         	SF=0,则AX<BX
	         	SF=1,则AX>BX

5. 求补指令:NEG 
		格式:NEG DEST
		功能:对目的操作数求补,用零减去目的操作数,结果送目的操作数。

6. 乘法指令:MUL  IMUL
		格式:MUL SRC
		         IMUL SRC
		功能:MUL为无符号数乘法指令,IMUL为带符号数乘法指令。目的操作数缺省存放在ACC(AL,AX,EAX)中,乘积存AX,DX:AX,EDX:EAX中。
		格式:IMUL DEST,SRC
		功能:将目的操作数乘以源操作数,结果送目的操作数。
		格式:IMUL DEST,SRC1,SRC2
		功能:将源操作数SRC1与源操作数SRC2相乘,结果送目的操作数。

 7. 除法指令:DIV  IDIV 
		格式:DIV SRC
	              IDIV SRC
		功能:DIV为无符号数除法,IDIV为带符号数除法。被除数缺省在目的操作数AX,DX:AX,EDX:EAX中。

8. BCD算术运算 DAA  DAS
		格式:DAA
		功能:将存放在AL中的二进制和数,调整为压缩格式的BCD码表示形式。
		格式:DAS
		功能:将存放在AL中的二进制差数,调整为压缩的BCD码表示形式。
		例:  	SUB AL,BL
	  		DAS

9. ASCII算术运算
		AAA:将存放在AL中的二进制和数,调整为ASCII码表示的结果。
		AAS:将存放在AL中的二进制差数,调整为ASCII码表示形式
		AAM:将存放在AL中的二进制积数,调整为ASCII码表示形式。
		AAD:将AX中两位非压缩BCD码(一个字节存放一位BCD码),转换为二进制数的表示形式。

(3) 逻辑运算指令。

1. 逻辑与指令:AND 
		格式:AND DEST,SRC
		功能:目的操作数和源操作数按位进行逻辑与运算,结果存目的操作数中。

2. 逻辑或指令:OR 
		格式:OR DEST,SRC
		功能:目的操作数和源操作数按位进行逻辑或运算,结果存目的操作数中。

3. 逻辑异或指令:XOR 
		格式:XOR DEST,SRC
		功能:目的操作数和源操作数按位进行逻辑异或运算,结果送目的操作数。

4. 逻辑非指令:NOT 
		格式:NOT DEST
		功能:对目的操作数按位取反,结果回送目的操作数。目的操作数可以为通用寄存器或存储器。

5. 测试指令:TEST 
		格式:TEST DEST,SRC
		功能:目的操作数和源操作数按位进行逻辑与操作,结果不回送目的操作数。
		         TEST指令常用于测试操作数中某位是否为1,而且不会影响目的操作数。如果测试某位的状态,对某位进行逻辑与1的运算,其它位逻辑与0,然后判断标志位。运算结果为0,ZF=1,表示被测试位为0;否则ZF=0,表示被测试位为1。

6. 算术/逻辑左移指令:
		格式:SAL DEST,OPRD
	               SHL DEST,OPRD
		功能:按照操作数OPRD规定的移位位数,对目的操作数进行左移操作,最高位移入CF中。每移动一位,右边补一位0。

7.  算术右移指令:SAR 
		格式:SAR DEST,OPRD
		功能:按照操作数OPRD规定的移位次数,对目的操作数进行右移操作,最低位移至CF中,最高位(即符号位)保持不变。

 8. 逻辑右移指令:SHR 
		格式:SHR DEST,SRC
		         ROR DEST,OPRD
		功能:按照操作数OPRD规定的移位位数,对目的操作数进行右移操作,最低位移至CF中。每移动一位,左边补一位0。

9. 循环移位指令:ROL  ROR 
		格式:ROL DEST,OPRD
		功能:循环左移指令ROL,目的操作数左移,每移位一次,其最高位移入最低位
		         循环右移指令 ROR,	目的操作数右移,每移位一次,其最低位移入最高位,

10. 双精度移位指令
		格式:SHLD DEST,SRC,OPRD
		          SHRD DEST,SRC,OPRD
		功能:对于由目的操作数DEST和源操作数SRC构成的双精度数,按照操作数OPRD给出的移位位数,进行移位。SHLD是对目的操作数进行左移,SHRD是对目的操作数进行右移

(4) 串操作指令。
串操作允许程序对连续存放大的数据块进行操作。

1. 字符串传送指令 MOVSB MOVSW MOVSD
		格式:MOVS DESTS, SRCS
		功能:将规定的源串元素复制到规定的目的串单元中

2. 字符串比较指令 CMPSB,CMPSW,CMPSD
		格式:CMPS DESTS, SRCS
		功能:由规定的源串元素减去指出的目的串元素,结果不回送,仅影响标志位CF,AF,PF,OF,ZF,SF。

3. 字符串搜索指令 SCASB,SCASW
		格式:SCAS DESTS
		功能:由AL,AX或EAX的内容减去规定的目的串元素,结果不回送,仅影响标志位CF,AF,PF,SF,OF,ZF。

(5) 控制转移指令。
计算机执行程序一般是顺序地逐条执行指令。但经常须要根据不同条件做不同的处理,有时需要跳过几条指令,有时需要重复执行某段程序,或者转移到另一个程序段去执行。用于控制程序流程的指令包括转移、循环、过程调用和中断调用。

1. 无条件转移指令:JMP
		格式:JMP TARGET
		功能:使程序无条件地转移到指令规定的目的地址TARGET去执行指令。

2. 单标志位条件转移指令
		格式:JZ NEXT;
		功能:若标志ZF=1则转移到标号NEXT处执行。(结果为0(或相等)则转移)

3. 无符号数比较条件转移
		格式:JA NEXT;
		功能:无符号数A与B比较,若A>B则转移到标号NEXT处执行程序

4. 带符号数比较条件转移
		格式: JG NEXT;
		功能:若A>B则转移到标号NEXT。
		
5. JS(结果为负则转移)
    
6. JNS(结果为正则转移)

7. JP(奇偶位为1则转移)

8. JNP(奇偶位为0则转移)

9. 循环指令集
		格式: LOOP 地址
		功能: 循环指令集

10. CALL,RET
		格式:CALL 地址 RET RET n
		功能: 子程序调用,返回指令

(6) 处理器控制指令。

1. 空操作:NOP
		功能:空操作,除使IP/EIP增1外,不做任何工作。该指令不影响标志位。

2. 处理器等待指令:WAIT
		功能:检查BUSY引脚状态,等待协处理器完成当前工作。

3. 处理器暂停指令:HLT
		功能:暂停程序的执行。当产生一个外部中断或非屏蔽中断时,才继续执行下一条指令。

4. 中断指令:INT 
		格式:INT n
		功能:功能:产生中断类型码为n的软中断,该指令包含中断操作码和中断类型码两部分,中断类型码n为8位,取值范围为0~255(00H~FFH)。

(7) 保护方式指令。

  • 4
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值