首页 常用8086汇编指令(彩色版)

常用8086汇编指令(彩色版)

举报
开通vip

常用8086汇编指令(彩色版) 8086/80888086/80888086/80888086/8088指令系统 一、数据传送指令 1.通用数据传送指令 MOV(Move)传送 PUSH(Push onto the stack)进栈 POP(Pop from the stack)出栈 XCHG(Exchange)交换 .MOV指令 格式为: MOV DST,SRC 执行的操作:(DST)(OPR2) 2.累加器专用传送指令 IN(Input) 输入 OUT(Output) 输出 XLAT(Translate) 换码 这组指令只限于使用累加器...

常用8086汇编指令(彩色版)
8086/80888086/80888086/80888086/8088指令系统 一、数据传送指令 1.通用数据传送指令 MOV(Move)传送 PUSH(Push onto the stack)进栈 POP(Pop from the stack)出栈 XCHG(Exchange)交换 .MOV指令 格式为: MOV DST,SRC 执行的操作:(DST)<-(SRC) .PUSH进栈指令 格式为:PUSH SRC 执行的操作:(SP)<-(SP)-2 ((SP)+1,(SP))<-(SRC) .POP出栈指令 格式为:POP DST 执行的操作:(DST)<-((SP+1),(SP)) (SP)<-(SP)+2 .XCHG 交换指令 格式为:XCHG OPR1,OPR2 执行的操作:(OPR1)<-->(OPR2) 2.累加器专用传送指令 IN(Input) 输入 OUT(Output) 输出 XLAT(Translate) 换码 这组指令只限于使用累加器 AX或 AL传送信息. .IN 输入指令 长格式为: IN AL,PORT(字节) IN AX,PORT(字) 执行的操作: (AL)<-(PORT)(字节) (AX)<-(PORT+1,PORT)(字) 短格式为: IN AL,DX(字节) IN AX,DX(字) 执行的操作: AL<-((DX))(字节) AX<-((DX)+1,DX)(字) .OUT 输出指令 长格式为: OUT PORT,AL(字节) OUT PORT,AX(字) 执行的操作: (PORT)<-(AL)(字节) (PORT+1,PORT)<-(AX)(字) 短格式为: OUT DX,AL(字节) OUT DX,AX(字) 执行的操作: ((DX))<-(AL)(字节) ((DX)+1,(DX))<-AX(字) 在 IBM-PC 机里 ,外部设备最多可有65536个 I/O 端口 ,端口 (即外设的端口地址 )为 0000~FFFFH.其中前256个端口(0~FFH)可以直接在指令中指定,这就是长格式中的 PORT,此 时机器指令用二个字节表示,第二个字节就是端口号.所以用长格式时可以在指定中直接指定 端口号,但只限于前256个端口.当端口号>=256时,只能使用短格式,此时,必须先把端口号放到 DX寄存器中(端口号可以从0000到0FFFFH),然后再用 IN或 OUT指令来 传送信息. .XLAT 换码指令 格式为: XLAT OPR 或: XLAT 执行的操作:(AL)<-((BX)+(AL)) 3.有效地址送寄存器指令 LEA(Load effective address)有效地址送寄存器 LDS(Load DS with Pointer)指针送寄存器和 DS LES(Load ES with Pointer)指针送寄存器和 ES .LEA 有效地址送寄存器 格式为: LEA REG,SRC 执行的操作:(REG)<-SRC 指令把源操作数的有效地址送到指定的寄存器中. .LDS 指针送寄存器和 DS指令 格式为: LDS REG,SRC 执行的操作:(REG)<-(SRC) (DS)<-(SRC+2) 把源操作数指定的4个相继字节送到由指令指定的寄存器及 DS寄存器中.该指令常指定 SI寄存器. .LES 指针送寄存器和 ES指令 格式为: LES REG,SRC 执行的操作: (REG)<-(SRC) (ES)<-(SRC+2) 把源操作数指定的4个相继字节送到由指令指定的寄存器及 ES寄存器中.该指令常指定 DI寄存器. 4.标志寄存器传送指令 LAHF(LoadAHwith flags)标志送 AH SAHF(store AH into flags)AH送标志寄存器 PUSHF(push the flags) 标志进栈 POPF(pop the flags) 标志出栈 .LAHF 标志送 AH 格式为: LAHF 执行的操作:(AH)<-(PWS的低字节) .SAHFAH送标志寄存器 格式为: SAHF 执行的操作:(PWS的低字节)<-(AH) .PUSHF 标志进栈 格式为: PUSHF 执行的操作:(SP)<-(SP)-2 ((SP)+1,(SP))<-(PSW) .POPF 标志出栈 格式为: POPF 执行的操作:(PWS)<-((SP)+1,(SP)) (SP)<-(SP+2) 二、算术指令 1.加法指令 ADD(add)加法 ADC(addwith carry)带进位加法 INC(increment)加1 .ADD 加法指令 格式: ADD DST,SRC 执行的操作:(DST)<-(SRC)+(DST) .ADC 带进位加法指令 格式: ADC DST,SRC 执行的操作:(DST)<-(SRC)+(DST)+CF .ADD 加1指令 格式: INC OPR 执行的操作:(OPR)<-(OPR)+1 2.减法指令 SUB(subtract)减法 SBB(subtract with borrow)带借位减法 DEC(Decrement)减1 NEG(Negate)求补 CMP(Compare)比较 .SUB 减法指令 格式: SUB DST,SRC 执行的操作:(DST)<-(DST)-(SRC) .SBB 带借位减法指令 格式: SBB DST,SRC 执行的操作:(DST)<-(DST)-(SRC)-CF .DEC 减1指令 格式: DEC OPR 执行的操作:(OPR)<-(OPR)-1 .NEG 求补指令 格式: NEG OPR 执行的操作:(OPR)<- -(OPR) .CMP 比较指令 格式: CMP OPR1,OPR2 执行的操作:(OPR1)-(OPR2) 该指令与 SUB指令一样执行减法操作,但不保存结果,只是根据结果设置条件标志西半 球. 3.乘法指令 MUL(UnsignedMultiple)无符号数乘法 IMUL(Signed Multiple)带符号数乘法 .MUL 无符号数乘法指令 格式: MUL SRC 执行的操作: 字节操作数:(AX)<-(AL)*(SRC) 字操作数:(DX,AX)<-(AX)*(SRC) .IMUL 带符号数乘法指令 格式: IMUL SRC 执行的操作:与MUL相同,但必须是带符号数,而MUL是无符号数. 4.除法指令 DIV(Unsigned divide)无符号数除法 IDIV(Signed divide)带符号数除法 CBW(Convert byte to word)字节转换为字 CWD(Contert word to double word)字转换为双字 .DIV 无符号数除法指令 格式: DIV SRC 执行的操作: 字节操作:(AL)<-(AX)/(SRC)的商 (AH)<-(AX)/(SRC)的余数 字操作: (AX)<-(DX,AX)/(SRC)的商 (AX)<-(DX,AX)/(SRC)的余数 .IDIV 带符号数除法指令 格式: DIV SRC 执行的操作:与 DIV相同,但操作数必须是带符号数,商和余数也均为带符号数,且余数的符号 与被除数的符号相同. .CBW 字节转换为字指令 格式: CBW 执行的操作:AL的 内容 财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容 符号扩展到 AH.即如果(AL)的最高有效位为0,则(AH)=00;如(AL)的最 高有效位为1,则(AH)=0FFH .CWD 字转换为双字指令 格式: CWD 执行的操作 :AX 的内容符号扩展到 DX.即如 (AX)的最高有效位为 0,则 (DX)=0;否则 (DX)=0FFFFH. 这两条指令都不影响条件码. 三、逻辑指令 1.逻辑运算指令 AND(and) 逻辑与 OR(or) 逻辑或 NOT(not) 逻辑非 XOR(exclusive or)异或 TEST(test) 测试 .AND 逻辑与指令 格式: AND DST,SRC 执行的操作:(DST)<-(DST)^(SRC) .OR 逻辑或指令 格式: OR DST,SRC 执行的操作:(DST)<-(DST)V(SRC) .NOT 逻辑非指令 格式: NOT OPR 执行的操作:(OPR)<-(OPR) .XOR 异或指令 格式: XOR DST,SRC 执行的操作:(DST)<-(DST)V(SRC) .TEST 测试指令 格式: TEST OPR1,OPR2 执行的操作:(DST)^(SRC) 两个操作数相与的结果不保存,只根据其特征置条件码 2.移位指令 SHL(shift logical left) 逻辑左移 SAL(shift arithmetic left) 算术左移 SHR(shift logical right) 逻辑右移 SAR(shift arithmetic right) 算术右移 ROL(Rotate left) 循环左移 ROR(Rotate right) 循环右移 RCL(Rotate left through carry) 带进位循环左移 RCR(Rotate right through carry) 带进位循环右移 格式: SHL OPR,CNT(其余的类似) 其中 OPR可以是除立即数以外的任何寻址方式.移位次数由 CNT决定,CNT可以是1或 CL. 循环移位指令可以改变操作数中所有位的位置;移位指令则常常用来做乘以2除以2操作. 其中算术移位指令适用于带符号数运算,SAL用来乘2,SAR用来除以2;而逻辑移位指令则用 来无符号数运算,SHL用来乘2,SHR用来除以2. 四、串处理指令 1.与 REP相配合工作的MOVS,STOS和 LODS指令 .REP重复串操作直到(CX)=0为上 格式: REP string primitive 其中 String Primitive可为MOVS,LODS或 STOS指令 执行的操作: 1)如(CX)=0则退出 REP,否则往下执行. 2)(CX)<-(CX)-1 3)执行其中的串操作 4)重复1)~3) .MOVS 串传送指令 格式:可有三种 MOVS DST,SRC MOVSB(字节) MOVSW(字) 其中第二、三种格式明确地注明是传送字节或字,第一种格式则应在操作数中表明是字还是 字节操作,例如: MOVS ES:BYTE PTR[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时用- 该指令不影响条件码. .CLD(Clear direction flag)该指令使 DF=0,在执行串操作指令时可使地址自动增量; .STD(Set direction flag)该指令使 DF=1,在执行串操作指令时可使地址自动减量. .STOS 存入串指令 格式: STOS DST STOSB(字节) STOSW(字) 执行的操作: 字节操作:((DI))<-(AL),(DI)<-(DI)+-1 字操作: ((DI))<-(AX),(DI)<-(DI)+-2 该指令把 AL或 AX的内容存入由(DI)指定的附加段的某单元中,并根据 DF的值及数据类型 修改 DI的内容,当它与 REP联用时,可把 AL或 AX的内容存入一个长度为(CX)的缓冲区中. .LODS 从串取指令 格式: LODS SRC LODSB LODSW 执行的操作: 字节操作:(AL)<-((SI)),(SI)<-(SI)+-1 字操作: (AX)<-((SI)),(SI)<-(SI)+-2 该指令把由(SI)指定的数据段中某单元的内容送到 AL或 AX中,并根据方向标志及数据类型 修改 SI的内容.指令允许使用段跨越前缀来指定非数据段的存储区.该指令也不影响条件码. 一般说来,该指令不和 REP联用.有时缓冲区中的一串字符需要逐次取出来测试时 ,可使 用本指令. 2.与 REPE/REPZ和 REPNZ/REPNE联合工作的 CMPS和 SCAS指令 .REPE/REPZ 当相等/为零时重复串操作 格式: REPE(或 REPZ) String Primitive 其中 String Primitive可为 CMPS或 SCAS指令. 执行的操作: 1)如(CX)=0或 ZF=0(即某次比较的结果两个操作数不等)时退出,否则往下执行 2)(CX)<-(CX)-1 3)执行其后的串指令 4)重复1)~3) .REPNE/REPNZ 当不相等/不为零时重复串操作 格式: REPNE(或 REPNZ) String Primitive 其中 String Primitive可为 CMPS或 SCAS指令 执行的操作: 除退出条件(CX=0)或 ZF=1外,其他操作与 REPE完全相同. .CMPS 串比较指令 格式: CMP SRC,DST CMPSB CMPSW 执行的操作: 1)((SI))-((DI)) 2)字节操作:(SI)<-(SI)+-1,(DI)<-(DI)+-1 字操作: (SI)<-(SI)+-2,(DI)<-(DI)+-2 指令把由(SI)指向的数据段中的一个字(或字节)与由(DI)指向的附加段中的一个字(或字节) 相减,但不保存结果,只根据结果设置条件码,指令的其它特性和MOVS指令的规定相同. .SCAS 串扫描指令 格式: SCAS DST SCASB SCASW 执行的操作: 字节操作:(AL)-((DI)),(DI)<-(DI)+-1 字操作: (AL)-((DI)),(DI)<-(DI)+-2 该指令把 AL(或 AX)的内容与由(DI)指定的在附加段中的一个字节(或字)进行比较,并不保存 结果,只根据结果置条件码.指令的其他特性和MOVS的规定相同. 五、控制转移指令 1.无条件转移指令 .JMP(jmp) 跳转指令 1)段内直接短转移 格式:JMP SHORT OPR 执行的操作:(IP)<-(IP)+8位位移量 2)段内直接近转移 格式:JMP NEAR PTROPR 执行的操作:(IP)<-(IP)+16位位移量 3)段内间接转移 格式:JMP WORDPTR OPR 执行的操作:(IP)<-(EA) 4)段间直接(远)转移 格式:JMP FAR PTROPR 执行的操作:(IP)<-OPR的段内偏移地址 (CS)<-OPR所在段的段地址 5)段间间接转移 格式:JMP DWORDPTR OPR 执行的操作:(IP)<-(EA) (CS)<-(EA+2) 2.条件转移指令 1)根据单个条件标志的设置情况转移 .JZ(或 JE)(Jump if zero,or equal) 结果为零(或相等)则转移 格式:JE(或 JZ) OPR 测试条件:ZF=1 .JNZ(或 JNE)(Jump if not zero,or not equal) 结果不为零(或不相等)则转移 格式:JNZ(或 JNE) OPR 测试条件:ZF=0 .JS(Jump if sign) 结果为负则转移 格式: JS OPR 测试条件:SF=1 .JNS(Jump if not sign) 结果为正则转移 格式:JNS OPR 测试条件:SF=0 .JO(Jump if overflow) 溢出则转移 格式: JO OPR 测试条件:OF=1 .JNO(Jump if not overflow) 不溢出则转移 格式: JNO OPR 测试条件:OF=0 .JP(或 JPE)(Jump if parity,or parity even) 奇偶位为1则转移 格式: JP OPR 测试条件:PF=1 .JNP(或 JPO)(Jump if not parity,or parity odd) 奇偶位为0则转移 格式: JNP(或 JPO) OPR 测试条件:PF=0 .JB(或 JNAE,JC)(Jump if below,or not above or equal,or carry) 低于,或者不高于或等于,或进位 位为1则转移 格式:JB(或 JNAE,JC) OPR 测试条件:CF=1 .JNB(或 JAE,JNC)(Jump if not below,or above or equal,or not carry) 不低于,或者高于或者等于, 或进位位为0则转移 格式:JNB(或 JAE,JNC) OPR 测试条件:CF=0 2)比较两个无符号数,并根据比较的结果转移 .JB(或 JNAE,JC) 格式:同上 .JNB(或 JAE,JNC) 格式:同上 .JBE(或 JNA)(Jump if below or equal,or not above) 低于或等于,或不高于则转移 格式:JBE(或 JNA) OPR 测试条件:CFVZF=1 .JNBE(或 JA)(Jump if not below or equal,or above) 不低于或等于,或者高于则转移 格式:JNBE(或 JA) OPR 测试条件:CFVZF=0 3)比较两个带符号数,并根据比较的结果转移 .JL(或 LNGE)(Jump if less,or not greater or equal) 小于,或者不大于或者等于则转移 格式:JL(或 JNGE) OPR 测试条件:SFVOF=1 .JNL(或 JGE)(Jump if not less,or greater or equal)不小于,或者大于或者等于则转移 格式:JNL(或 JGE) OPR 测试条件:SFVOF=0 .JLE(或 JNG)(Jump if less or equal,or not greater) 小于或等于,或者不大于则转移 格式:JLE(或 JNG) OPR 测试条件:(SFVOF)VZF=1 .JNLE(或 JG)(Jump if not less or equal,or greater) 不小于或等于,或者大于则转移 格式:JNLE(或 JG) OPR 测试条件:(SFVOF)VZF=0 4)测试 CX的值为0则转移指令 .JCXZ(Jump if CX register is zero) CX寄存器的内容为零则转移 格式:JCXZ OPR 测试条件:(CX)=0 注:条件转移全为8位短跳! 3.循环指令 .LOOP 循环指令 格式: LOOP OPR 测试条件:(CX)<>0 .LOOPZ/LOOPE 当为零或相等时循环指令 格式: LOOPZ(或 LOOPE) OPR 测试条件:(CX)<>0且 ZF=1 .LOOPNZ/LOOPNE 当不为零或不相等时循环指令 格式: LOOPNZ(或 LOOPNE) OPR 测试条件:(CX)<>0且 ZF=0 这三条指令的步骤是: 1)(CX)<-(CX)-1 2)检查是否满足测试条件,如满足则(IP)<-(IP)+D8的符号扩充. 4.子程序 .CALL调用指令 .RET返回指令 5.中断 .INT指令 格式: INT TYPE 或 INT 执行的操作:(SP)<-(SP)-2 ((SP)+1,(SP))<-(PSW) (SP)<-(SP)-2 ((SP)+1,(SP))<-(CS) (SP)<-(SP)-2 ((SP)+1,(SP))<-(IP) (IP)<-(TYPE*4) (CS)<-(TYPE*4+2) .INTO 若溢出则中断 执行的操作:若 OF=1则: (SP)<-(SP)-2 ((SP)+1,(SP))<-(PSW) (SP)<-(SP)-2 ((SP)+1,(SP))<-(CS) (SP)<-(SP)-2 ((SP)+1,(SP))<-(IP) (IP)<-(10H) (CS)<-(12H) .IRET 从中断返回指令 格式: IRET 执行的操作:(IP)<-((SP)+1,(SP)) (SP)<-(SP)+2 (CS)<-((SP)+1,(SP)) (SP)<-(SP)+2 (PSW)<-((SP)+1,(SP)) (SP)<-(SP)+2 六、处理机控制指令 1.标志处理指令 .CLC进位位置0指令(Clear carry)CF<-0 .CMC进位位求反指令(Complement carry)CF<-CF .STC进位位置1指令(Set carry)CF<-1 .CLD方向标志置0指令(Clear direction)DF<-0 .STD方向标志置1指令(Set direction)DF<-1 .CLI中断标志置0指令(Clear interrupt)IF<-0 .STI中断标志置1指令(Set interrupt)IF<-0 2.其他处理机控制指令 NOP(No Opreation) 无操作 HLT(Halt) 停机 WAIT(Wait) 等待 ESC(Escape) 换码 LOCK(Lock) 封锁 这些指令可以控制处理机状态.这们都不影响条件码. .NOP 无操作指令 该指令不执行任何操作,其机器码占有一个字节,在调试程序时往往用这条指令占有一定 的存储单元,以便在正式运行时用其他指令取代. .HLT停机指令 该指令可使机器暂停工作,使处理机处于停机状态以便等待一次外部中断到来,中断结束 后可继续执行下面的程序. .WAIT等待指令 该指令使处理机处于空转状态,它也可以用来等待外部中断的发生,但中断结束后仍返回 WAIT指令继续德行. .ESC换码指令 格式 ESC mem 其中 mem指出一个存储单元,ESC指令把该存储单元的内容送到数据总线去.当然 ESC指令 不允许使用立即数和寄存器寻址方式.这条指令在使用协处理机(Coprocessor)执行某些操作 时,可从存储器指得指令或操作数.协处理机(如8087)则是为了提高速度而可以选配的硬件. .LOCK封锁指令 该指令是一种前缀,它可与其他指令联合,用来维持总线的锁存信号直到与其联合的指令 执行完为止.当 CPU与其他处理机协同工作时,该指令可避免破坏有用信息.
本文档为【常用8086汇编指令(彩色版)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_441774
暂无简介~
格式:pdf
大小:185KB
软件:PDF阅读器
页数:11
分类:互联网
上传时间:2011-11-16
浏览量:26