8086 汇编指令集

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

8086汇编指令集一、数据传输指令它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据.1.通用数据传送指令MOV传送字或字节.格式为:MOVDST,SRC执行的操作:(DST)-(SRC)MOVSX先符号扩展,再传送.MOVZX先零扩展,再传送.PUSH把字压入堆栈.格式为:PUSHSRC执行的操作:(SP)-(SP)-2((SP)+1,(SP))-(SRC)POP把字弹出堆栈.格式为:POPDST执行的操作:(DST)-((SP+1),(SP))(SP)-(SP)+2PUSHA把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交换字或字节.(至少有一个操作数为寄存器,段寄存器不可作为操作数)格式为:XCHGOPR1,OPR2执行的操作:(OPR1)--(OPR2)CMPXCHG比较并交换操作数.(第二个操作数必须为累加器AL/AX/EAX)XADD先交换再累加.(结果在第一个操作数里)2.输入输出端口传送指令.INI/O端口输入.(语法:IN累加器,{端口号│DX})长格式为:INAL,PORT(字节)INAX,PORT(字)执行的操作:(AL)-(PORT)(字节)(AX)-(PORT+1,PORT)(字)短格式为:INAL,DX(字节)INAX,DX(字)执行的操作:AL-((DX))(字节)AX-((DX)+1,DX)(字)OUTI/O端口输出.(语法:OUT{端口号│DX},累加器),输入输出端口由立即方式指定时,其范围是0-255;由寄存器DX指定时,其范围是0-65535.长格式为:OUTPORT,AL(字节)OUTPORT,AX(字)执行的操作:(PORT)-(AL)(字节)(PORT+1,PORT)-(AX)(字)短格式为:OUTDX,AL(字节)OUTDX,AX(字)执行的操作:((DX))-(AL)(字节)((DX)+1,(DX))-AX(字)XLAT换码指令字节查表转换,BX指向一张256字节的表的起点,AL为表的索引值(0-255,即0-FFH);返回AL为查表结果.执行的操作:([BX+AL]-AL)格式为:XLATOPR或:XLAT3.目的地址传送指令.LEA装入有效地址.格式为:LEAREG,SRC执行的操作:(REG)-SRC指令把源操作数的有效地址送到指定的寄存器中.例:LEADX,string;把偏移地址存到DX.LDS传送目标指针,把指针内容装入DS.格式为:LDSREG,SRC执行的操作:(REG)-(SRC)(DS)-(SRC+2)把源操作数指定的4个相继字节送到由指令指定的寄存器及DS寄存器中.该指令常指定SI寄存器.例:LDSSI,string;把段地址:偏移地址存到DS:SI.LES传送目标指针,把指针内容装入ES.格式为:LESREG,SRC执行的操作:(REG)-(SRC)(ES)-(SRC+2)把源操作数指定的4个相继字节送到由指令指定的寄存器及ES寄存器中.该指令常指定DI寄存器.例: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.格式为:LAHF执行的操作:(AH)-(PWS的低字节)SAHF标志寄存器传送,把AH内容装入标志寄存器.格式为:SAHF执行的操作:(PWS的低字节)-(AH)PUSHF标志入栈.格式为:PUSHF执行的操作:(SP)-(SP)-2((SP)+1,(SP))-(PSW)POPF标志出栈.格式为:POPF执行的操作:(PWS)-((SP)+1,(SP))(SP)-(SP+2)PUSHD32位标志入栈.POPD32位标志出栈.二、算术运算指令ADD加法.格式:ADDDST,SRC执行的操作:(DST)-(SRC)+(DST)ADC带进位加法.格式:ADCDST,SRC执行的操作:(DST)-(SRC)+(DST)+CFINC加1.格式:INCOPR执行的操作:(OPR)-(OPR)+1AAA加法的ASCII码调整.DAA加法的十进制调整.SUB减法.格式:SUBDST,SRC执行的操作:(DST)-(DST)-(SRC)SBB带借位减法.格式:SBBDST,SRC执行的操作:(DST)-(DST)-(SRC)-CFDEC减1.格式:DECOPR执行的操作:(OPR)-(OPR)-1NEC求反(以0减之).格式:NEGOPR执行的操作:(OPR)--(OPR)CMP比较.(两操作数作减法,仅修改标志位,不回送结果).格式:CMPOPR1,OPR2执行的操作:(OPR1)-(OPR2)该指令与SUB指令一样执行减法操作,但不保存结果,只是根据结果设置条件标志.AAS减法的ASCII码调整.DAS减法的十进制调整.MUL无符号乘法.格式:MULSRC执行的操作:字节操作数:(AX)-(AL)*(SRC)字操作数:(DX,AX)-(AX)*(SRC)IMUL整数乘法.格式:IMULSRC执行的操作:与MUL相同,但必须是带符号数,而MUL是无符号数.以上两条,结果回送AH和AL(字节运算),或DX和AX(字运算),AAM乘法的ASCII码调整.DIV无符号除法.非组合BCD码乘法调整指令格式:DIVSRC执行的操作:字节操作:(AL)-(AX)/(SRC)的商(AH)-(AX)/(SRC)的余数字操作:(AX)-(DX,AX)/(SRC)的商(AX)-(DX,AX)/(SRC)的余数IDIV整数除法.格式:DIVSRC执行的操作:与DIV相同,但操作数必须是带符号数,商和余数也均为带符号数,且余数的符号与被除数的符号相同.以上两条,结果回送:商回送AL,余数回送AH,(字节运算);或商回送AX,余数回送DX,(字运算).AAD除法的ASCII码调整.非组合BCD码除法调整指令CBW字节转换为字.(把AL中字节的符号扩展到AH中去)格式:CBW执行的操作:AL的内容符号扩展到AH.即如果(AL)的最高有效位为0,则(AH)=00;如(AL)的最高有效位为1,则(AH)=0FFHCWD字转换为双字.(把AX中的字的符号扩展到DX中去)格式:CWD执行的操作:AX的内容符号扩展到DX.即如(AX)的最高有效位为0,则(DX)=0;否则(DX)=0FFFFH.这两条指令都不影响条件码.CWDE字转换为双字.(把AX中的字符号扩展到EAX中去)CDQ双字扩展.(把EAX中的字的符号扩展到EDX中去)三、逻辑运算指令AND与运算.格式:ANDDST,SRC执行的操作:(DST)-(DST)^(SRC)OR或运算.格式:ORDST,SRC执行的操作:(DST)-(DST)V(SRC)XOR异或运算.格式:XORDST,SRC执行的操作:(DST)-(DST)V(SRC)NOT取反.格式:NOTOPR执行的操作:(OPR)-(OPR)TEST测试.(两操作数作与运算,仅修改标志位,不回送结果).格式:TESTOPR1,OPR2执行的操作:(DST)^(SRC)两个操作数相与的结果不保存,只根据其特征置条件码SHL逻辑左移.格式:SHLOPR,CNT(其余的类似)其中OPR可以是除立即数以外的任何寻址方式.移位次数由CNT决定,CNT可以是1或CL.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串传送.格式:可有三种MOVSDST,SRCMOVSB(字节)MOVSW(字)其中第二、三种格式明确地注明是传送字节或字,第一种格式则应在操作数中表明是字还是字节操作,例如:MOVSES:BYTEPTR[DI],DS:[SI]执行的操作:1)((DI))-((SI))2)字节操作:(SI)-(SI)+(或-)1,(DI)-(DI)+(或-)1当方向标志DF=0时用+,当方向标志DF=1时用-3)字操作:(SI)-(SI)+(或-)2,(DI)-(DI)+(或-)2当方向标志DF=0时用+,当方向标志DF=1时用-该指令不影响条件码.CMPS串比较.格式:CMPSSRC,DSTCMPSBCMPSW执行的操作:1)((SI))-((DI))2)字节操作:(SI)-(SI)+-1,(DI)-(DI)+-1字操作:(SI)-(SI)+-2,(DI)-(DI)+-2指令把由(SI)指向的数据段中的一个字(或字节)与由(DI)指向的附加段中的一个字(或字节)相减,但不保存结果,只根据结果设置条件码,指令的其它特性和MOVS指令的规定相同.SCAS串扫描.把AL或AX的内容与目标串作比较,比较结果反映在标志位.格式:SCASDSTSCASBSCASW执行的操作:字节操作:(AL)-((DI)),(DI)-(DI)+-1字操作:(AL)-((DI)),(DI)-(DI)+-2该指令把AL(或AX)的内容与由(DI)指定的在附加段中的一个字节(或字)进行比较,并不保存结果,只根据结果置条件码.指令的其他特性和MOVS的规定相同.LODS装入串.把源串中的元素(字或字节)逐一装入AL或AX中.格式:LODSSRCLODSBLODSW执行的操作:字节操作:(AL)-((SI)),(SI)-(SI)+-1字操作:(AX)-((SI)),(SI)-(SI)+-2该指令把由(SI)指定的数据段中某单元的内容送到AL或AX中,并根据方向标志及数据类型修改SI的内容.指令允许使用段跨越前缀来指定非数据段的存储区.该指令也不影响条件码.一般说来,该指令不和REP联用.有时缓冲区中的一串字符需要逐次取出来测试时,可使用本指令.STOS保存串.是LODS的逆过程.格式:STOSDSTSTOSB(字节)STOSW(字)执行的操作:字节操作:((DI))-(AL),(DI)-(DI)+-1字操作:((DI))-(AX),(DI)-(DI)+-2该指令把AL或AX的内容存入由(DI)指定的附加段的某单元中,并根据DF的值及数据类型修改DI的内容,当它与REP联用时,可把AL或AX的内容存入一个长度为(CX)的缓冲区中.REP当CX/ECX0时重复.格式:REPstringprimitive其中StringPrimitive可为MOVS,LODS或STOS指令执行的操作:1)如(CX)=0则退出REP,否则往下执行.2)(CX)-(CX)-13)执行其中的串操作4)重复1)~3)REPE/REPZ当ZF=1或比较结果相等,且CX/ECX0时重复.格式:REPE(或REPZ)StringPrimitive其中StringPrimitive可为CMPS或SCAS指令.执行的操作:1)如(CX)=0或ZF=0(

1 / 11
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功