教学提示 在正确理解每条指令的功能 基础上,可以阅读和编写有 实际意义的程序段
教学提示 在正确理解每条指令的功能 基础上,可以阅读和编写有 实际意义的程序段
3.2.3位操作类指令 ■位操作类指令以二进制位为基本单位进行数据 的操作;这是一类常用的指令,都应该特别掌 握 ■注意这些指令对标志位的影响 1、逻辑运算指令 AND OR XOR NOT TEST 2、移位指令 SHL SHR SAR 3、循环移位指令 ROL ROR RCL RCR
3.2.3 位操作类指令 ◼ 位操作类指令以二进制位为基本单位进行数据 的操作;这是一类常用的指令,都应该特别掌 握 ◼ 注意这些指令对标志位的影响 1、逻辑运算指令 AND OR XOR NOT TEST 2、移位指令 SHL SHR SAR 3、循环移位指令 ROL ROR RCL RCR
AND 逻辑与指令AND 对两个操作数执行逻辑与运算,站果送到目的 操作数 AND reg, imm/reg/mem rege-regATmgres neH AND mem, imm/reg meme-menMeiareg 只有相“与”的两位都是1,结 果才是1;否则,“与”的结果为 0 AND指令设置CF=OF=0,根据结果设置SF ZF和P状态,而对AF未定义
逻辑与指令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 对两个操作数执行逻辑或运算,)结果送到目的 操作数 OR reg, imm/reg/mem regere vim reg mem OR mem, imm/reg ment-memVfgaeg 5只要相“或”的两位有一位是1, 结果就是1;否则,结果为0 ■OR指令设置CF=OF=0,根据结果设置SF ZF和P状态,而对AF未定义
逻辑或指令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 ■对两个操作数执行逻辑异或运算,结果送到目 的操作数 XOR reg, imm/reg/mem rege-refe iaeg/me XOR mem, imm/reg memt men areg 号只有相“异或”的两位不相同 结果才是1;否则,结果为0 ■ⅩOR指令设置CF=OF=0,根据结果设置SF、 ZF和PF状态,而对AF未定义
逻辑异或指令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 reg/mem eg/mem ●按位取反,原来“0的位变 为“1”;原来是“1”的位变为“0° ■NOT指令是一个单操作数指令 NOT指令不影响标志位
逻辑非指令NOT ◼ 对一个操作数执行逻辑非运算 ◼ NOT指令是一个单操作数指令 ◼ NOT指令不影响标志位 NOT reg/mem ;reg/mem←~reg/mem 按位取反,原来是“0”的位变 为“1”;原来是“1”的位变为“0” NOT
例1:逻辑运算 mov al,45h;逻辑与al=01h and al. 3lh ;CF=OF=0,SF=0、ZF=0、PF=0 mov al, 45h 逻辑或a1=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 标志不变
例1:逻辑运算 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 ;标志不变
例2:逻辑指令应用 ;AND指令可用于复位某些位(同0相与),不影响其他 位:将B中D3和D0位清0,其他位不变 and b1.11110110B ;OR指令可用于置位某些位(同1相或),不影响其他 位:将B中D3和D0位置1,其他位不变 orbl,00001001B ;XOR指令可用于求反某些位(同1相异或),不影响其 他位:将BL中D3和D0位求反,其他不变 xor bl,00001001B
例2:逻辑指令应用 ;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
EST 试指令TEST 对两个操作数执行逻辑与运算,结果不回送到 目的操作数 TEST reg,im/reg/mem∧ TEST mem, imm/reg mem/ eeg 号只有相“与”的两位都是1,结 果才是1;否则,“与”的结果为 0 AND指令设置CF=OF=0,根据结果设置SF ZF和P状态,而对AF未定义
测试指令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
EST 例3:测试为0或1 TEsT AX, 0001H JZ Even 1 ;ZF=1,相等跳转到 Even 1 Even 1 TEST指令通常用于检测一些条件是否 满足,但又不希望改变原操作数的情况
例3:测试为0或1 TEST AX,0001H JZ EVEN_1 ;ZF=1,相等跳转到 EVEN_1 …… EVEN_1: TEST指令通常用于检测一些条件是否 满足,但又不希望改变原操作数的情况 TEST