当前位置:文档之家› 汇编语言常见指令

汇编语言常见指令

‚PTR‛操作符:强制类型转换MOV BYTE PTR [BX], 20H;1B立即数20H送DS:[BX]MOV WORD PTR [BX], 20H;立即数20H送DS:[BX],;00H送DS:[BX+1]2.LEA(Load Effective Address)设:变量X的偏移地址为1020H , (BP)=0020H执行指令后:LEA DX, XLEA BX, [BP]; 执行后, (DX) = 1020H; 执行后, (BX) = 0020H3.地址传送指令LDS,LESLDS REG16, MEM ; 从存储器取出4B,送入REG16和DS LES REG16, MEM ; 从存储器取出4B,送入REG16和ES 4.符号扩展指令CBW,CWDCBW ;将AL寄存器内容符号位扩展到AHCWD ;将AX寄存器内容符号位扩展到DX设:(AX)= 8060H,(DX)=1234H执行下列指令后CBW;(AX)= 0060H设:(AX)= 8060H,(DX)=1234H执行下列指令后CWD;(DX)= 0FFFFH,(AX)= 8060H5.交换指令XCHG例如,(AX)= 5678H执行下面指令后XCHG AH, AL;(AX)= 7856H6.换码指令XLATXLAT ;AL←DS: [BX+AL]表格的首地址事先存放在内存逻辑地址DS: BX中,AL的内容是相对于表格的位移量,把对应内存的内容取出放在AL寄存器。

7.逻辑运算符SHR(右移)SHL(左移)AND(与)OR(或)XOR(异或)NOT(取反8.关系运算符关系运算符用于两个数的比较,结果为‚真(-1)‛或‚假(0)‛GT(>)GE(>=)LT(<)LE(<=)EQ(=)NE(≠)9.地址运算符SEG 名称取地址表达式所在段的段基址OFFSET 名称取地址表达式的偏移地址10.类型操作符TYPE:取每个变量的字节数LENGTH:取变量定义了多少个SIZE:取变量占用的字节总数11.加法指令(1)ADD(Addition):加法指令格式:ADD dest,src功能:dest ←dest + srcdest(目的操作数):8/16位的寄存器/存储器操作数src(源操作数):与目的操作数同类型的寄存器/存储器/立即数例:ADD AX, SI ; AX←(AX)+(SI),16位运算ADD X, 3 ; X←(X)+3, 运算位数由X的类型确定ADD [BX], DX ; DS:[BX]←DS:[BX]+DX, 16位运算说明:•状态标志CF, OF, ZF, SF, PF, AF按照运算结果被刷新;(2)ADC(Addition with Carry):带进位的加法指令格式:ADC dest,src功能:dest←dest+src+CFdest(目的操作数):8/16位的寄存器/存储器src(源操作数):与目的操作数同类型的寄存器/存储器/立即数说明:•状态标志CF, OF, ZF, SF, PF, AF按照运算结果被刷新;•主要用于对数据分段相加时高位的加法运算。

(3)INC(Increment):加一指令格式:INC dest功能:dest←dest+1dest(目的操作数):8/16位的寄存器/存储器例:INC X;X←(X)+1,运算位数由X的类型确定INC WORD PTR [BX];DS:[ BX] ←DS:[ BX]+1,16位运算说明:•会影响标志OF, ZF, SF, PF, AF,但是CF标志不受影响;•增量指令常常用来修改计数器和存储器指针的值。

12.减法指令(1)SUB(Subtract):减法指令格式:SUB dest,src功能:dest ← dest-srcdest(目的操作数):8/16位的寄存器/存储器src(源操作数):与目的操作数同类型的寄存器/存储器/立即数例:SUB Y, 20H ;Y←(Y)-20H,运算位数由Y的类型确定 SUB WORD PTR [BP], 5;SS:[ BP] ←SS:[ BP]-5,16位运算说明:会影响CF, OF, ZF, SF, PF, AF 标志位。

(2)SBB(Subtract with Borrow):带借位的减法指令格式:SBB dest,src功能:dest←dest-src-CFdest(目的操作数):8/16位的寄存器/存储器src(源操作数):与dest同类型的寄存器/存储器/立即数说明:•会影响CF, OF, ZF, SF, PF, AF 标志位;•主要用于对一个数据分段相减时高位的减法运算(3)DEC(Decrement):减一指令格式:DEC dest功能:dest←dest-1dest(目的操作数):8/16位的寄存器/存储器例:DEC CX ;CX←(CX) -1,16位运算DEC X ;X←(X)-1,运算位数由X的类型确定说明:•会影响标志OF, ZF, SF, PF, AF,但是CF标志不受影响;•减量指令常常用来修改计数器和存储器指针的值。

(4)NEG(Negate):求补指令(求相反数)格式:NEG dest功能:dest←0-destdest(目的操作数):8/16位的寄存器/存储器例:NEG Z ;Z←-Z,运算位数由Z的类型确定说明:会影响标志OF, ZF, SF, PF, AF, CF13.乘法指令(1)MUL(Unsigned Multiplication):无符号数乘法格式:MUL srcsrc(源操作数):8位/16位的寄存器/存储器功能:8位源操作数时:AX←(AL)×源操作数16位源操作数时:DX, AX←(AX)×源操作数说明:•两个N位操作数相乘,得到2N位的乘积;•如果乘积的高N位为0,则CF=OF=0,否则CF=OF=1。

其余标志位无意义。

•上述说明中N=8或16。

(2)IMUL(Signed Integer Multiplication):有符号数乘法格式:IMUL srcsrc(源操作数):8位/16位的寄存器/存储器功能:8位源操作数时:AX←(AL)×源操作数16位源操作数时:DX, AX←(AX)×源操作数说明:●两个N位操作数相乘,得到2N位的乘积;●如果乘积高N位为低N位的符号扩展,则CF=OF=0,否则CF=OF=1,其余标志位无意义。

●上述说明中N=8或16。

14.除法指令:DIV(Unsigned Division):无符号除法格式:DIV srcsrc(源操作数):8位/16位的寄存器/存储器功能:8位源操作数时: (AX)÷源操作数,AL←商,AH←余数16位源操作数时:(DX, AX)÷源操作数,AX←商,DX←余数说明:•两个N位操作数相除,应首先把被除数零扩展为2N位;例如,要进行除法(AX)÷(BX),假设AX、BX内均为无符号数:MOV DX, 0 ;32位被除数高16位清零DIV BX ;(DX, AX)÷BX,AX←商,DX←余数•如果(2N位)÷(N位)的商大于2N-1,会产生‚除法溢出‛错误。

•上述说明中N=8或16。

IDIV(Signed Integer Division):有符号数除法格式:IDIV srcsrc(源操作数):8位/16位的寄存器/存储器功能: 8位源操作数时:(AX)÷源操作数,AL←商,AH←余数16位源操作数时:(DX, AX) ÷源操作数,AX←商,DX←余数15.基本循环指令格式:LOOP 标号功能:CX←(CX)-1如果(CX)≠ 0,转向‚标号‛处执行,否则执行下一条指令。

说明:•LOOP可以改变指令的执行次序,称为‚控制转移指令‛;•LOOP指令使一段程序重复地执行,称为‚循环‛。

•重复执行的次数由CX寄存器中的值决定。

CX寄存器因此称为‚计数器‛。

16.DEBUG.EXE常用命令⏹反汇编‘-U ’ 、‘-U 偏移地址’⏹显示寄存器内容‘-R ’ 、‘-R 寄存器名’⏹单步执行指令‘-T ’ 、‘-T 指令条数’ 、‘-P ’⏹全速执行指令‘-G ’ 、‘-G 终止地址’、‘-G=起始地址’‘-G=起始地址终止地址’⏹显示数据段内容‘-D ’ 、‘-D 起始地址’、‘-D 起始地址L字节数’⏹修改数据段内容‘-E 起始地址数据1 数据2 …’‘-F 起始地址L字节数数据1 数据2 …’⏹退出‘-Q ’17.移位指令SHL逻辑左移,最高位进入CF,最低位补0SHR 逻辑右移,最低位进入CF,最高位补0SAL 算术左移,最高位进入CF,最低位补0SAR 算术右移,最低位进入CF,最高位不变18.循环移位指令ROL 不带进位循环左移ROR 不带进位循环右移RCL 带进位循环左移RCR 带进位循环右移18.无条件转移指令∙⑴段内转移、直接寻址∙⑵段内转移、间接寻址∙⑶段间转移、直接寻址∙⑷段间转移、间接寻址JMP label⏹转到label指定的目标地址处,执行那里的指令⏹目的地址label的位置有2种情形:⏹和JMP指令在同一个段,叫做段内转移,转移时 CPU只改变IP;⏹和JMP指令不在同一个段,叫做段间转移,转移时CPU既要更改IP又要更改CS,⏹目的地址label有两种表示方式:⏹label是目标地址处指令的标号,叫做直接寻址⏹label是寄存器或内存单元,跳转目的地址在寄存器或内存中,叫做间接寻址19.比较测试指令指令操作码指令格式功能描述CMP CMP dest, src(dest) -(src),不存结果TEST TEST dest, src(dest) ∧(src),不存结果目的操作数dest:8位/16位的寄存器/存储器操作数。

源操作数src:与dest同类型的寄存器/存储器/立即数。

功能:运算后影响标志位,但不保留运算结果。

用途:•CMP——比较两个数的大小关系,但不改变它们的值。

AX?=BX•TEST ——判断目的操作数中个别二进制位,但不改变它的值。

判断一个数的奇偶性20.条件转移指令Jxx label‚J‛----Jump‚xx‛是转移的条件‚label‛只能为目标指令的标号。

都属于段内短转移。

操作码助记符条件指令功能JZ/JE ZF=1相等或为0转移JNZ/JNE ZF=0不相等或不为0转移JS SF=1结果是负数,则转移JNS SF=0结果不是负数,则转移JO OF=1结果溢出,则转移JNO OF=0结果没有溢出,则转移JP/JPE PF=1低位字节有偶数个1,则转移JNP/JPO PF=0低位字节有奇数个1,则转移JB/JNAE/JC CF=1有进借位或<,则转移JAE/JNB/JNC CF=0无进借位或≥,则转移JBE/JNA CF=1或ZF=1≤,则转移JA/JNBE CF=0且ZF=0>,则转移JL/JNGE SF≠OF<,则转移JGE/JNL SF=OF≥,则转移JLE/JNG SF≠OF或ZF=1≤ ,则转移JG/JNLE SF=OF且ZF=0>,则转移JCXZ CX=0CX=0,则转移21.调用指令CALL(Call,调用)指令•段内直接调用格式:CALL 子程序名操作:SP← SP-2, SS:[SP] ←IP(保存16位返回地址)IP ← 子程序入口的偏移地址•段内间接调用格式:CALL REG16/MEM16操作:SP← SP-2,SS:[SP] ← IP(保护16位返回地址)IP ← REG16/MEM16•段间直接调用格式:CALL FAR PTR 子程序名操作:SP← SP-2, SS:[SP]← CSSP← SP-2, SS:[SP]← IP(以上是保存32位返回地址,偏移地址保存在较小地址处)IP ← 子程序入口的偏移地址,CS← 子程序入口的段基址•段间间接调用格式:CALL MEM32操作:SP← SP-2, SS:[SP] ← CSSP← SP-2, SS:[SP] ← IPIP← [MEM32],CS←[MEM32+2](1)CALL PROC1(2)LEA CX, PROC1CALL CX(3) ADDR_PROC1 DW PROC1 ;子程序偏移地址……CALL ADDR_PROC1 ;调用近程子程序PROC1(4)LEA BX, ADDR_PROC1CALL WORD PTR [BX] ;调用近程子程序PROC122.RET指令⏹无参数段内返回格式:RET操作:IP← SS: [SP],SP ← SP+2⏹有参数段内返回格式:RET D16 ;其中D16代表16位数据操作:IP ← SS:[SP],SP← SP+2SP ← SP+D16⏹无参数段间返回格式:RET操作:IP ← SS:[SP], SP ← SP+2CS ← SS:[SP], SP ← SP+2⏹有参数段间返回格式:RET D16 ;其中D16代表16位数据操作:IP ← SS:[SP], SP← SP+2CS ← SS:[SP], SP← SP+2SP ← SP+D1623.宏指令宏定义macro_name MACRO [哑元表] ; 形参/虚参[ LOCAL 标号表 ]…… (宏定义体)……ENDM* 如果宏定义体内有一个或多个语句标号,则必须用LOCAL伪操作列出所有的语句标号。

相关主题