8088汇编速查手册一、数据传输指令───────────────────────────────────────它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据.1.通用数据传送指令.MOV传送字或字节.MOVSX先符号扩展,再传送.MOVZX先零扩展,再传送.PUSH把字压入堆栈.POP把字弹出堆栈.PUSHA把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈.POPA把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈.PUSHAD把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈.POPAD把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈.BSWAP交换32位寄存器里字节的顺序XCHG交换字或字节.(至少有一个操作数为寄存器,段寄存器不可作为操作数)CMPXCHG比较并交换操作数.(第二个操作数必须为累加器AL/AX/EAX)XADD先交换再累加.(结果在第一个操作数里)XLAT字节查表转换.──BX指向一张256字节的表的起点,AL为表的索引值(0-255,即0-FFH);返回AL为查表结果.([BX+AL]-AL)2.输入输出端口传送指令.INI/O端口输入.(语法:IN累加器,{端口号│DX})OUTI/O端口输出.(语法:OUT{端口号│DX},累加器)输入输出端口由立即方式指定时,其范围是0-255;由寄存器DX指定时,其范围是0-65535.3.目的地址传送指令.LEA装入有效地址.例:LEADX,string;把偏移地址存到DX.LDS传送目标指针,把指针内容装入DS.例:LDSSI,string;把段地址:偏移地址存到DS:SI.LES传送目标指针,把指针内容装入ES.例:LESDI,string;把段地址:偏移地址存到ES:DI.LFS传送目标指针,把指针内容装入FS.例:LFSDI,string;把段地址:偏移地址存到FS:DI.LGS传送目标指针,把指针内容装入GS.例:LGSDI,string;把段地址:偏移地址存到GS:DI.LSS传送目标指针,把指针内容装入SS.例:LSSDI,string;把段地址:偏移地址存到SS:DI.4.标志传送指令.LAHF标志寄存器传送,把标志装入AH.SAHF标志寄存器传送,把AH内容装入标志寄存器.PUSHF标志入栈.POPF标志出栈.PUSHD32位标志入栈.POPD32位标志出栈.二、算术运算指令───────────────────────────────────────ADD加法.ADC带进位加法.INC加1.AAA加法的ASCII码调整.DAA加法的十进制调整.SUB减法.SBB带借位减法.DEC减1.NEC求反(以0减之).CMP比较.(两操作数作减法,仅修改标志位,不回送结果).AAS减法的ASCII码调整.DAS减法的十进制调整.MUL无符号乘法.IMUL整数乘法.以上两条,结果回送AH和AL(字节运算),或DX和AX(字运算),AAM乘法的ASCII码调整.DIV无符号除法.IDIV整数除法.以上两条,结果回送:商回送AL,余数回送AH,(字节运算);或商回送AX,余数回送DX,(字运算).AAD除法的ASCII码调整.CBW字节转换为字.(把AL中字节的符号扩展到AH中去)CWD字转换为双字.(把AX中的字的符号扩展到DX中去)CWDE字转换为双字.(把AX中的字符号扩展到EAX中去)CDQ双字扩展.(把EAX中的字的符号扩展到EDX中去)三、逻辑运算指令───────────────────────────────────────AND与运算.OR或运算.XOR异或运算.NOT取反.TEST测试.(两操作数作与运算,仅修改标志位,不回送结果).SHL逻辑左移.SAL算术左移.(=SHL)SHR逻辑右移.SAR算术右移.(=SHR)ROL循环左移.ROR循环右移.RCL通过进位的循环左移.RCR通过进位的循环右移.以上八种移位指令,其移位次数可达255次.移位一次时,可直接用操作码.如SHLAX,1.移位1次时,则由寄存器CL给出移位次数.如MOVCL,04SHLAX,CL四、串指令───────────────────────────────────────DS:SI源串段寄存器:源串变址.ES:DI目标串段寄存器:目标串变址.CX重复次数计数器.AL/AX扫描值.D标志0表示重复操作中SI和DI应自动增量;1表示应自动减量.Z标志用来控制扫描或比较操作的结束.MOVS串传送.(MOVSB传送字符.MOVSW传送字.MOVSD传送双字.)CMPS串比较.(CMPSB比较字符.CMPSW比较字.)SCAS串扫描.把AL或AX的内容与目标串作比较,比较结果反映在标志位.LODS装入串.把源串中的元素(字或字节)逐一装入AL或AX中.(LODSB传送字符.LODSW传送字.LODSD传送双字.)STOS保存串.是LODS的逆过程.REP当CX/ECX0时重复.REPE/REPZ当ZF=1或比较结果相等,且CX/ECX0时重复.REPNE/REPNZ当ZF=0或比较结果不相等,且CX/ECX0时重复.REPC当CF=1且CX/ECX0时重复.REPNC当CF=0且CX/ECX0时重复.五、程序转移指令───────────────────────────────────────1无条件转移指令(长转移)JMP无条件转移指令CALL过程调用RET/RETF过程返回.2条件转移指令(短转移,-128到+127的距离内)(当且仅当(SFXOROF)=1时,OP1OP2)JA/JNBE不小于或不等于时转移.JAE/JNB大于或等于转移.JB/JNAE小于转移.JBE/JNA小于或等于转移.以上四条,测试无符号整数运算的结果(标志C和Z).JG/JNLE大于转移.JGE/JNL大于或等于转移.JL/JNGE小于转移.JLE/JNG小于或等于转移.以上四条,测试带符号整数运算的结果(标志S,O和Z).JE/JZ等于转移.JNE/JNZ不等于时转移.JC有进位时转移.JNC无进位时转移.JNO不溢出时转移.JNP/JPO奇偶性为奇数时转移.JNS符号位为0时转移.JO溢出转移.JP/JPE奇偶性为偶数时转移.JS符号位为1时转移.3循环控制指令(短转移)LOOPCX不为零时循环.LOOPE/LOOPZCX不为零且标志Z=1时循环.LOOPNE/LOOPNZCX不为零且标志Z=0时循环.JCXZCX为零时转移.JECXZECX为零时转移.4中断指令INT中断指令INTO溢出中断IRET中断返回5处理器控制指令HLT处理器暂停,直到出现中断或复位信号才继续.WAIT当芯片引线TEST为高电平时使CPU进入等待状态.ESC转换到外处理器.LOCK封锁总线.NOP空操作.STC置进位标志位.CLC清进位标志位.CMC进位标志取反.STD置方向标志位.CLD清方向标志位.STI置中断允许位.CLI清中断允许位.六、伪指令───────────────────────────────────────DW定义字(2字节).PROC定义过程.ENDP过程结束.SEGMENT定义段.ASSUME建立段寄存器寻址.ENDS段结束.END程序结束.8088汇编跳转一、状态寄存器PSW(ProgramFlag)程序状态字寄存器,是一个16位寄存器,由条件码标志(flag)和控制标志构成,如下所示:1514131211109876543210OFDFIFTFSFZFAFPFCF条件码:①OF(OverflowFlag)溢出标志。溢出时为1,否则置0。②SF(SignFlag)符号标志。结果为负时置1,否则置0.③ZF(ZeroFlag)零标志,运算结果为0时ZF位置1,否则置0.④CF(CarryFlag)进位标志,进位时置1,否则置0.⑤AF(AuxiliarycarryFlag)辅助进位标志,记录运算时第3位(半个字节)产生的进位置。有进位时1,否则置0.⑥PF(ParityFlag)奇偶标志。结果操作数中1的个数为偶数时置1,否则置0.控制标志位:⑦DF(DirectionFlag)方向标志,在串处理指令中控制信息的方向。⑧IF(InterruptFlag)中断标志。⑨TF(TrapFlag)陷井标志。二、直接标志转移(8位寻址)指令格式机器码测试条件如...则转移指令格式机器码测试条件如...则转移JC72C=1有进位JNS79S=0正号JNC73C=0无进位JO70O=1有溢出JZ/JE74Z=1零/等于JNO71O=0无溢出JNZ/JNE75Z=0不为零/不等于JP/JPE7AP=1奇偶位为偶JS78S=1负号JNP/IPO7BP=0奇偶位为奇三、间接标志转移(8位寻址)指令格式机器码测试格式如...则转移JA/JNBE(比较无符号数)77C或Z=0高于/不低于或等于JAE/JNB(比较无符号数)73C=0=高于或等于/不低于JB/JNAE(比较无符号数)72C=1低于/不高于或等于JBE/JNA(比较无符号数)76C或Z=1=低于或等于/不高于JG/JNLE(比较带符号数)7F(S异或O)或Z=0大于/不小于或等于JGE/JNL(比较带符号数)7DS异或O=0=大于或等于/不小于JL/JNGE(比较带符号数)7CS异或O=1小于/不大于或等于JLE/JNG(比较带符号数)7E(S异或O)或Z=1=小于或等于/不大于四、无条件转移指令(fisheep译fisheep@sohu.com)操作码伪码指令含义EBcbJMPrel8相对短跳转(8位),使rel8处的代码位下一条指令E9cwJMPrel16相对跳转(16位),使rel16处的代码位下一条指令FF/4JMPr/m16绝对跳转(16位),下一指令地址在r/m16中给出FF/4JMPr/m32绝对跳转(32位),下一指令地址在r/m32中给出EAcbJMPptr16:16远距离绝对跳转,下一指令地址在操作数中EAcbJMPptr16:32远距离绝对跳转,下一指令地址在操作数中FF/5JMPm16:16远距离绝对跳转,下一指令地址在内存m16:16中FF/5JMPm16:32远距离绝对跳转,下一指令地址在内存m16:32中五、16位/32位寻址方式(fisheep译fisheep@sohu.com)操作码伪码指令跳转含义跳转类型跳转的条件(标志位)0F87cw/cdJArel16/32大于near(CF=0andZF=0)0F83cw/cdJAErel16/32大于等于near(CF=0)0F82cw/cdJBrel16/32小于near(CF=1)0F86cw/cdJBErel16/32小于等于near(CF=1orZF=1)0F82cw/cdJCrel16/32进位near(CF=1)0F84cw/cdJErel16/32等于near(ZF=1)0F84cw/cdJZrel16/32为0near(ZF=1)0F8Fcw/cdJGrel16/32大于near(ZF=0andSF=OF)0F8Dcw/cdJGErel16/32大于等于near(SF=OF)0F8Ccw/cdJLrel16/32小于near(SFOF)0F8Ecw/cdJLErel16/32小于等于near(ZF=1orSFOF)0F86cw/cdJNArel16/32不大于near(CF=1orZF=1)0F82cw/cdJNAErel16/32不大于等于near(CF=1)0F83cw/cdJNBrel16/32不小于near(CF=0)0F87cw/cdJNBErel16/32不小于等于near(CF=0andZF=0)0F83cw/cdJNCrel16/32不进位near(CF=0)0F85cw/cdJNErel16/32不等于near(ZF=0)0F8Ecw/cdJNGrel16/32不大于ne