汇编各类指令用法及含义分析

编程语言及工具

99人已加入

描述

  什么是汇编语言

  汇编语言(assembly language)是一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。在汇编语言中,用助记符(Mnemonics)代替机器指令的操作码,用地址符号(Symbol)或标号(Label)代替指令或操作数的地址。在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令。普遍地说,特定的汇编语言和特定的机器语言指令集是一一对应的,不同平台之间不可直接移植。

  许多汇编程序为程序开发、汇编控制、辅助调试提供了额外的支持机制。有的汇编语言编程工具经常会提供宏,它们也被称为宏汇编器。

  汇编语言不像其他大多数的程序设计语言一样被广泛用于程序设计。在今天的实际应用中,它通常被应用在底层,硬件操作和高要求的程序优化的场合。驱动程序、嵌入式操作系统和实时运行程序都需要汇编语言。

  汇编语言

  数据传输指令

  一、通用数据传送指令

  1、传送指令MOV (move)

  指令的汇编格式:MOV DST,SRC

  指令的基本功能:(DST)《-(SRC) 将原操作数(字节或字)传送到目的地址。

  指令支持的寻址方式:目的操作数和源操作数不能同时用存储器寻址方式,这个限制适用于所有指令。

  指令的执行对标志位的影响:不影响标志位。指令的特殊要求:

  目的操作数DST和源操作数SRC不允许同时为段寄存器;目的操作数DST不能是CS,也不能用立即数方式。

  2、进栈指令PUSH (push onto the stack)

  出栈指令 POP (pop from the stack)

  指令的汇编格式:PUSH SRC ;POP DST

  指令的基本功能:PUSH指令在程序中常用来暂存某些数据,而POP指令又可将这些数据恢复。

  PUSH SRC (SP)《-(SP)-2 ;(SP)《-(SRC)

  POP DST (DST)《-((SP));(SP)《-(SP)

  指令支持的寻址方式:push 和 pop指令不能不能使用立即数寻址方式。

  指令对标志位的影响:PUSH 和 POP指令都不影响标志位。

  指令的特殊要求:PUSH 和 POP指令只能是字操作,因此,存取字数据后,SP的修改必须是+2 或者 -2; POP指令的DST不允许是CS寄存器;

  3、交换指令XCHG (exchange)

  指令的汇编格式:XCHG OPR1,OPR2

  指令的基本功能:(OPR1)《-》(OPR2)

  指令支持的寻址方式:一个操作数必须在寄存器中,另一个操作数可以在寄存器或存储器中。

  指令对标志位的影戏:不影响标志位。

  指令的特殊要求:不允许使用段寄存器。

  二、累加器专用传送指令

  4、输入指令IN (input)

  输出指令 OUT (output)

  指令的汇编格式:IN ac,port port《=0FFH

  IN ac,DX port》0FFH

  OUT port,ac port《=0FFH

  OUT DX,ac port》0FFH

  指令的基本功能:对8086及其后继机型的微处理机,所有I/O端口与CPU之间的通信都由输入输出指令IN和OUT来完成。IN指令将信息从I/O输入到CPU,OUT指令将信息从CPU输出到I/O端口,因此,IN和OUT指令都要指出I/O端口地址。

  IN ac,port port《=0FFH (AL)《-(port)传送字节或 (AX)《-(port+1,port)传送字

  IN ac,DX port》0FFH (AL)《-((DX))传送字节或 (AX)《-((DX)+1,(DX))传送字

  OUT port,ac port《=0FFH (port)《-(AL)传送字节或 (port+1,port)《-(AX)传送字

  OUT DX,ac port》0FFH (DX)《-(AL)传送字节或 ((DX)+1,(DX))《-(AX)传送字指令对标志位的影响:不影响标志位。

  指令的特殊要求:只限于在AL或AX与I/O端口之间传送信息。传送16位信息用AX,传送8位信息用AL,这取决于外设端口的宽度。

  5、换码指令XLAT (translate)

  指令的汇编格式:XLAT opr 或 XLAT

  指令的基本功能:这条指令根据AL寄存器提供的位移量,将BX指使的字节表格中的代码换存在

  AL中。 (AL)《-((DS)*16+(BX)+(AL))

  指令对标志位的影响:不影响标志位。

  指令的特殊要求:所建字节表格的长度不能超过256字节,因为存放位移量的是8位寄存器AL。opr为表格的首地址,因为opr所表示的偏移地址已存入BX寄存器,所以opr在换码指令中可有可无,有则提高程序的可读性。

  三、地址传送指令

  6、有效地址传送器LEA (load effective address)

  指令的汇编格式:LEA reg,src

  指令的基本功能:LEA指令把源操作数的有效地址送到指定的寄存器,这个有效地址是由src选定的一种存储器寻址方式确定的。

  指令支持的寻址方式:各种存储器寻址方式。

  指令对标志位的影响:不影响标志位。

  指令的特出要求:指令中reg不能是段寄存器;

  7、指针送寄存器和DS LDS (load DS with point)

  指针送寄存器和ES LES (load ES with point)

  指令的汇编格式:LDS reg,src LES reg,src

  指令的基本功能:LDS和LES指令把确定内存单元位置的偏移地址送寄存器,段地址DS或ES。这个偏移地址和段地址(也称地址指针)是由src指定的两个相继字单元提供的。

  LDS reg,src (reg)《-(src) (DS)《-(src+2)

  LES reg,src (reg)《-(src) (ES)《-(src+2)

  指令支持的寻址方式:src必须为存储器寻址方式

  指令对标志位的影响:不影响标志位。

  指令的特殊要求:指令中REG不能是段寄存器;

  四、标志寄存器传送指令

  8、标志寄存器的低字节送AH LAHF (load AH with FLAGS)

  指令的汇编格式:LAHF

  指令的基本功能:(AH)《-(FLAGS)0-7

  指令对标志位的影响:不影响标志位

  9、AH送标志寄存器低字节 SAHF(store AH into FLAGS)

  指令的格式:SAHF

  指令的基本功能:(FLAGS)0-7《-(AH)

  指令对标志位的影响:由装入值来确定标志位的值。

  10、标志进栈 PUSHF (push the flags)

  指令的汇编格式:PUSHF

  指令的基本功能:(SP)《-(SP)-2 ((SP)+1,(SP))《-(FLAGS)0-15

  指令对标志位的影响:不影响标志位。

  11、标志出栈 POPF (pop the FLAGES)

  指令的汇编格式:POPF

  指令的基本功能:(FLAGS)0-15《-((SP)+1,(SP)) (SP)《-(SP)+2

  指令对标志位的影响:由装入值来确定标志位的值。

  算术指令

  一、加法指令

  12、加法指令ADD (addition)

  指令的汇编格式:add dst,src

  指令的基本功能:(dst)《-(src)+(dst)

  指令支持的寻址方式:他们两个操作数不能同时为存储器寻址。即为除源操作数为立即数的情况外,源操作数和目地操作数必须有一个寄存器寻址方式。

  指令对标志位的影响:SF=1 加法结果为负数(符号位为1)

  SF=0 加法结果为正数(符号位为0)

  ZF=1 加法结果为零

  ZF=0 加法结果不为零

  CF=1 最高有效位向高位有进位

  CF=0 最高有效位向高位无进位

  OF=1 两个同符号数相加(正数+正数或负数+负数),结果符号与其相反。

  OF=0 两个不同符号数相加,或同符号数相加,结果符号与其相同。

  13、带进为加法指令ADC (add with carry)

  指令的汇编格式:ADD dst,src

  指令的基本功能:(dst)《-(src)+(dst)+CF

  指令支持的寻址方式:他们两个操作数不能同时为存储器寻址。即为除源操作数为立即数的情况外,源操作数和目地操作数必须有一个寄存器寻址方式。

  指令对标志位的影响:SF=1 加法结果为负数

  SF=0 加法结果为正数

  ZF=1 加法结果为零

  ZF=0 加法结果不为零

  CF=1 最高有效位向高位有进位

  CF=0 最低有效位相高位无进位

  OF=1 两个同符号数相加,结果符号与其相反,

  OF=0 两个同符号数相加,或同符号相加,结果符号与其相同

  14、加1指令INC (increament)

  指令的汇编格式:INC opr

  指令的基本功能:(opr)《-(opr)

  指令支持的寻址方式可以使用除立即数方式外的任何寻址方式

  指令对标志位的影响:SF=1 加法结果为负数

  SF=0 加法结果为正数

  ZF=1 加法结果为零

  ZF=0 加法结果不为零

  OF=1 两个同符号数相加,结果符号与其相反,

  OF=0 两个同符号数相加,或同符号相加,结果符号与其相同。

  二、减法指令

  15、减法指令SUB (subtract)

  指令的汇编格式:SUB dst,src

  指令的基本功能:(dst)《-(dst)-(src)

  指令支持的寻址方式:他们两个操作数不能同时为存储器寻址。即为除源操作数为立即数的情况外,源操作数和目地操作数必须有一个寄存器寻址方式。

  指令对标志位的影响:SF=1 减法结果为负数(符号位为1)

  SF=0 减法结果为正数(符号位为0)

  ZF=1 减法结果为零

  ZF=0 减法结果不为零

  CF=1 二进制减法运算中最高有效位向高位有借位(被减数小于减数,不够减的情况)

  CF=0 二进制减法运算中最高有效为向高位无借位(被减数〉=减数,够减的情况)

  OF=1 两数符号相反(正数-负数,或负数-正数),而结果符号与减数相同。

  OF=0 同符号数相减时,或不同符号数相减,其结果符号与减数不同。

  16、带借位减法指令SBB (subtract with borrow)

  指令的汇编格式:SBB dst,src

  指令的基本功能:(dst)《-(dst)-(src)-CF

  指令支持的寻址方式:他们两个操作数不能同时为存储器寻址。即为除源操作数为立即数的情况外,源操作数和目地操作数必须有一个寄存器寻址方式。

  指令对标志位的影响:SF=1 减法结果为负数(符号位为1)

  SF=0 减法结果为正数(符号位为0)

  ZF=1 减法结果为零

  ZF=0 减法结果不为零

  CF=1 二进制减法运算中最高有效位向高位有借位(被减数小于减数,不够减的情况)

  CF=0 二进制减法运算中最高有效为向高位无借位(被减数〉=减数,够减的情况)

  OF=1 两数符号相反(正数-负数,或负数-正数),而结果符号与减数相同。

  OF=0 同符号数相减时,或不同符号数相减,其结果符号与减数不同。

  17、减1指令DEC (decrement)

  指令的汇编格式:DEC opr

  指令的基本功能:(opr)《-(opr)-1

  指令支持的寻址方式:可以使用除立即数方式外的任何寻址方式。

  指令对标志位的影响:SF=1 减法结果为负数(符号位为1)

  SF=0 减法结果为正数(符号位为0)

  ZF=1 减法结果为零

  ZF=0 减法结果不为零

  OF=1 两数符号相反(正数-负数,或负数-正数),而结果符号与减数相同。

  OF=0 同符号数相减时,或不同符号数相减,其结果符号与减数不同。

  18、比较指令CMP (compare)

  指令的汇编格式:CMP opr1,opr2

  指令的基本功能:(opr1)-(opr2),根据相减结果设置条件码,但不回送结果。

  指令支持的寻址方式:他们两个操作数不能同时为存储器寻址。即为除源操作数为立即数的情况外,源操作数和目地操作数必须有一个寄存器寻址方式。

  指令对标志位的影响:

  SF=1 减法结果为负数(符号位为1)

  SF=0 减法结果为正数(符号位为0)

  ZF=1 减法结果为零

  ZF=0 减法结果不为零

  CF=1 二进制减法运算中最高有效位向高位有借位(被减数小于减数,不够减的情况)

  CF=0 二进制减法运算中最高有效为向高位无借位(被减数〉=减数,够减的情况)

  OF=1 两数符号相反(正数-负数,或负数-正数),而结果符号与减数相同。

  OF=0 同符号数相减时,或不同符号数相减,其结果符号与减数不同。

  19、求补指令NEG (negate)

  指令的汇编格式:NEG opr

  指令的基本功能:(opr)《- -(opr)

  指令支持的寻址方式:可以使用除立即数方式外的任何寻址方式。

  指令对标志位的影响:CF=1 不为0的操作数求补时

  CF=0 为0的操作数求补时

  OF=1 操作数为-128(字节运算)或操作数为-32768(字运算)

  OF=0 当求补运算的操作数不为-128(字节)或-32768(字)时三、乘法指令

  20、无符号乘法指令NUL (unsigned multiple)

  有符号乘法指令 IMUL(signed muliple)

  指令的汇编格式:NUL src IMUL src

  指令的基本功能:(AX)《-(AL)*(src) (DX,AX)《-(AX)*(src)

  指令支持的寻址方式:src可以使用除立即数方式以外的任一种寻址方式。

  指令对标志位的影响:乘法指令只影响标志位CF和OF,其他条件码位无定义。MUL指令的条件码设置为:

  CF OF=0 0 乘积的高一半为0(字节操作的(AH)或字操作的(DX))

  CF OF=1 1 乘积的高一半不为0

  IMUL指令的条件码设置为:

  CF OF=0 0 乘积的高一半为低一半的符号扩展。

  CF OF=1 1 其他情况

  指令的特殊要求:MUL和IMUL指令的区别仅在于操作数是无符号还是带符号数,它们的共同点是,指令中只给出源操作数src,目的操作数是隐含的,它只能是累加器(字运算为AX,字节运算为AL)。隐含的乘积寄存器是AX或DX(高位)和AX(低位)。

  四、符号扩展指令

  21、节扩展为字CBW (convert byte to word)

  指令的汇编格式:CBW

  指令的基本功能:(AH)=00H 当(AL)的最高有效位为0时

  (AH)=FFH 当(AL)的最高有效位为1时

  指令对标志位的影响:不影响标志位

  指令的特殊要求:这是条无操作数的指令,进行符号扩展的操作数必须存放在AL寄存器 AX寄存器中。

  22、字扩展为双字CWD (convert word to double word)

  指令的汇编格式:CWD

  指令的基本功能:(DX)=0000H 当(AX)的最高有效位为0时

  (DX)=FFFFH 当(AX)的最高有效位为1时

  指令对标志位的影响:不影响标志位

  指令的特殊要求:这是条无操作数的指令,进行符号扩展的操作数必须存放在AL寄存器或AX寄存器中。

  五、除法指令23、无符号数除法DIV (unsigned divide)

  带符号数除法 IDIV (singed divide)

  指令的汇编格式:DIV src IDIV src

  指令的基本功能:字操作

  (AL)《-(AX)/src的商 (AH)《-(AX)/src的余数字节操作

  (AX)《-(DX,AX)/src的商 (DX)《-(DX,AX)/src的余数

  指令支持的寻址方式:src作为除数,可用除立即数以外的任一种寻址方式来取得。

  指令对标志位的影响:不影响条件码。

  指令的特殊要求:除法指令要求字操作时,被除数必须为32位,除数是16位,商和余数是16位的;字节操作时,被除数必须为16位,除数是8位,得到的商和余数是8位的。

  六、十进制调整指令

  逻辑指令

  一、逻辑运算指令的格式:AND dst,src

  指令的基本功能:(dst)《-(dst)与(src)

  指令支持的寻址方式:两个操作数不能同时为存储器寻址。即为除源操作数为立即数的情况外,源操作数和目地操作数必须有一个寄存器寻址方式。

  指令对标志位的影响:指令执行后CF 和OF 置零,AF无定义。

  SF=1 指令执行后的结果为负数(符号位为1)

  SF=0 指令执行后的结果为正数(符号位为0)

  ZF=1 指令执行后的结果为零

  ZF=0 指令执行后的结果不为零

  PF=1 结果操作数中1的个数为偶数时置1

  PF=0 结果操作数中1的个数为奇数时置0

  25、逻辑或OR (logic or)

  指令的汇编格式:OR dst,src

  指令的基本功能:(dst)《-(dst)或(src)

  指令支持的寻址方式:两个操作数不能同时为存储器寻址。即为除源操作数为立即数的情况外,原操作数和目的操作数必须有一个寄存器寻址方式。

  指令对标志位的影响:令执行后CF 和OF 置零,AF无定义。

  SF=1 指令执行后的结果为负数(符号位为1)

  SF=0 指令执行后的结果为正数(符号位为0)

  ZF=1 指令执行后的结果为零

  ZF=0 指令执行后的结果不为零

  PF=1 结果操作数中1的个数为偶数时置1

  PF=0 结果操作数中1的个数为奇数时置0

  26、逻辑非NOT (logic not)

  指令的汇编格式:NOT orc

  指令的基本功能:(dst)《-(opr)

  指令支持的寻址方式:除立即数寻址方式以外的其余寻址方式

  指令对标志位的影响:对标志位无影响

  27、异或XOR (exclusice or)

  指令的汇编格式:XOR dst,src

  指令的基本功能:(dst)《-(dst)异或(src)

  指令支持的寻址方式:两个操作数不能同时为存储器寻址。即为除源操作数为立即数的情况外,原操作数和目的操作数必须有一个寄存器寻址方式。

  指令对标志位的影响:令执行后CF 和OF 置零,AF无定义。

  SF=1 指令执行后的结果为负数(符号位为1)

  SF=0 指令执行后的结果为正数(符号位为0)

  ZF=1 指令执行后的结果为零

  ZF=0 指令执行后的结果不为零

  PF=1 结果操作数中1的个数为偶数时置1

  PF=0 结果操作数中1的个数为奇数时置0

  28、测试指令TEST

  指令的汇编格式:TEST opr1,opr2

  指令的基本功能:(opr1)与(opr2)

  指令支持的寻址方式:两个操作数不能同时为存储器寻址,即为除源操作数为立即数的情况外,源操作数和目的操作数必须有一个寄存器寻址方式。

  指令对标志位的影响:令执行后CF 和OF 置零,AF无定义。

  SF=1 指令执行后的结果为负数(符号位为1)

  SF=0 指令执行后的结果为正数(符号位为0)

  ZF=1 指令执行后的结果为零

  ZF=0 指令执行后的结果不为零

  PF=1 结果操作数中1的个数为偶数时置1

  PF=0 结果操作数中1的个数为奇数时置0

  二、移位指令

  29、逻辑左移SHL (shift logical left)

  指令的汇编格式:SHL dst,cnt

  指令的基本功能:SHL指令向左逐位移动cnt次,每次逐位移动后,最低位用0来补充,最高位移入CF。

  指令支持的寻址方式:目的操作数dst可以是除立即数外的任何寻址方式。移位次数(或位数)cnt=1时,1可以直接写在指令中,cnt〉1时,cnt必须放入CL寄存器中。

  指令对标志位的影响:CF=移入的数值

  OF=1 当cnt=1时,移动后最高位的值发生变化。

  OF=0 当cnt=1时,移动时最高位的值未发生变化。

  SF、ZF、PF根据移动后的结果设置

  30、逻辑右移SHR (shift logical right)

  指令的汇编格式:SHR dst,cnt

  指令的基本功能:SHR指令向右逐位移动cnt次,每次逐位移动后,最高位用0来补充,最低位移入CF。

  指令支持的寻址方式:目的操作数dst可以是除立即数外的任何寻址方式。移位次数(或位数)cnt=1时,1可以直接写在指令中,cnt〉1时,cnt必须放入CL寄存器中。

  指令对标志位的影响:CF=移入的数值

  OF=1 当cnt=1时,移动后最高位的值发生变化。

  OF=0 当cnt=1时,移动时最高位的值未发生变化。

  SF、ZF、PF根据移动后的结果设置。

  31、算术左移SAL (shift arithmetic left)

  指令的汇编格式:SAL dst cnt

  指令的基本功能:SAL指令向左逐位移动cnt次,每次逐位移动后,最低位用0来补充,最高位移入CF。

  指令支持的寻址方式:目的操作数dst可以是除立即数外的任何寻址方式。移位次数(或位数)cnt=1时,1可以直接写在指令中,cnt〉1时,cnt必须放入CL寄存器中。

  指令对标志位的影响:CF=移入的数值

  OF=1 当cnt=1时,移动后最高位的值发生变化。

  OF=0 当cnt=1时,移动时最高位的值未发生变化。

  SF、ZF、PF根据移动后的结果设置。

  32、算术右移SAR (shift arithmetic right)

  指令的汇编格式:SAR dst,cnt

  指令的基本功能:SAR指令向右逐位移动cnt次,每次逐位移动后,最高位用符号位来补充,最低位移入CF。

  指令支持的寻址方式:目的操作数dst可以是除立即数外的任何寻址方式。移位次数(或位数)cnt=1时,1可以直接写在指令中,cnt〉1时,cnt必须放入CL寄存器中。

  指令对标志位的影响:CF=移入的数值

  OF=1 当cnt=1时,移动后最高位的值发生变化。

  OF=0 当cnt=1时,移动时最高位的值未发生变化。

  SF、ZF、PF根据移动后的结果设置。

  33、循环左移ROL (rotate left)

  指令的汇编格式:ROL dst,cnt

  指令的基本功能:ROL 对由dst指定的寄存器或存储器操作数左移循环移动cnt所指定的次数,每左移一次,把最高位同时移入CF和操作数最低位。指令支持的寻址方式:目的操作数dst可以是除立即数外的任何寻址方式。移动次数(或位数)cnt=1时,1可以直接写在指令中,cnt〉1时,cnt必须放入CL寄存器中。

  指令对标志位的影响:CF=移入的数值

  OF=1 当cnt=1时,移动后最高位的值发生变化。

  OF=0 当cnt=1时,移动时最高位的值未发生变化。

  SF、ZF、PF根据移动后的结果设置。

  34、循环右移ROR (rotate right)

  指令的汇编格式:ROR dst,cnt

  指令的基本功能:ROR 对由dst指定的寄存器或存储器操作数右移循环移动cnt所指定的次数,每右移一次,把最低位同时移入CF和操作数最高位。

  指令支持的寻址方式:目的操作数dst可以是除立即数外的任何寻址方式。移动次数(或位数)cnt=1时,1可以直接写在指令中,cnt》1时,cnt必须放入CL寄存器中。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分