8086逻辑运算和移位

来源:互联网 发布:如何优化前端页面 编辑:程序博客网 时间:2024/06/13 16:34

一、逻辑运算指令AND/OR/NOT/XOR/TEST(与,或,非,异或,测试)

①与,或,非,异或

这边大家都知道,这里不在重复,举几个例子:

AND AX,1000H        ;AX中的16位数和1000H相与,结果送到AX中。

OR AX,00F0H         ;AX中的值与00f0相或,结果在AX中

NOT AL                   ;AL中的内容求反码,结果在AL中

XOR AL,0FH            ;AL和0fh相异或,结果在AL中


②测试TEST

测试指令执行AND指令操作,把OF,和CF标志清0,修改SF,ZF和PF标志,TEST指令不会送操作结果,而仅仅影响标志

TEST AL,01           ;如AL的最低位为1,则ZF=0,否则ZF=1


注意:

①在程序设计中,用AND指令对指定位清0

②OR指令对指定位置置1

③NOT指令常用来将某个数据取反码,再加上1便得到补码

④XOR常用来取反某位,0变为1,1变为0

⑤TEST指令用来检测指定位是1还是0


二、移位指令SAL/SAR/SHL/SHR/ROL/ROR/RCL/RCR

1)非循环移位指令SAL/SAR/SHL/SHR

算术移位指令SAL,SAR     (A:算术)

逻辑移位指令SHL,SHR     (H:逻辑)



注意:逻辑移位指令执行时,实际上是把操作数看成无符号数进行移位,所以,右移时最高位添0,;算术移位指令执行时,则将操作数看成有符号数进行移位,所以,右移时保持最高位的值不变,这里的最高位就是符号位。

所有移位指令执行时,都会影响标志位CF,OF,PF,SF,ZF.

所有移出的位都会在符号位里面


2)循环移位指令ROL/ROR/RCL/RCR

循环分小循环和大循环,

小循环就是不带进位的循环:ROL/ROR



大循环就是带进位的循环:RCL/RCR



循环移位指令影响CF和OF标志。
按照移入的位设置进位标志CF
进行1次移位后,如果移位前的操作数最高位与移位后操作数的最高位不同(有变化),则OF=1;否则OF=0。

0 0
原创粉丝点击