汇编学习笔记(7)--逻辑运算和移位

逻辑运算指令 and or xor not test

and dest,src;二进制与运算
;dest=dest & src of=0 cf=0
or dest,src
;dest=dest|src of=0 cf=0
xor dest,src
;dest=dest^src of=0 cf=0,异或,相同为0,不一样为1
not op
;op=~op
test dest,src
;null=dest &src
;test类似于and指令,但结果不影响dest,仅影响标志位
mov al,96h
test al,80h;zf=0,al不变,al做高位为1,与80h与之后不为0
test al,1;因为96h最低为为0,与之后为0,zf=1

移位指令shl,shr,sal,sar,rol,ror,rcl,rcr

shl dest,count;逻辑左移
对8位数左移1位,最高位进入cf,最低位补0
格式:
shl reg,1;
shl reg,cl;cl的值为移位次数
shl mem,1
shl mem,cl

shr dest,count;逻辑右移
最低为进入cf,最高位自动补0
格式同上

sal dest,count;算术左移,与shl完全相同
sar dest,count;算术右移
区别在于最高位和之前保持一直,如果之前为1,右移后补1,可以理解为保持原来的符号
rol dest,count;循环左移
最高位在进入cf的时候也移到最低位
ror dest,count;循环右移
最低为在进入cf的时候也进入最高位

rcl dest,count ;带进位循环左移
最高位进入cf,cf进入最低位
;例子,把32位数3f65c932h逻辑左移2位,结果存放在DX:AX中
mov ax,0c932h
mov dx,3f65h
mov cx,2
again:
	shl ax,1;低16位逻辑左移1位,最高位移入cf中
	rcl dx,1;高16带进位循环左移1,cf位即原低16位最高位移入高16位的最低为
	dec cx
	jnz again
	
rcr dest,count;带进位循环右移
最低位移到进位位cf中,进位位cf则移动到最高位
;例子,把32位数CA85ED7Bh逻辑右移2位,
mov ax,0ed7bh
mov dx,0ca85h
mov cx,2 
again:
	shr dx,1;高16位逻辑右移1位,,最低位移入cf
	rcr ax,1;低16位带进位右移,cf即高16位的最低位进入最高位
	dec cx
	jnz again
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值