位操作指令 --《三十二位汇编语言程序设计》

位操作指令

逻辑运算指令

计算机中最基本的数据单位是二进制位,针对二进制位进行操作、实现位控制的指令叫做位操作指令。

  • 逻辑运算指令
  • 移位指令
  • 循环移位指定

进行一位或者若干位处理,采用位操作类指令

以下操作指令中除了NOT指令不影响标志外,其他逻辑指令均会使得OF=CF=0

ZF、SF和PF标志位还是根据运算结果设置

逻辑与指令AND

按位求与

AND reg,imm/reg/mem;reg<--reg^imm/reg/mem
AND mem,imm/reg;mem<--imm/reg

逻辑或指令OR

按位取或

操作数的类型与AND一致

逻辑非指令NOT

按位取反

NOT reg/mem;reg/mem<--reg/mem

需要注意NOT不影响状态标志位

逻辑异或指令XOR

按位异或

操作数的类型与AND一致

操作符的一些用法

AND可以用来指定某些位清零,将对应位与0相与一定为0,其他位设为1不影响其状态

OR可以用来置1,与1相或一定为1,与0相或不影响原来的状态

XOR可以用来求反,与1异或一定位原来相反的状态,与0异或不会发生改变

一个例子是可以用来转换字母的大小写:

大写 = 小写 AND DFH
小写 = 大写 OR 20H

测试指令TEST

移位指令

逻辑左移指令SHL

SHL reg/mem, 1/CL

各位同时左移,最低为补零,最高位进入CF

左边的操作数是待移位的数据,右边可以是一个数字或者CL寄存器

移位后的操作数还放在待移位数据中

逻辑右移指令SHR

操作数据类型与SHL一样

各位同时右移,最高位补零,最低位进入CF

算术左移指令SAL

SAL reg/mem, 1/CL

等同于SHL指令,而这用法效果一致

算术右移指令SAR

操作数据类型与SHL一样

各位同时右移,最高位补符号位,最低位进入CF

循环移位指令

不带进位循环左移指令ROL

ROL reg/mem,1/CL

各位同时左移,最高位循环进入最低位和CF

不带进位循环右移指令ROR

同ROL指令格式一样,最低位循环进入最高位和CF

带进位循环左移指令RCL

CF作为附加位,各位同时左移,CF进入最低位,移出的位进入CF,相当于寄存器加上CF构成了一个圈

带进位循环右移指令RCR

同RCL,不过是向右移

64位数据移位操作

逻辑右移

可以先将高三十二位逻辑右移,高位补零,低位进入CF中,然后低三十二位带进位循环右移,CF进入最高位,最低为数据进入CF,从而实现六十四位的逻辑右移

算术右移

只需要把上一步的逻辑右移改为算术右移即可

左移反转一下即可

ASCII码转BCD码

ASCII码加减30H就变为了BCD码,BCD码四位组合成为压缩BCD码

上图中先把ascii的33H移到al八位,然后与0f相与,即令高四位为0,低四位不变,现在al中是03H,然后令ascii+1即38H搞到了ah八位中,令其逻辑左移四位,低四位变为0,现在ah中为80H,最后al与ah相或结果放到al中,相或就是置位,由于两个寄存器高四位低四位分别为0,因此就是将他们合在了一起变味了83H送到了al,最后送到了bcd中

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_南明_离火_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值