1、汇编语言程序设计 Ch. 3 指令系统 3.4 80486的基本指令集(一) 3.4 80486的基本指令集(二) 3.4.1 传送类指令 3.4.2 算术运算类指令 3.4.3 转移和调用类指令 3.4.4 逻辑运算和移位指令 3.4.5 串操作指令 3.4.6 处理机控制指令 3.2 80486寻址方式,第3章 指令系统,3.4 80486基本指令集,80486指令系统可以分为7类,它们是:数据传输类、算术运算类、逻辑运算类、串操作类、控制传输类、处理器控制类和系统类。我们仅介绍前6类。,在学习指令系统时,我们应当注意的基本信息为:指令的功能;操作数据的来源;操作的结果及对标志寄存器的影响
2、;下一条指令的地址。,3.4.0 部分指令 (1)MOV 传送数据 句 法: MOV dest,src 操 作: dest src 标志影响: 无 合法格式:,说明:reg: 通用寄存器之一 idata:立即数sreg:段寄存器之一 mem:存储器操作数dest:目 src: 源,为了理解存储器变量的使用,请仔细阅读以下例题。,【例】阅读以下程序,写出指令执行后的目标操作数。,设数据段: BNUM DB 12H,34H,56H,78H,90HWNUM DW 1122H,3344H,5566HDNUM DD 13572468H,87654321HFNUM DF 112233445566H,代码段
3、: MOV AL,BNUM ;AL=?,AL=12H,数据段经过汇编之后,并在操作系统的安排之下:,设数据段: BNUM DB 12H,34H,56H,78H,90HWNUM DW 1122H,3344H,5566HDNUM DD 13572468H,87654321HFNUM DF 112233445566H,BX=3344H,数据段经过汇编之后,并在操作系统的安排之下:,EDX=87654321H,CL=68H,BX=5634H,EAX=66334411H,DH=90H,数据段经过汇编之后,并在操作系统的安排之下:,代码段: MOV BX,OFFSET BNUM MOV AL, BX ;A
4、L=?,设数据段: ORG 2400hBNUM DB 12H,34H,56H,78H,90HWNUM DW 1122H,3344H,5566HDNUM DD 13572468H,87654321HFNUM DF 112233445566H,AL=12H,BX=2400H,代码段: MOV EBX, DNUM 3 ;EBX=?MOV BX, WORD PTR DNUM 3 ;BX=? MOV EBX, DWORD PTR BNUM 0 ;EBX=? MOV BX, WORD PTR FNUM ;BX=?MOV BX, 3 MOV BL,BNUM BX ;BL=?,设数据段: BNUM DB 12
5、H,34H,56H,78H,90HWNUM DW 1122H,3344H,5566HDNUM DD 13572468H,87654321HFNUM DF 112233445566H,练习,(3) ADC 带进位加句 法:ADC dest src操 作:dest src + dest + C标 志:O,S,Z,A,P,C 合法格式: 同ADD,例:实现下列多字节数运算(以232为模),0,F,0,3,1,F,C,H,A,解1:单字节加法(共需12条指令),0AH,0FH,13H CFH,13H CFH,0AH 0FH, 66+99=1011011=91 6699=+01011011=+91,结果
6、都是错的,被运算器丢失,保存 在进位标志寄存器中,被运算器丢失,保存 在进位标志寄存器中,66+99补=0 10100101,-66-99补=1 01011011,-66补= 10111110 -99补= 10011101,例2以28为模,补码运算, 求66+99, 6699,解:66补= 0100001099补= 01100011,回忆,如果参与运算的数是无符号数,则判进位标志,进位标志=1,表示溢出;,如果参与运算的数是有符号数,则判溢出标志, 溢出标志=1,表示溢出。,程序员如何判断溢出,回忆,(4)条件转移,. 按标志位的当前状态转移设转移地址标号为XYZ,例 设计程序判断 X+Y 是
7、否溢出?若溢出则显示“OVER!”;若正常则显示“GOOD!”,解:若 X、Y为无符号数,则程序如下:MOV AL,XMOV BL,YADD AL,BLJC CCCC显示“GOOD!”,结束 CCCC:显示“OVER!”,结束,解:若 X、Y为有符号数,则程序如下:MOV AL,XMOV BL,YADD AL,BLJO CCCC显示“GOOD!”,结束 CCCC:显示“OVER!”,结束,3.4.1 数据传输类指令 1 通用类 (1)MOV 传送数据 句 法: MOV dest,src 操 作: dest src 标志影响: 无 合法格式:,说明:reg: 通用寄存器之一 idata:立即数s
8、reg:段寄存器之一 mem:存储器操作数dest:目 src: 源,dest srcMOV reg , idataMOV mem , idataMOV reg , regMOV reg , memMOV mem , regMOV sreg , regMOV sreg , memMOV reg , sregMOV mem , sreg,(2)MOVSX 符号扩展的传送 句 法:MOVSX dest ,src操 作:dest(16,32) sign extend(8,16)(src)标志影响:无合法格式:dest srcMOVSX reg , regMOVSX reg , mem,(3)MOVZ
9、X 带有零扩展的传送 句 法: MOVZX dest ,src操 作:dest 0_extend(src)标志影响:无合法格式:dest,src 同(2),(5)Lseg 调用段寄存器句 法:Lseg dest ,src操 作:dest (src)seg (src+4)标志影响:无合法格式:dest srcLDSLESLFS reg32 , memLGSLSS,(6)标志寄存器传送指令 LAHF 把标志装入AH 句 法:LAHF 操 作:AHEFAGSOFFH 标志影响:无 合法格式:LAHF, SAHF 把AH内容送到EFLAGS中 句 法:SAHF 操 作:EFLAGS(EFLAGS 0F
10、FFFFF00H) (AH)0D5H) 标 志:S,A,Z,P,C 合法格式:SAFH,(9)XLAT 字节转换 句 法:XLAT操 作:AL DS:EBX+AL标 志:无合法格式:XLAT,例:查找NUM单元中的数所对应的数码管字型码。,设D7D0位依次驱动ha段(共阴),则有:,解:编程时,按09、AF的次序,将相应的字型码设置在数据段中:,33,2.堆栈指令概念,22H,压栈过程,退栈过程,(3)PUSHF、POPF (16位标志寄存器栈操作)PUSHFD、POPFD (32位标志寄存器栈操作)POPF、POPFD 影响标志位,(2) POP 弹栈 句 法:POP dest操 作:dest SS:SPif sizeof(dest)=16then SP SP+2elseSP SP+4endif,合法格式:dest POP regMem,标 志:无, POPAD 句 法:POPAD POPA 操 作:POP EDI POP DIPOP ESI POP SIPOP EBP POP BPADD ESP,4 ADD SP,2POP EBX POP BXPOP EDX POP DXPOP ECX POP CXPOP EAX POP AX标 志:无 合法格式:POPAD,POPA,