《汇编语言指令集锦.pdf》由会员分享,可在线阅读,更多相关《汇编语言指令集锦.pdf(14页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、微处理器指令汇总-11.4.221 微处理器指令汇总数据传送类指令通用数据传送指令MOV OPRD1,OPRD2;OPRD1 OPRD2/*r 表示通用寄存器组中之一个寄存器*/功能:把源操作数送给目的操作数语法:MOV 目的操作数,源操作数格式:MOV r1,r2 MOV r,m MOV m,r MOV r,data 注意:OPRD1,OPRD2 不能同时为内存操作数;CS 和 IP 不能做目的操作数;所有的 MOV 指令都不改变标志位。交换指令XCHG 功能:交换两个操作数的数据语法:XCHG 格式:XCHG r1,r2 XCHG r,m 堆栈操作以及标志寄存器传送指令PUSH,POP 功
2、能:把操作数压入或取出堆栈语法:PUSH 操作数POP 操作数格式:PUSH r PUSH m PUSH data POP r POP m PUSHF,POPF,PUSHA,POPA 功能:堆栈指令群格式:PUSHF POPF PUSHA POPA LAHF(Load AH from Flags):将 FR 中的低 8 位送到 AH 中。SAHF SAHF(Store AH into Flags):与 LAHF 相反,将AHFR 中的低 8 位。PUSHF(PUSH Flags)将 FR 压入堆栈。POPF(POP Flags)将栈顶内容弹出给FR。功能:标志寄存器内容的传送与弹出格式:LAH
3、F SAHF PUSHF POPF 微处理器指令汇总-11.4.222 地址传送指令LEA,LDS,LES 功能:取地址至寄存器语法:LEA reg,src;src代表地址偏移量(16 位)。LDS reg,mem;(DW)将 mem 中的字装入到指定的reg 中,跟在内存单元字后面的mem 单元中的字装入到DS 中。LES reg,mem;(DW)将上述指令的DS 换为 ES 即可。累加器专用传送指令表格查找XLAT(XLATB)/*ac表示累加器(若是8 位则为 AL 寄存器,16 位则为 AX 寄存器)*/功能:查表指令/*DX 和 port 指定 I/O 端口的地址*/BX为表格起点,
4、AL 为索引值;从DS:BX+AL 中取一个字节送给AL。语法:XLAT XLAT m 输入指令IN ac,DXIN ac,port输出指令OUT DX,acOUT port,ac微处理器指令汇总-11.4.223 算术运算类指令注:1.算术运算中的带符号数均用补码表示。2.16 进制运算为逢十六进一。ADD,ADC(with carry)ADD OPRD1,OPRD2;OPRD1 OPRD1+OPRD2 ADC OPRD1,OPRD2;OPRD1 OPRD1+OPRD2+CF 功能:加法指令语法:ADD OP1,OP2 ADC OP1,OP2 格式:ADD r1,r2 ADD r,m ADD
5、 m,r ADD r,data 影响标志:C,P,A,Z,S,O SUB,SBB(with borrow)SUB OPRD1,OPRD2;OPRD1 OPRD1-OPRD2 SBB OPRD1,OPRD2;OPRD1 OPRD1-OPRD2-CF 功能:减法指令语法:SUB OP1,OP2 SBB OP1,OP2 格式:SUB r1,r2 SUB r,m SUB m,r SUB r,data SUB m,data 影响标志:C,P,A,Z,S,O INC,DEC DECreg/mem;(B/W);reg/memreg/mem-1 INC OPRD;(8 位或 16 位 REG,MEM 内容);
6、reg/memreg/mem+1 功能:把 OP 的值加一或减一语法:INC OP DEC OP 格式:INC r/m DEC r/m 影响标志:P,A,Z,S,O,不改变 CF 标志。注意:段寄存器 不能 用此指令加一或减一。NEG NEG reg/mem;reg/mem0-reg/mem 功能:将OPRD的符号反相(取二进制补码),通过 0 减去指定操作数来完成2 进制的补码操作语法:NEG OPRD格式:NEG r/m 影响标志:C,P,A,Z,S,O MUL,IMUL MUL reg/mem;(B/W)该指令只影响CF 与 OF,当乘积的高一半为0,则 OF=CF=0;否则 CF=OF
7、=1.IMUL reg/mem;微处理器指令汇总-11.4.224 与 MUL 相似,只是两操作数是符号数。若OF=CF=0,则表示 AH 或 DX 中不是 00 就是 FF,为积的低一半符号位的扩展。若OF=CF=1,表示 AH(orDX)内容是积的有效数字部分。功能:乘法指令语法:MUL OPRDIMUL OPRD格式:MUL r/m IMUL r/m DIV,IDIV 功能:除法指令语法:DIV mem/reg 商余DX|AX mem/reg(32 位 16 位)AXDXAXmem/reg(16 位 8 位)ALAH标志 ZSAPCO不确定。IDIV mem/reg 商范围:8 位:-1
8、28(80H)+127(7FH)16 位:-32768(8000H)+32767(7FFFH)若超出了这个范围,则会作为除数为0 的情况来处理,即产生一个0 号中断(不是按常规使OF=1)。若 8 位 8 位,或 1616 时,被除数AH 与 DX做符号扩展。格式:DIV r/m IDIV r/m CBW,CWD 功能:有符号数扩展指令语法:CBW 将 AL 之符号扩展到AH 中若 AL 80H,则 CBW 后,AH 00;若 AL80H,则 CBW 后,AH FFH;此指令不影响标志位。CWD 扩展 AX 之符号到DX 中若 AXy;若x-y,CF=1,xy;SF=0,OF=0,则 xy;即
9、若 SF OF=0,则 xy。若 x-y 后,SF=1,OF=0或 SF=0,OF=1,即若 SF OF=1 则 xy。微处理器指令汇总-11.4.226 逻辑运算指令集双操作数逻辑指令注:1.这四条指令执行后,标志CF=0,OF=0,标志 SF,ZF,PF,根据逻辑操作结果置位,标志AF 未定义。2.这四条指令允许8 位或 16 位操作。AND,OR,XOR,TEST 功能:执行 BIT 与 BIT 之间的逻辑运算语法:AND r/m,r/m/data OR r/m,r/m/data XOR r/m,r/m/data TEST r/m,r/m/data 注:1.某一个操作数,自身和自身相“与
10、”,操作数不变,但可使CF标志清零。2.某一个操作数,自身和自身相“或”,操作数不变,但可使CF标志清零。3.某一个操作数,自身和自身相“异或”,操作数清零,且可使CF标志清零。这可用来使寄存器或内存单元初值置零。4.TEST指令完成 AND指令相同操作,但该指令不改变两操作数的值,结果只反映在标志位上。影响标志:C,O,P,Z,S(其中 C 与 O 两个标志会被设为0)单操作数逻辑指令求反指令NOT(B/W)功能:将指定寄存器或储存单元的内容求反。语法:求反指令NOT reg/mem(B/W)注:对标志位无影响,不允许跟立即数。移位指令注:这四条指令可进行8 位或 16 位操作,每次可以只移
11、一位,也可以由寄存器CL 的值规定所移位数。SHR,SHL,SAR,SAL 功能:移位指令语法:SHR r/m,1/CLSHL r/m,1/CLSAR r/m,1/CLSAL r/m,1/CL SAL(Shift Arithmetic Left)SHL(Shift Logic Left)这两条指令在物理上完全相同,在移位次数为1 时,若移位后,结果的最高位与 CF 不相等,则OF=1.这用来表示移位以后的符号位与移位前是否相同。标志位 SF,ZF,PF 根据移位结果置位,AF 未定义。SAR(Shift Arithmetic Right)SAR 每执行一次,操作数右移一位,最低位移至CF,但保
12、持符号位不变。指令影响标志位CF,ZF,PF,而 SF,OF 不改变。SHR(Shift Logic Right)SHR 指令每执行一次,也使操作数右移一位,最低位移至CF,最高位补零。当移位次数为1 时,若移位之后,结果的最高位与次高位不同,则OF=1.注:只有SAR不改变 SF和 OF.微处理器指令汇总-11.4.227 循环移位指令注:这四条指令只影响CF 与 OF。ROR,ROL,RCR,RCL 功能:循环移位指令语法:ROR r/m,1/CL ROL r/m,1/CL RCR r/m,1/CL RCL r/m,1/CL ROL(Rotate Left)当循环移位位数为1 时,若循环移
13、位后结果的最高位不等于CF,则 OF=1.ROR(Rotate Right)当循环移位位数为1 时,若循环移位后结果的最高位不等于次高位,则OF=1.RCL(Rotate through CF Left)当循环移位位数为1 时,若循环移位后结果的最高位不等于CF,则 OF=1.RCR(Rotate through CF Right)当循环移位位数为1 时,若循环移位后结果的最高位不等于次高位,则OF=1.注:二进制左移一位,相当于原数乘2,右移一位相当于原数除2.微处理器指令汇总-11.4.228 程序流程控制指令集无条件转移指令JMP 功能:跳往指定地址执行语法:JMP addr/disp/
14、disp16/mem/reg 与 CALL一样,可用NEAR 或 FAR表示段内或段间转移。但JMP不要求返回,且对标志位无影响。条件转移指令注:这些指令对标志位无影响,转移的位移量为-128(80H)+127(7FH)。条件转移指令归纳起来可分为两类:a.根据单个标志的条件转移指令;b.根据若干标志位的逻辑组合的转移指令。JXX(xx 为条件)功能:当特定条件成立则跳往指定地址执行语法:JXX 地址注:xx 的内容既跳转的条件如下:N:NOT(相反条件),需和其它符号配合使用E:EQUAL,当 ZF=1时成立CF与 ZF 同时为 1 无意义。若干标志位逻辑组合的条件转移指令判断无符号数的大小
15、A:ABOVE,当 CF=0,ZF=0 时成立,CF OR ZF=0.B:BELOW,当 CF=1时成立 NA:NOT ABOVE,当 CF XOR ZF=1时成立注:A=N(BE),BE=NA.判断带符号数的大小G:GREATER(大于),当 ZF=0 且 SF OF=0时成立NG:NOT GREATER(不大于),当 ZF=1或 SF OF=1时成立 L:LESS(小于),当 ZF=0且 SF OF=1时成立 NL:NOT LESS(不小于),当 ZF=1或 SF OF=0时成立注:G=NLE,GE=NL,L=NGE,LE=NG.根据单个标志位的条件转移指令 O:OVERFLOW,OF=1
16、 时成立 NO:NOT OVERFLOW,OF=0 时成立 C:CARRY,当 CF=1时成立 NC:NOT CARRY,当 CF=0时成立注:C=NAE=B,NC=NB=AE.微处理器指令汇总-11.4.229 P:PARITY,PF=1时成立 PE:PARITY EVEN,PF=1时成立 NP:NOT PARITY,PF=0时成立 PO:PARITY ODD,PF=0 时成立注:P=PE,NP=PO.S:SIGN,SF=1时成立 NS:NOT SIGN,SF=0时成立 Z:ZERO,ZF=1时成立 NZ:NOT ZERO,ZF=0 时成立注:Z=E,NZ=NE.调用指令格式:CALL ad
17、dr;直接给出调用地址;CALL disp16;直接给出调用地址16 位偏移量;CALL reg/mem;通过 reg 或 mem 给出地址;返回指令格式:RET;段内返回,栈针SP+2;RETF;段间返回,栈针SP+4;RET disp16 ;SP+2 之后再加 disp16;RETF disp16;SP+4 之后再加 disp16;可允许用户废除一些在执行CALL之前入栈的参数。循环指令注:循环控制指令共有4 条,这些指令在循环的头部或尾部确定是否进行循环,范围为+127-128 之间,对完成串操作十分有用。这些指令对标志位无影响。1.LOOP disp;CX CX-1,若 CX 0,则转
18、至目标地址;在使用LOOP之前,需把循环次数置于CX中。2.LOOPE/LOOPZ disp;CX CX-1,若 CX 0 且 ZF=1则转至目标地址。3.LOOPNE/LOOPNZ disp;CX CX-1,若 CX 0 且 ZF=0则转至目标地址。4.JCXZ disp;JCXZ(Jump if CX register is Zero)当 CX=0时,转移到该循环以外的指令,即跳出该循环;CX 0 则不转移。为了能跳出循环,只要在开始处置CX=0即可,该指令不改变CX的值。中断控制指令1.软中断指令:INT n(INTerrupt)n 为中断矢量号,n 可以是 0 255(00 FF)类型
19、号,n4(地址)中存放着中断服务入口地址IP 值,n4+2 中存放着中断服务入口地址的CS值,有了中断服务程序的入口地址,就可以转入中断服务程序。微处理器指令汇总-11.4.2210 该指令执行如下操作:?将 FR压入堆栈;?清除 IF 和 TF标志,即置IF=TF=0;?将断点地址CS压入栈内;?将中断服务程序入口地址的代码段地址装入CS中(从内存地址 n 4+2中取内容);?将断点地址IP 压入栈内;?将中断服务程序入口地址的偏移量装入IP 中(从内存地址 n 4 中取内容)。2.INTO(INTerrupt on Overflow)该指令可写在一条算术运算指令的后面,若算术运算结果产生溢
20、出,即OF=1,则 INTO启动一个中断过程。INTO 的中断向量号为4.例如:INT 4 (INTO)n4=16D=10H,n4+2=18D=12H,则 00010H,00011H存放 IP 值,00012H,00013H存放 CS值。3.中断返回指令:IRET(Interrupt RETurn)从中断返回,中断服务程序的最后一条指令是IRET;把栈中的断点地址CS:IP 及 FR弹出送到CS,IP和 FR,返回中断时的断点处。该指令对所有标志位都有影响。微处理器指令汇总-11.4.2211 字符串操作指令集8086CPU 有 5 种字符串操作指令:MOVS,LODS,STOS,CMPS,S
21、CAS 先介绍一下它们的共性:全部为 1 字节指令;用 SI 寻址源操作数(默认段为DS);用 DI 寻址目的操作数(默认段为ES);用 CX做计数器;地址修改取决于DF,若 DF=0,则地址增量(加1 或 2),DF=1,则地址减量(减1 或 2);串操作指令的前面可以加上重复操作前缀REP,于是指令重复执行,直到CX的操作次数满足要求为止。字符串传送(MOVe String)MOVS,MOVSB,MOVSW 功能:字符串传送指令语法:MOVS MOVSB MOVSW 标志位:无影响字符串比较(CoMPare String)CMPSB,CMPSW,CMPS 功能:字符串比较指令语法:CMPS
22、B CMPSW CMPS CMPSB/CMPSW;SI-DI,置 FR,存储单元的内容均不变。可用来检查两个字符串(数据块)是否相等。1.若找相等的字符,加前缀 REPE或 REPZ,可解释为“当块未结束(CX 0)且字符是相等的(ZF=1),继续比较。”2.若找不等的字符,加前缀 REPNE 或 REPNZ,则可解释为“串未结束(CX0)且字符不等(ZF=0),继续比较。”标志位:C,P,Z,S,O 字符串搜索(SCAn String)SCASB,SCASW,SCAS 功能:字符串搜索指令语法:SCASB SCASW SCAS AL/(AX)-ES:DI,改变 FR,在数据块中找KEY(关键
23、字)。不改变目的串元素及累加器的值。DI 的值同时修改,是增是减决定于DF 标志。1.可加重复前缀 REPE/REPZ,“当串未结束(CX 0)且串元素等于搜索值(ZF=1),继续搜索。”2.也可加重复前缀 REPNE/REPNZ,,“当串未结束(CX 0)且 ZF=0,继续搜索。”标志位:C,P,Z,S,O 字符串装入与填充(LoaD/STOre String)LODSB,LODSW,STOSB,STOSW 功能:字符串载入或存贮指令语法:LODSB LODSW STOSB STOSW 微处理器指令汇总-11.4.2212 LODSB/LODSW;AL/AXDS:SI 并修改 SI。该指令对
24、标志位无影响。使用 REP没意义(可用来统计正、负、0 的个数,大小写字母等)。STOSB/STOSW;AL/AX ES:DI并修改 DI。DI 的增减取决于DF标志位,该指令对标志位无影响。可加 REP,在内存中填充一串相同的数据,如清 0。标志位:无影响字符串重复操作前缀REP,REPE,REPZ,REPNE,REPNZ 功能:重复前缀指令集微处理器指令汇总-11.4.2213 CPU 控制指令集标志位操作指令(Flag Operations)注:下述 7 条指令均为1 字节指令,除了对指定的标志进行操作外,对其他标志位无影响。?进位标志清0:CLC(CLear Carry flag);C
25、F0;?进位标志置1:STC(SeT Carry flag);CF 1;?进位标志取反:CM C(Co M ple m ent Carry flag);CF CF;(complement)?方向标志清0:CLD(CLear Direction flag);DF0;?方向标志置1:STD(SeT Direction flag);DF1;?中断标志清0:CLI(Clear Interrupt flag);IF 0(禁止、屏蔽INTR 线上的中断);?进位标志置1:STI(SeT Interrupt flag);IF1(允许 INTR线上中断)空操作NOP(No-OPeration)此指令使 CPU
26、不进行任何操作,等待 4 个 T(一个机器周期)。用于精确定时或在源程序中插入指令。处理器暂停HLT(processor HaLT)使 CPU进入暂停状态,CPU不进行任何操作,也不影响 FR。当 CPU处于 HLT时,只有下面三种情况之一发生时,CPU才能脱离暂停状态:1.在 RESET线上有复位信号;2.在 NMI上有请求(当没有总线请求时);3.在 IF=1 时,INTR线上有请求。处理器等待WAIT(processor WAIT)与 8087 配合使用。该指令用于等待8087 协处理器的运行结果。处理器交权ESC(processor ESCape)ESC mem;将指定的存储单元内容送
27、到数据BUS上,使其它外部处理器共享8086 的程序与数据。总线锁定前缀LOCK(LOCK bus during next instruction)LOCK指令是一条 一字节的前缀,可放在任何指令前面。其功能是在下一条指令执行时锁定总线,使别的主设备暂时不能控制BUS。低电平的LOCK信号一直要持续到下一条指令执行完。微处理器指令汇总-11.4.2214 各标志位的缩写与原文?OV:OVerflow NV:Non-oVerflow OF?DN:DowN UP:UP DF?EI:Enable Interrupt DI:Disable Interrupt IF?NG:NeGative PL:Plus SF?ZR:ZeRo NZ:Non-Zero ZF?AC:Accessory Carry NA:Non-Accessory AF?PE:Parity Even PO:Parity Odd PF?CY:CarrY NC:Non-Carry CF
限制150内