汇编语言常用指令大全.doc

上传人:ng****60 文档编号:3164779 上传时间:2019-05-23 格式:DOC 页数:11 大小:91.50KB
下载 相关 举报
汇编语言常用指令大全.doc_第1页
第1页 / 共11页
汇编语言常用指令大全.doc_第2页
第2页 / 共11页
汇编语言常用指令大全.doc_第3页
第3页 / 共11页
汇编语言常用指令大全.doc_第4页
第4页 / 共11页
汇编语言常用指令大全.doc_第5页
第5页 / 共11页
点击查看更多>>
资源描述

1、MOV 指令为双操作数指令,两个操作数中必须有一个是寄存器.MOV DST , SRC / Byte / Word执行操作: dst = src1.目的数可以是通用寄存器, 存储单元和段寄存器(但不允许用 CS 段寄存器).2.立即数不能直接送段寄存器3.不允许在两个存储单元直接传送数据4.不允许在两个段寄存器间直接传送信息PUSH 入栈指令及 POP 出栈指令: 堆栈操作是以“后进先出”的方式进行数据操作.PUSH SRC /Word入栈的操作数除不允许用立即数外,可以为通用寄存器,段寄存器(全部) 和存储器.入栈时高位字节先入栈,低位字节后入栈.POP DST /Word出栈操作数除不允许

2、用立即数和 CS 段寄存器外, 可以为通用寄存器, 段寄存器和存储器.执行 POP SS 指令后,堆栈区在存储区的位置要改变.执行 POP SP 指令后,栈顶的位置要改变.XCHG(eXCHanG)交换指令 : 将两操作数值交换.XCHG OPR1, OPR2 /Byte/Word执行操作: Tmp=OPR1 OPR1=OPR2 OPR2=Tmp1.必须有一个操作数是在寄存器中2.不能与段寄存器交换数据3.存储器与存储器之间不能交换数据.XLAT(TRANSLATE)换码指令: 把一种代码转换为另一种代码 .XLAT (OPR 可选) /Byte执行操作: AL=(BX+AL)指令执行时只使用

3、预先已存入 BX 中的表格首地址, 执行后,AL 中内容则是所要转换的代码.LEA(Load Effective Address) 有效地址传送寄存器指令LEA REG , SRC /指令把源操作数 SRC 的有效地址送到指定的寄存器中 .执行操作: REG = EAsrc注: SRC 只能是各种寻址方式的存储器操作数 ,REG 只能是 16 位寄存器MOV BX , OFFSET OPER_ONE 等价于 LEA BX , OPER_ONEMOV SP , BX /将 BX 间接寻址的相继的二个存储单元的内容送入 SP 中LEA SP , BX /将 BX 的内容作为存储器有效地址送入 SP

4、 中LDS(Load DS with pointer)指针送寄存器和 DS 指令LDS REG , SRC /常指定 SI 寄存器。执行操作: REG=(SRC), DS=(SRC+2) /将 SRC 指出的前二个存储单元的内容送入指令中指定的寄存器中,后二个存储单元送入 DS 段寄存器中。LES (Load ES with pointer) 指针送寄存器和 ES 指令LES REG , SRC /常指定 DI 寄存器执行操作: REG=(SRC) , ES=(SRC+2) /与 LDS 大致相同,不同之处是将 ES 代替 DS而已.LAHF ( Load AH with Flags ) 标志

5、位送 AH 指令LAHF /将 PSW 寄存器中的低 8 位的状态标志(条件码)送入 AH 的相应位, SF 送 D7位, ZF 送 D6 位.执行操作: AH=PSW 的低位字节。SAHF ( Store AH into Flags ) AH 送标志寄存器指令SAHF /将 AH 寄存器的相应位送到 PSW 寄存器的低 8 位的相应位, AH 的 D7 位送SF, D6 位送 ZF.执行操作: PSW 的低位字节=AH 。PUSHF ( PUSH the Flags) 标志进栈指令PUSHF /将标志寄存器的值压入堆栈顶部, 同时栈指针 SP 值减 2执行操作: SP=SP-1,(SP)=P

6、SW 的高 8 位, SP=SP-1, (SP)=PSW 的低 8 位POPF ( POP the Flags ) 标志出栈指令POPF /与 PUSHF 相反, 从堆栈的顶部弹出两个字节送到 PSW 寄存器中, 同时堆栈指针值加 2执行操作: PSW 低 8 位=(SP), SP=SP+1, PSW 高 8 位=(SP) , SP=SP+1输入输出指令(IN,OUT) :只限于使用累加器 AX 或 AL 与外部设备的端口传送信息.IN (INput)输入指令:信息从 I/O 通过累加器传送到 CPUIN AL , PORT /直接的字节输入,PORT 是外设端口编号(即端口地址),只能取 0

7、0H 0FFH 共 256 个端口地址.IN AX , PORT /直接的字输入,AX 存储连续两个端口地址 PORT+1,PORTIN AL , DX /间接的字节输入 ,端口地址范围可通过 DX 设置为 0000H 0FFFFH 共65536 个端口地址IN AX , DX /间接的字输入OUT( OUTput)输出指令 :信息从 CPU 通过累加器传送到 I/OOUT PORT , AL /直接的字节输出,PORT 规定与 IN 指令相同.OUT PORT , AXOUT DX , AL /间接的字节输出OUT DX , AXMOV AL,05H OUT 27H, AL /将字节 05H

8、 传送到地址 27H 的端口ADD(ADD)加法指令ADD DST , SRC /Byte/Word执行操作: dst=dst+src1.两个存储器操作数不能通过 ADD 指令直接相加, 即 DST 和 SRC 必须有一个是通用寄存器操作数.2.段寄存器不能作为 SRC 和 DST.3.影响标志位 Auxiliary Crray Flag ,Carry Flag, Overflow Flag, Parity Flag, Sign Flag 和 Zero Flag ,如下所示:CF 根据最高有效位是否有进 (借)位设置的:有进( 借) 位时 CF=1, 无进(借)位时 CF=0.OF 根据操作数

9、的符号及其变化来设置的:若两个操作数的符号相同,而结果的符号与之相反时 OF=1, 否则为 0.ZF 根据结果来设置:不等于 0 时 ZF=0, 等于 0 时 ZF=1SF 根据结果的最高位来设置:最高位为 0, 则 SF=0.AF 根据相加时 D3 是否向 D4 进(借) 位来设置:有进(借) 位时 AF=1, 无进(借)位时AF=0PF 根据结果的 1 的个数时否为奇数来设置:1 的个数为奇数时 PF=0, 为偶数时PF=1ADC( ADd with Carry)带进位加法指令ADC DST , SRC /Byte/Word执行操作: dst=dst+src+CF /与 ADD 不同之处是

10、还要加上进位标志位的值.INC ( INCrement) 加 1 指令INC OPR /Byte/Word执行操作: OPR=OPR+11.OPR 可以是寄存器和存储器操作数, 但不能是立即数和段寄存器2.影响标志位 OF,SF,ZF,PF 和 AF,不影响 CF.SUB ( SUBtract ) 不带借位的减法指令SUB DST , SRC /Byte/Word执行操作:dst=dst - src1.DST 和 SRC 寻址方式及规定与 ADD 相同.2.影响全部标志位.( 判断标志位参见 ADD)SBB ( SuBtract with Borrow) 带借位减法指令SBB DST , SR

11、C /Byte/Word执行操作:dst= dst - src - CFDEC ( DECrement ) 减 1 指令DEC OPR /Byte/Word执行操作:OPR = OPR - 1 /除 CF 标志位, 其余标志位都受影响 .NEG ( NEGate ) 求补指令NEG OPR执行操作:opr = 0- opr /将操作数按位求反后末位加 1.CMP ( CoMPare ) 比较指令CMP OPR1 , OPR2执行操作:OPR1 - OPR2 /与 SUB 指令一样执行运算, 但不保存结果.比较情况 无符号数 有符号数A=B ZF=1 ZF=1AB CF=0 & ZF=0 SFO

12、F=0 & ZF=0A=B CF=0 | ZF=1 SFOF=0 | ZF=1A AX= AL *src /字节运算时目的操作数用 AL, 乘积放在 AX 中Word = DX=AX *src /字运算时目的操作数用 AX, DX 存放乘积的高位字, AX 放乘积的低位字1.目的数必须是累加器 AX 或 AL,指令中不需写出2. 源操作数 SRC 可以是通用寄存器和各种寻址方式的存储器操作数, 而绝对不允许是立即数或段寄存器.IMUL (sIgned MULtiple) 有符号数乘法指令IMUL SRC /与 MUL 指令相同 ,但必须是带符号数DIV ( unsigned DIVide) 无

13、符号数除法指令DIV SRC /Byte/Word 其中: SRC 的规定同乘法指令 MUL执行操作:Byte = AX / src /字节运算时目的操作数在 AX 中,结果的商在 AL 中 ,余数在 AH 中Word= DX,AX /src /字运算时目的操作数在 DX 高位字和 AX 低位字中,结果的商在AX 中 ,余数在 DX 中存储器操作数必须指明数据类型:BYTE PTR src 或 WORD PTR srcIDIV (sIgned DIVied) 有符号数除法指令IDIV SRC /Byte/Word 与 DIV 指令相同,但必须是带符号数CBW (Convert Byte to

14、Word) 字节转换为字指令CBW执行操作: AL 中的符号位(D7)扩展到 8 位 AH 中,若 AL 中的 D7=0,则 AH=00H,若 AL中的 D7=1,则 AH=FFH.CWD (Convert Word to Double word) 字转换为双字指令CWD执行操作: AX 中的符号位(D15) 扩展到 16 位 DX 中, 若 AX 中的 D15=0,则DX=0000H,若 AX 中的 D15=1,则 DX=FFFFH十进制调整指令当计算机进行计算时,必须先把十进制数转换为 二进制数, 再进行二进制数运算,最后将结果又转换为十进制数输出.在计算机中,可用 4 位二进制数表示一位

15、十进制数, 这种代码称为 BCD ( Binary Coded Decimal ).BCD 码又称 8421 码,在 PC 机中,BCD 码可用压缩的 BCD 码和非压缩的 BCD 码两种格式表示.压缩的 BCD 码用 4 位二进制数表示一个十制数, 整个十进数形式为一个顺序的以 4 位为一组的数串.非压缩的 BCD 码以 8 位为一组表示一个十进制数,8 位中的低 4 位表示 8421 的 BCD码,而高 4 位则没有意义.压缩的 BCD 码调整指令DAA (Decimal Adjust for Addition) 加法的十进制调整指令DAA执行操作:执行之前必须先执行 ADD 或 ADC

16、指令, 加法指令必须把两个压缩的 BCD 码相加,并把结果存话在 AL 寄存器中 .DAS (Decimal Adjust for Subtraction) 减法的十进制调整指令DAS执行操作:执行之前必须先执行 SUB 或 SBB 指令,减法指令必须把两个压缩的 BCD 码相减,并氢结果存放在 AL 寄存器中 .非压缩的 BCD 码调整指令AAA (ASCII Adjust for Addition) 加法的 ASCII 调整指令AAA执行操作:执行之前必须先执行 ADD 或 ADC 指令, 加法指令必须把两个非压缩的 BCD码相加,并把结果存话在 AL 寄存器中 .AAS (ASCII A

17、djust for Subtraction) 减法的 ASCII 调整指令AAS执行操作:执行之前必须先执行 SUB 或 SBB 指令,减法指令必须把两个非压缩的 BCD码相减,并氢结果存放在 AL 寄存器中 .MOVS ( MOVe String) 串传送指令MOVB /字节串传送 DF=0, SI = SI + 1 , DI = DI + 1 ;DF = 1 , SI = SI - 1 , DI = DI - 1MOVW /字串传送 DF=0, SI = SI + 2 , DI = DI + 2 ;DF = 1 , SI = SI - 2 , DI = DI - 2执行操作:DI = SI

18、 ,将位于 DS 段的由 SI 所指出的存储单元的字节或字传送到位于ES 段的由 DI 所指出的存储单元, 再修改 SI 和 DI, 从而指向下一个元素.在执行该指令之前,必须预置 SI 和 DI 的初值,用 STD 或 CLD 设置 DF 值.MOVS DST , SRC /同上, 不常用,DST 和 SRC 只是用来用类型检查,并不允许使用其它寻址方式来确定操作数.1.目的串必须在附加段中, 即必须是 ES:DI2.源串允许使用段跨越前缀来修饰, 但偏移地址必须是SI.STOS (STOre into String) 存入串指令STOS DSTSTOSB /存放字节串 ( DI ) = A

19、LSTOSW /存放字串 ( DI ) = AX执行品作:把 AL 或 AX 中的内容存放由 DI 指定的附加段的字节或字单元中,并根据DF 值修改及数据类型修改 DI 的内容.1.在执行该指令之前,必须把要存入的数据预先存入 AX 或 AL 中, 必须预置 DI 的初值.2.DI 所指向的存储单元只能在附加段中, 即必须是 ES:DILODS ( LOaD from String ) 从串取指令LODS SRCLODSB /从字节串取 AL=(SI)LODSW /从字串取 AX= (SI1) (SI)执行操作:把由 SI 指定的数据段中字节或字单元的内容送入 AL 或 AX 中,并根据 DF

20、值及数据类型修改 SI 的内容 .1.在执行该指令之前,要取的数据必须在存储器中预先定义( 用 DB 或 DW),必须预置 SI的初值.2.源串允许使用段超越前缀来改变数据存储的段区.REP (REPeat)重复操作前缀REP String Primitive /其中:String Primitive 可为 MOVS,STOS 或 LODS 指令执行操作:使 REP 前缀后的串指令重复执行,每执行一次 CX=CX-1,直至 CX=0 时退出 REP.方向标志设置CLD (CLear Direction flag) 清除方向标志指令CLD执行操作:令 DF=0, 其后 SI,DI执行增量操作ST

21、D (SeT Direction flag) 设置方向标志指令STD执行操作:令 DF=1, 其后 SI,DI执行减量操作CMPS (CoMPare String) 串比较指令CMPS SRC , DSTCMPSB /字节串比较 (SI)-(DI)CMPSW /字串比较 (SI+1)(SI) - (DI+1)(DI)执行操作:把由 SI 指向的数据段中的一个字节或字与由 DI 指向的附加段中的一个字节或字相减,不保留结果,只根据结果置标志位.SCAS (SCAn String ) 串扫描指令SCAS DSTSCASBSCASW执行操作:把 AX 或 AL 的内容与由 DI 指向的在附加段中的一

22、个字节或字相减,不保留结果,根据结果置标志位.AND, OR , XOR 和 TEST 都是双字节操作指令, 操作数的寻址方式的规定与算术运算指令相同.NOT 是单字节操作指令, 不允许使用立即数.逻辑运算均是按位进行操作,真值表如下:AND (位与&) OR ( 位或| ) XOR ( 位异或 )1 & 1 = 1 1 | 1 = 1 1 1 = 01 & 0 = 0 1 | 0 = 1 1 0 = 10 & 1 = 0 0 | 1 = 1 0 1 = 10 & 0 = 0 0 | 0 = 0 0 0 = 0A:逻辑运算指令AND (and) 逻辑与指令AND DST , SRC /Byte

23、/Word执行操作:dst = dst & src1.AND 指令执行后 ,将使 CF=0,OF=0,AF 位无定义, 指令执行结果影响 SF,ZF 和 PF 标志位.2.AND 指令典型用法 A:用于屏蔽某些位, 即使某些位为 0.屏蔽 AL 的高 4 位:即将高 4 位和 0000B 相与, 低 4 位和 1111B 相与MOV AL , 39H /AL= 0011 1001B39HADD AL , 0FH / AL= 0000 1001B09H 即 0011 1001B39H & 0000 1111B0FH = 0000 1001B09H3.AND 指令典型用法 B:取出某一位的值(见

24、TEST)OR (or) 逻辑或指令OR DST , SRC /Byte/Word执行操作:dst = dst | src1.OR 指令执行后,将使 CF=0, OF=0, AF 位无定义,指令执行结果影响 SF, ZF 和 PF 标志位.2.常用于将某些位置 1.将 AL 的第 5 位置 1:MOV AL , 4AH / AL=0100 1010B4AHOR AL , 10H / AL=0101 1010B5AH 即 0100 1010B4AH | 0001 0000B10H =0101 1010B 5AHXOR (eXclusive OR) 逻辑异或指令XOR DST , SRC /Byt

25、e/Word执行操作:dst = dst src1.XOR 指令常用于使某个操作数清零,同时使 CF=0,清除进位标志.2.XOR 指令使某些位维持不变则与 0 相异或,若要使某些位取反则与 1相异或.将 AL 的高 4 位维持不变,低 4 位取反:MOV AL, B8H /AL=1011 1000BB8HXOR AL, 0FH /AL=1011 0111BB7H 即 1011 1000BB8H 0000 11110FH=1011 0111BB7H测试某一个操作数是否与另一确定操作数相等:XOR AX , 042EHJZ . /如果 AX=042EH, 则 ZF=TRUE(1), 执行 JZ.

26、NOT (not) 逻辑非指令NOT OPR /Byte/Word执行操作:opr = opr / 01100101 65H =10011010 9AH1.操作数不能使用立即数或段寄存器操作数, 可使用通用寄存器和各种方式寻址的存储器操作数.2.NOT 指令不影响任何标志位。将 AL 各位取反:MOV AL,65H /AL=0110 0101B65HNOT AL /AL=1001 1010B9AH 即 0110 0101B65H=1001 1010B9AHTEST (test) 指令TEST OPR1 , OPR2 /Byte/Word执行操作:opr1 & opr21.两个操作数相与的结果不

27、保存, 结果影响标志位 PF,SF 和 ZF,使 CF=0, OF=0,而 AF位无定义.2.TEST 指令常用于在不改变原有的操作数的情况下,检测某一位或某几位的条件是否满足.只要令用来测试的操作数对应检测位为 1,其余位为 0,相与后判断零标志 ZF 值的真假.检测某位是否为 1:令用来测试的操作数对应检测位为 1,其余位为 0,TEST 指令后, 若该位为 1 则 JNZ.TEST AL , 0000 00001B /测试 AL 最低位是否为 1: 令用来测试的操作数对应检测位为 1,其余位为 0,执行 TEST 指令JNZ THER /最低位若为 1, 则 ZF=FALSE(0), 执

28、行 JNZ THER, 否则执行下一条指令.或者:先对操作数求反,令用来测试的操作数对应检测位为 1,其余位为 0,TEST 指令后,若该位为 1 则 JZ.MOV DL , AL /将 AL 传送到 DL,主要是不要影响 AL 的值. 以下测试 AL 的 b2 位是否为 1NOT DL /先对操作数求反TEST 0000 0100B /令用来测试的操作数对应检测位为 1,其余位为 0,执行 TEST 指令JZ THER /若 AL 的 b2 位为 1,则 ZF=TRUE(1), 执行 JZ THERB:移位指令所有的移位指令都影响标志位 CF、OF 、PF 、SF 和 ZF、AF 无定义.非

29、循环逻辑移位:把操作数看成无符数来进行移位.SHL ( SHift logical Left )逻辑左移指令SHL OPR , CNT /Byte/Word执行操作:使 OPR 左移 CNT 位, 并使最低 CNT 位为全 0.1.OPR 操作数不能使用立即数或段寄存器操作数,可使用通用寄存器和各种方式寻址的存储器操作数.2.移位次数由 CNT 决定.每次将 OPR 的最高位移出并移到 CF,最低位补 0.MOV CL , 7 /若移位多次 , 先预置移位次数 CLSHL DX , CL /CNT 可取 1 或 CL 寄存器操作数SHR (SHift logical Right) 逻辑右移指令

30、SHR OPR , CNT /Byte/Word同 SHL,每次将 OPR 的最低位 D0 移出并移到 CF.最高位补 0.非循环算术移位:将操作数看成有符号数来进行移位.SAL (Shift Arithmetic Left) 算术左移指令SAL OPR , CNT /Byte/WordSAL 指令与 SHL 指令完全相同SAR(Shift Arithmetic Right) 算术右移指令SAR OPR , CNT /Byte/WordSAR 指令每次移位时, 将最高位移入次高位的同时最高位值不变 ,最低位 D0 移出并移到 CF.循环移位指令ROL ( ROtate Left) 循环左移指令

31、ROL OPR , CNT /Byte/Word每次移位时,最高位移出并同时移到 CF 和最低位 D0.ROR (ROtate Right)循环右移指令ROR OPR,CNT /Byte/Word每次移位时,最低位 D0 移出并同时移到 CF 和最高位.带进位循环移位指令RCL (Rotate Left through Carry)带进位循环左移指令RCL OPR,CNT /Byte/WordRCR (Rotate Right through Carry)带进位循环右移指令RCR OPR ,CNT /Byte/Word处理器控制指令CLC (CLear Carry) 进位位置 0 指令CLC

32、/执行操作后,CF=0CMC (CoMplement Carry) 进位位求反指令CMC /执行操作后 ,CF=!CFSTC (SeT Carry) 进位位置 1 指令STC /执行操作后,CF=1NOP (No Operetion) 无操作指令NOP /此指令不执行任何操作,其机器码占一个字节单元HLT (HaLT) 停机指令HLT执行操作后,使机器暂停工作 ,使处理器 CPU 处于停机状态, 以等待一次外部中断到来,中断结束后,程序继续执行,CPU 继续工作.JMP ( JuMP ) 无条件转移指令名称 格式 执行操作段内直接短跳转 JMP SHORT OPR IP=IP+8 位偏移量段内

33、直接近转移 JMP NEAR PTR OPR IP=IP+16 位偏移量段内间接转移 JMP WORD PTR OPR IP=(EA)段间直接转移 JMP FAR PTR OPR IP=OPR 偏移地址, CS=OPR 段地址段间间接转移 JMP DWORD PTR OPR IP=(EA),CS=(EA+2)1.无条件转移到指定的地址去执行从该地址开始的指令.2.段内转移是指在同一代码段的范围内进行转移, 只需改变 IP 寄存器内容.3.段间转移则要转移到另一个代码段执行程序, 此时要改变 IP 寄存器和 CS 段寄存器的内容.条件转移指令:根据上一条指令所设置的条件码(标志位) 来判断测试条

34、件.根据五个标志位:ZF、SF、OF 、 PF、 CF 的两种状态(0 FALSE 或 1 TRUE)产生10 种测试条件.Name Flag Flag = TRUE 1 Flag =FALSE 0Zero Falg ZF JE/JZ OPR /结果为零转移 JNE/JNZ OPR /结果不为零转移Sign Falg SF JS OPR /结果为负转移 JNS OPR /结果为正转移Overflow Flag OF JO OPR /溢出转移 JNO OPR /不溢出转移Parity Flag PF JP/JPE OPR /结果为偶转移 JNP/JPO OPR /结果为奇转移Carry Flag CF JC OPR /有进位转移 JNC OPR /无进位转移两个数比较:情况 指令 满足条件 指令 满足条件A B JA CF=0 & ZF=0 JG SFOF=0 & ZF=0测试 CX 转移指令JCXZ OPR /CX=0 时转移LOOP(LOOP) 循环指令LOOP OPR 测试条件:CX 0 /OPR 在程序中实际是个标号LOOPZ OPR 测试条件:ZF = 1 & CX 0LOOPNZ OPR 测试条件:ZF = 0 & CX 0执行操作: 先执行 CX=CX-1,再检测上面的测试条件,如满足则 IP=IP+符号扩展的 D8,不满足则退出循环.

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 实用文档资料库 > 策划方案

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。