汇编语言学习04:位操作类指令

目录

一、逻辑运算类指令

逻辑与指令AND

逻辑或指令OR

逻辑异或指令XOR

逻辑非指令NOT

测试指令TEST

二、移位指令

逻辑移位指令

算术移位指令

三、循环移位指令

总结


如名字所示,为操作类指令对二进制数的各类进行操作,包括逻辑运算指令和移位指令。

一、逻辑运算类指令

8086汇编语言的逻辑运算类指令主要包括常见的逻辑指令AND,OR,NOT,XOR和一个测试指令TEST。

逻辑与指令AND

操作:对两个操作数执行按位的逻辑与计算,逻辑与的结果送目的操作数。其基本格式如下:

AND reg,imm/reg/mem
AND mem,imm/reg

AND指令常用于复位目的地址的某些位,通过将这些位与0取逻辑与运算得到。例如,在标志寄存器的某些标志操作一节所提到的栈操作。

寻址方式:和其他双操作数的寻址方式一样,目的操作数不能是立即数,而且两个操作数不能同时为存储器寻址。

标志影响:双操作数的逻辑指令统一设置OF=CF=0,根据实际结果设置SF,ZF和PF,但是对AF无定义。

逻辑或指令OR

操作:对两个操作数执行按位的逻辑或计算,逻辑与的结果送目的操作数。其基本格式如下:

OR reg,imm/reg/mem
OR mem,imm/reg

OR指令和AND指令相对,常用来置位目的地址的某些位。

寻址方式:和AND指令相同。

标志影响:和AND指令相同。

逻辑异或指令XOR

操作:对两个操作数执行按位的逻辑异或计算,逻辑与的结果送目的操作数。其基本格式如下:

XOR reg,imm/reg/mem
XOR mem,imm/reg

XOR指令常用来求反某些位,通过将需要求反的位与1异或,不需要求反的与0异或。

寻址方式:和AND指令相同。

标志影响:和AND指令相同。

逻辑非指令NOT

操作:对操作数的所有位按位取反。其基本格式如下:

NOT reg/mem

寻址方式:不可以是立即数寻址。

标志影响:无。

测试指令TEST

操作:对两个操作数执行按位的逻辑与运算,但是结果不返回目的操作数,只根据结果设置一些状态标志。TEST标志后方一般跟随一些条件转移指令(下一节),利用测试条件转向不同的程序段。

寻址方式:与AND相同。

标志影响:与AND相同。

下面是一个使用TEST指令的例子。

TEST AL,01H    ;测试AL的最低位D0
JNZ  there        ;若ZF=0,程序转移到there
...        ;ZF=1,程序顺序执行
there:         ;

二、移位指令

移位指令分为逻辑移位指令和算术移位指令,每一种又分别具有左移和右移两种操作。

逻辑移位指令

操作:左(右)移动位,最低(高)位补0。其基本格式如下:

SHL reg/mem,1/cl        ;左移1或者cl位
SHR reg/mem,1/cl        ;右移1或者cl位

当移位位数大于1时,使用CL寄存器表示,该操作数表达为CL。

寻址方式:和其他单操作数指令相同,不可以是立即数寻址。

标志影响:被移除的最高(低)位进入CF,并且根据移位后的结果影响SF,ZF,PF,但是对AF没有定义。如果只移动1位时,根据最高位符号位的改变情况设定OF。

算术移位指令

操作:左(右)移动位,左移时,最低位补0;右移时,最高位不变。其基本格式如下:

SAL reg/mem,1/cl        ;和SHL有相同作用
SAR reg/mem,1/cl        ;执行右移,但是最高位不变

算术右移指令SAR执行一位移位,相当于有符号数除以2.

注意,当操作数为负且最低位有1移出时,SAR指令产生的结果与等效的IDIV指令的结果不同。例如,-5(FBH)经过SAR右移移位等于-3(FDH)而IDIV执行的结果为-2.

三、循环移位指令

当进行移位指令时,位于边缘的位会被移出或者计入CF;但是在循环移位指令中,从一端移出的位返回到另一端形成循环。循环移位指令分为不带进位循环移位和带进位循环移位。其基本格式如下:

ROL reg/mem,1/cl
ROR reg/mem,1/cl
RCL reg/mem,1/cl
RCR reg/mem,1/cl

前两条指令不添加CF进位。后两条指令将CF和操作数组合成9/17位进行移位。

寻址方式:和其他单操作数指令相同。

标志影响:根据指令功能设置CF,不影响SF,ZF,PF,AF标志。对OF的影响和移位指令一样。

总结

位操作类指令包含部分位的操作AND、OR、XOR以及全体位的操作指令NOT、SHL(R)、SAL(R)、ROL(R)、RCL(R)。这些指令对于标志的影响可能有时候会影响下方指令的操作,而且需要注意SAR和IDIV的区别,RO和RC指令的不同之处。在位操作中出现的独特CL寄存器也值得我们去关注其工作原理。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值