当前位置:文档之家› 汇编语言指令

汇编语言指令

8088指令系统总结一、数据传送指令1.通用传送指令(1)传送指令MOV dst, src功能:dst←src(2)堆栈操作指令人WPUSH src作用:SP←SP-2 ((SP+1)+SP)←src src(reg seg mem) POP dst 作用:dst←((SP+1)+SP)SP←SP-2 dst(reg seg mem) (3)交换指令XCHG OPR1,OPR2 OPR1←→OPR22.累加器传送指令(1)输入输出指令256B短格式:直接寻址,64K长格式:直接、间接寻址,PORT为8位口地址输入指令:直接寻址IN AX,PORT IN AL,PORT间接寻址IN AX,DX IN AL,DX输出指令:直接寻址OUT AX,PORT OUT AL,PORT间接寻址OUT AX,DX OUT AL,DX(2)换码指令XLAT AL←(BX+AL)(BX)为mem地址3.地址传送指令(1)有效地址传送寄存器LEA reg16, mem作用:mem的EA→reg16(2)指针送寄存器和DS指令LDS reg16, mem32 作用:reg16←mem32的低字高字→DS(3)指针送寄存器和有ES指令LES reg16, mem32 作用:reg16←mem32的低字高字→ES4.标志寄存器传送指令(1)取标志指令:LAHF F的低字节→AH(2)置标志指令:SAHF AH→flag的低字节(3)标志入栈指令:PUSHF SP-2→SP F→(SP+1):SP(4)标志出栈指令:POPF (SP+1):SP→F SP+2→SP二、算术运算指令1.加法类指令(Add)opr-reg mem B/W(1)不带进位加法ADD dst, src dst←dst+src 影响OSZAPC(2)带进位加法ADC dst, src dst←dst+src+CF影响OSZAPC(3)加1指令INC opr opr←opr+1影响OSZP(4)组合十进制调整DAA放在ADD后(5)非组合十进制调整AAA放在ADC后原理:2个十进制数相加,可能出现非法数(A到F),需用调整指令,进行加6调整变成合法十进制数。

十进制=BCD组合=压缩组合BCD占4位非组合BCD占8位2 . 减法类指令(substract)(1)减法指令SUB dst, src;dst←dst-src影响标志位OSZAPC(2)带借位减法指令SBB dst, src;dst←dst-src-CF影响标志位OSZAPC(3)减1指令DEC src 影响OSZP(4)求补指令NEG src ;negatesrc←0-src 0-src=FFH-src+1FFH-src=求反(5)比较指令COMP dst, src难在带符号数比较:SF⊕OF=0 A>B,SF⊕OF=1,A<B (6)组合十进制减法调整指令DAS(7)非组合十进制减法调整指令AAS3.乘法类指令multiplication(1)无符号数乘法MUL src ;AX←src8×AL DX:AX←src16×AX,影响F:OC(2)有符号数乘法IMUL src ;AX←src8×AL DX:AX←src16×AX,影响F:OC(3)组合十进制乘法调整指令AAM注意:1乘数和被乘数都是非组合BCD码。

2 AAM用于乘法指令MUL之后。

3影响F:SZP原理:AH←AL/0AH AH←AL%0AH(%为取余操作)4.除法类指令(Division)(1)无符号数除法DIV src ;AX÷src8商进AL,余数进AH;(DX:AX)÷src16商进AX,余数进DX,不影响F。

(2)有符号数除法IDIV src ;算法同上。

注意:1不影响F;2余数的符号与被除数相同,3若被除数和除数都是8位,被除数需扩展成16位;若被除数和除数都是16位,被除数需扩展成32位。

(3)非组合十进制乘法调整指令AA D注意:1除数和被除数都是非组合BCD码。

2AAD放在除法指令前。

原理:(AL)←(AH)×0AH+(AL)(AH)←0(4)字节扩展成字指令CBW;AL中的符号扩展为AX,不影响F原理:(AL)<80H(正数)使AH=00H;(AL)≧80H(负数)使AH=FFH (5)字扩展成双字指令CWB;AX中的符号扩展为DX:AX,不影响F原理:(AH)<8000H(正数)使DX=0000H;(AX)≧8000H(负数)使DX =FFFFH三、逻辑运算与位移指令1.逻辑运算(1)与AND dst, src ;dst←dst AND src 影响F: SZP(2)或OR dst, src ;dst←dst OR src 影响F: SZP(3)异或XOR dst, src ;dst←dst XOR src 影响F: SZP(4)非NOT opr ;dst←opr逐位求反不影响F(5)测试TEST reg, src ;dst AND src 影响F: SZP 不入dst逻辑运算dst src opr符合基本传输原则(不允许seg)2.移位(1)逻辑左移SHL opr, 1 或SHL opr, CL0填最右位(2)逻辑右移SHR opr, 1 或SHR opr, CL0填最左位(3)算术左移SAL opr, 1 或SAL opr, CL0填最右位(4)算术右移SAR opr, 1SAR opr, CL最左位不变注意:opr: reg mem3.循环移位(1)无进位左循环ROL opr, 1 ROL opr, CL(2)无进位右循环ROR opr, 1 ROR opr, CL(3)有进位左循环RCL opr, 1 RCL opr, CL(4)有进位右循环RCR opr, 1 RCR opr, CL注意:opr: reg mem B/W四、串操作和重复指令(唯一的src dst 可以均为mem的指令)特点:A源操作数src在DS:SI,目的操作数在dst ES:DIB修改指针决定于DF,0增1减,字节1字2C串长置于CXD重复靠REP1.串操作指令(1)串传送MOVS / MOVSB / MOVSW dst, src ;dst←src(2)串比较COMP / COMPB / COMPW dst, src ;dst-src影响F: OSZAPC(3)串搜索SCAS / SCASB / SCASW dst ;AL-dst或AX-dst影响F: OSZAPC(4)串进A LODS / LODSB /LODSW src ;AL←src或AX←src(5)A进串STOS / STOSB / STOSW dst ;dst←AL或dst←AX(6)重复指令REP,RETZ / REPE,REPNZ / REPNE2.重复指令(1)REP与MOVS/B/W,STOS/B/W联用①若CX≠0则重复,执行下一条,否则退出串操作②CX←(CX-1)③执行字符串命令④重复1~3(2)RETZ / REPE与CMPS/B/W,SCAS/B/W联用①若CX≠0且ZF=1则重复,执行下一条,若CX=0或ZF=0(两数不等)退出串操作②CX←(CX-1)③执行字符串命令④重复1~3(3)REPNZ / REPNE与CMPS/B/W,SCAS/B/W联用①若CX≠0且ZF=0则重复,执行下一条,若CX=0或ZF=1(两数不等)退出串操作②CX←(CX-1)③执行字符串命令④重复1~3五、控制与转移指令1.无条件转移指令注意:SHORT为运算符,页内,-128~127。

偏移量用补码表示,8位偏移量与IP相加需扩展成16位(1)段内直接短转移JMP SHORT偏移量8;IP←IP+8位偏移量(2)段内直接近转移JMP NEA T PTR偏移量16注意:NEAT PTR为运算符偏移量用补码表示:64K范围-32768~32767 (3)段内间接寻址JMP src ;IP←src src: reg mem注意:mem寻址要加WORD PTR(4)段间直接寻址JMP FAR PTR LABEL;CS←下2字节IP←上2字节注意:FAR PTR为段内转移运算符LABEL为四字节转移地址的首地址,下CS上IP(5)段间间接寻址JMP DWORD PTR mem注意:与段间直接寻址一样,仅mem需要寻址去找,如相对寻址、基址加变址等2.条件转移指令(共19条)特点:双字节指令,短转移。

转移范围-128~127 ,IP←opr opr: reg mem,通常为标号(1)以标志位为条件(F: OSZPC 十种情况)①JO opr ;OF=1转移,溢出转移,②JNO opr ;OF=0转移,不溢出转移③JS opr ;SF=1转移,负数转移④JNS opr ;SF=0转移,正数转移⑤JZ opr ;ZF=1转移,结果为0转移又JE⑥JNZ opr ;ZF=0转移,结果不为0转移又JNE⑦JP opr ;PF=1转移,偶数转移⑧JNP opr ;PF=0转移,奇数转移⑨JC opr ;CF=1转移,有进(借)位转移又JB JNA⑩JNC opr ;CF=0转移,无进(借)位转移又JA JNB(2)无符号数比较大于用A,小于用B,等于用E,四种情况:>≥<≤设参与比较的两数按序为M、NJA opr ;M>N转移到地址opr CF=0且ZF=0JAE opr ;M≥N转移到地址opr CF=0或ZF=1JB opr ;M<N转移到地址opr CF=1且ZF=0JBE opr ;M≤N转移到地址opr CF=1或ZF=1(3)有符号数比较大于用G,小于用L,等于用E,四种情况:>≥<≤设参与比较的两数按序为M、NJG opr ;M>N转移到地址opr SF⊕OF=0且ZF=0JGE opr ;M≥N转移到地址opr SF⊕OF=0或ZF=1JL opr ;M<N转移到地址opr SF⊕OF=1且ZF=0JLE opr ;M≤N转移到地址opr SF⊕OF=1或ZF=1(4)根据CX值转移JCXZ opr ;当CX=0转移到地址opr3.循环控制指令以CX为计数器,短转移,不影响F,IP←Label或IP←IP+扩展的opr8Label通常为符号地址(1)循环指令LOOP SHORT Label①CX-1②若CX≠0,则循环,改变IP③若CX=0执行下一条指令零循环指令LOOPZ SHORT Label 或LOOPE SHORT Label①CX-1②若CX≠0且ZF=1,则循环,改变IP③若CX=0或ZF=1执行下一条指令(2)非零循环指令LOOPNZ SHORT Label 或LOOPNE SHORT Label ①CX-1②若CX≠0且ZF=0,则循环,改变IP③若CX=0或ZF=0执行下一条指令4.子程序调用指令子程序=过程调用=转子返回=返子(1)段内直接调用CALL dst ;dst为子程序入口地址(D16范围)①现IP入栈:SP←(SP-2)(SP+1)SP←IP②子程序入口地址入IP:IP←dst(2)段内直接调用CALL dst ;dst:各种reg mem寻址的EA,D16①现IP入栈:SP←(SP-2)(SP+1)SP←IP②子程序入口地址入IP:IP←EA(3)段间直接调用CALL dst ;dst为子程序入口地址(D32范围)①现CS入栈:SP←(SP-2)(SP+1)SP←CS②现IP入栈:SP←(SP-2)(SP+1)SP←IP③子程序入口有效地址入IP:IP←有效地址④子程序入口段地址入IP:CS←段地址(4)段间间接调用CALL dst ;dst为各种mem寻址的EA,D32范围①现CS入栈:SP←(SP-2)(SP+1)SP←CS②现IP入栈:SP←(SP-2)(SP+1)SP←IP③子程序入口有效地址入IP:IP←EA④子程序入口段地址入IP:CS←EA+25.子程序返回指令(1)段内返回指令RET;与CALL dst成对出现①原IP出栈:IP←(SP+1)SP②修改SP指针:SP←(SP+2)(2)段内带立即数返回指令RET im;与CALL dst成对出现,im为D16①原IP出栈:IP←(SP+1)SP②修改SP指针:SP←(SP+2)③IP加立即数:IP←IP+im(3)段间返回指令RET;与CALL dst成对出现①原IP出栈:IP←(SP+1)SP②修改SP指针:SP←(SP+2)③原CS出栈:IP←(SP+1)SP④修改SP指针:SP←(SP+2)(4)段间带立即数返回指令;与CALL dst成对出现,im为D16①原IP出栈:IP←(SP+1)SP②修改SP指针:SP←(SP+2)③原CS出栈:IP←(SP+1)SP④修改SP指针:SP←(SP+2)⑤IP加立即数:IP←IP+im六、CPU控制指令1.状态标志位操作指令D置位复位,I置位复位,C反置位复位STD;使DF=1CLD;使DF=0STI;使IF=1CLI;使IF=0STC;使CF=1CLC;使CF=0CMC;CF=CF的非2.外部同步HLT;暂停,等待中断或复位W AIT;当引脚TEXT等于0时,等待外部中断,否则顺序执行LOCK;总线封锁前缀3.NOP;空操作。

相关主题