汇编语言指令学习之逻辑运算

汇编语言的逻辑运算也是我们通常所说的:非、与、或、异或等

(1)否操作指令

指令格式如下:

NOT OPRD

操作后的结果:OPRD各位取反,操作数可以是通用寄存器,可以是存储单元,但是不能是立即数对标志位没有影响。

 

(2)逻辑与操作(and)

指令格式如下:

AND OPRD1,OPRD2

操作的结果如下:

按位进行“与”操作,执行指令后,CF = 0,OF = 0,标志位PF,ZF,SF反映运算结果,标志位AF未定义。某个操作数自己与自己相“与”,则值不变,但是可以是进位标志CF清0

 

该指令的主要作用是使操作数中的某些为保持不变,其它为清零

保持不变的位和"1"与,清零的位和“0”与

 

(3)逻辑或操作(or)

指令格式如下:

OR OPRD1,OPRD2

操作的结果如下:

操作数按位进行“或”操作,指令执行后:CF=0,OF=0,标志PF/ZF/SF反映运算结果,标志位AF未定义

该指令的作用主要是:保证某些位不变,某些为设置位1,保持不变的为和“0”做或运算,设置为1的位和“1”做或运算。

 

(4)异或运算指令

指令格式如下:

XOR OPRD1,OPRD2,

异或执行的规则如下:

XOR 0,0 = 0 

XOR 0,1 = 1

XOR 1,0 = 1

XOR 1,1 = 0

通过上面的分析可以看到,如果某一位与“0”进行异或操作则会保持不变,如果与“1”进行异或操作则刚好取反,所以进行XOR操作的作用搞好是这样的,保持某些位不变,某些为取反。

对标志寄存器的影响:CF=0,OF=0标志位PF,ZF,SF反映运算结果,标志为AF未定义。

如果一个操作数XOR A,A,则A会被置0,CF=OF=0,ZF=1,PF=1,SF=0

这个操作也是经常被使用的。

 

(5)测试指令

TEST OPRD1,OPRD2

这条指令和AND操作的指令执行相同,但是不会把执行的结果放在OPRD1中,该条指令的作用是判断操作数OPRD1中是否由某些位为1,然后根据ZF的结果进行相关的操作,主要是可以和跳转指令一起执行进行条件的跳转。

对于一些操作可能需要取反后才可以进行正确的判断,根据上下文来进行分析。

 

 

根据移位运算和逻辑运算我们实现如下的一个功能

怎么样把双字同时进行右移四位

AX = 9876H,BX=5432H,则AXBX为双字98765432H,则移位后的结果是87654320H

MOV CL,4

MOV DL,BH (DL=54H)

SHL BX,CL  (BX=4320H)

SHL AX,CL (AX=8760H)

SHR DL,CL (DL=05H)

OR  AL,DL (AL = 65)

最后操作的结果87654320H,完成了相关的移位和合并等操作

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值