逻辑运算与位移指令
一,逻辑运算指令
实现与、或、非、异或、测试等逻辑运算。
操作数的搭配关系同算术运算。
除逻辑“非”指令不影响标志外,其他逻辑运算指-令均影响标志SF、ZF和PF,而OF和CF一定被置0,AF不确定。
功能 | 助记符格式 | 功能 |
---|---|---|
逻辑“与” | AND d,s | 用于某些位清0 |
逻辑"或" | OR d,s | 用于某些位置1 |
逻辑"异或" | XOR d,s | 用于某些位取反 |
逻辑"非" | NOT d | 取反 |
测试 | TEST d,s | (d)︿(s) |
或许对测试指令不熟悉,下面着重说一下TEST 指令:
格式:TEST d,s
功能:(d)︿(s)
说明:将目的操作数d 与源操作数s 按位相“与”,只影响标志位不回送结果,常用于测试某些位是0或1。
ZF(零标志位) 用来反映运算结果是否为0,如果运算结果为0,则ZF=1,否则ZF=0例:测试AL的最高位是0/1 ?
TEST AL,80H
若SF=1,则AL最高位为1;
若SF=0,则AL最高位为0;
//SF(符号标志位)来反映运算结果正负的符号位,运算结果为正数时,SF=0,否则SF=1。
若ZF=1,则AL最高位为0;
若ZF=0,则AL最高位为1;
//ZF(零标志位) 用来反映运算结果是否为0,如果运算结果为0,则ZF=1,否则ZF=0
二,位移运算指令
1,逻辑左移指令 SHL
格式:SHL d,count
功能:逻辑左移
说明:将目的操作数d 左移count 位,右边补0,左边入CF。
逻辑左移1位相当于无符号数乘以2 !
若将BX 乘以 3 该如何实现呢?
MOV AX,BX
SHL BX,1
ADD BX,AX
2,逻辑右移指令 SHR
格式:SHR d,count
功能:逻辑右移
说明:将目的操作数d 右移count 位,左边补0,右边入CF
逻辑右移1位相当于无符号数除以2 !
3、算术左移指令 SAL
格式:SAL d,count
功能:同逻辑左移完全相同
4、算术右移指令SAR
格式:SAR d,count
功能:算术右移
说明:将操作数d的内容右移,左边不变,右边移入CF中
算术右移1位相当于有符号数除以2 !
5、循环左移指令ROL
格式:ROL d,count
功能:循环左移
说明:将操作数d 的内容左移,最高位循环移入最低位,同时移入CF
6、循环右移指令ROR
格式: ROR d,count
功能:循环右移
说明:将操作数d 的内容右移,最低位循环移入最高位,同时移入CF