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

什么是汇编语言 汇编语言(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寄存器中。

如何使无人机在飞行过程中获得最好的信号
RFID 技术帮助我们跟踪几乎任何事物
智慧城市成功的七个基础
三元体系锂电在长征系列运载火箭遥测系统首次应用 将成未来发展必然趋势
小米平板4Plus评测 能随身携带的小电视
汇编各类指令用法及含义分析
工业物联网由大量的工业系统组成,它有哪些作用
4D毫米波雷达发展到哪一步了?国内18家供应商技术盘点
电压电流控制模式介绍
浅谈超高清显示发展的四个主要趋势
Simoa核心免疫复合物捕获并密封在一个含超过20万个飞升级别小孔芯片
LED驱动电源的分类
订单能见度延长,多家科技业厂商将全力拼生产
从互联网信息爆炸,到物联网安全的“三重门”
Xilinx和IBM宣布战略合作携手加速数据中心应用
制造和生产中电池测试的三种解决方案
如何区分高频、射频电路
TRIAC 调光器(正向相位控制调光器) 的工作原理
UCC3889典型应用电路
航天宏图结合实景三维等技术优势推动乡村文化资源保护传播和发展