教学提示
在正确理解每条指令的功能基础上,可以阅读和编写有实际意义的程序段
多多阅读程序段
位操作类指令
位操作类指令以二进制位为基本单位进行数据的操作;这是一类常用的指令,都应该特别掌握
注意这些指令对标志位的影响
1、逻辑运算指令
AND OR XOR NOT TEST
2、移位指令
SHL SHR SAR
3、循环移位指令
ROL ROR RCL RCR
逻辑与指令AND
对两个操作数执行逻辑与运算,结果送到目的操作数
AND指令设置CF = OF = 0,根据结果设置SF、ZF和PF状态,而对AF未定义
AND reg,imm/reg/mem ;reg←reg∧imm/reg/mem
AND mem,imm/reg ;mem←mem∧imm/reg
只有相“与”的两位都是1,结果才是1;否则,“与”的结果为0
AND
逻辑或指令OR
对两个操作数执行逻辑或运算,结果送到目的操作数
OR指令设置CF = OF = 0,根据结果设置SF、ZF和PF状态,而对AF未定义
OR reg,imm/reg/mem ;reg←reg∨imm/reg/mem
OR mem,imm/reg ;mem←mem∨imm/reg
只要相“或”的两位有一位是1,结果就是1;否则,结果为0
OR
逻辑异或指令XOR
对两个操作数执行逻辑异或运算,结果送到目的操作数
XOR指令设置CF = OF = 0,根据结果设置SF、ZF和PF状态,而对AF未定义
XOR reg,imm/reg/mem ;reg←reg⊕imm/reg/mem
XOR mem,imm/reg ;mem←mem⊕imm/reg
只有相“异或”的两位不相同,结果才是1;否则,结果为0
XOR
逻辑非指令NOT
对一个操作数执行逻辑非运算
NOT指令是一个单操作数指令
NOT指令不影响标志位
NOT reg/mem ;reg/mem←~reg/mem
按位取反,原来是“0”的位变为“1”;原来是“1”的位变为“0”
NOT
例题:逻辑运算
mov al,45h ;逻辑与 al=01h
and al,31h ;CF=OF=0,SF=0、ZF=0、PF=0
mov al,45h ;逻辑或 al=75h
or al,31h ;CF=OF=0,SF=0、ZF=0、PF=0
mov al,45h ;逻辑异或 al=74h
xor al,31h ;CF=OF=0,SF=0、ZF=0、PF=1
mov al,45h ;逻辑非 al=0bah
not al ;标志不变
例题:逻辑指令应用
;AND指令可用于复位某些位(同0相与),不影响其他位:将BL中D3和D0位清0,其他位不变
and bl,11110110B
;OR指令可用于置位某些位(同1相或),不影响其他位:将BL中D3和D0位置1,其他位不变
or bl, 00001001B
;XOR指令可用于求反某些位(同1相异或),不影响其他位:将BL中D3和D0位求反,其他不变
xor bl, 00001001B
测试指令TEST
对两个操作数执行逻辑与运算,结果不回送到目的操作数
AND指令设置CF = OF = 0,根据结果设置SF、ZF和PF状态,而对AF未定义
TEST reg,imm/reg/mem ;reg∧imm/reg/mem
TEST mem,imm/reg ;mem∧imm/reg
只有相“与”的两位都是1,结果才是1;否则,“与”的结果为0
TEST
:测试为0或1
test al,01h ;测试AL的最低位D0
jnz there ;标志ZF=0,即D0=1
;则程序转移到there
... ;否则ZF=1,即D0=0,顺序执行
there: ...
TEST指令通常用于检测一些条件是否满足,但又不希望改变原操作数的情况
TEST
汇编语言2-2 来自淘豆网www.taodocs.com转载请标明出处.