教学提示 在正确理解每条指令的功能 基础上,可以阅读和编写有 实际意义的程序段 多多程序段
教学提示 在正确理解每条指令的功能 基础上,可以阅读和编写有 实际意义的程序段
第2章 2.5位操作类指令 >位操作类指令以二进制位为基本单位 进行数据的操作;这是一类常用的指 令,都应该特别掌握 >注意这些指令对标志位的影响 1、逻辑运算指令 AND OR XOR NOT TEST 2、移位指令 SHL SHR SAR 3、循环移位指令 ROL ROR RCL RCR
第 2 章 2.5 位操作类指令 ➢位操作类指令以二进制位为基本单位 进行数据的操作;这是一类常用的指 令,都应该特别掌握 ➢注意这些指令对标志位的影响 1、逻辑运算指令 AND OR XOR NOT TEST 2、移位指令 SHL SHR SAR 3、循环移位指令 ROL ROR RCL RCR
第2章 逻辑与指令AND AND 对两个操作数执行逻辑与运算,结果 送到目的操作数 AND reg, imm/reg/mem; regfregAimm/reg/mem AND mem,imm/reg;mem←men∧im/reg 只有相“与”的两位都是1,结 果才是1;否则,“与”的结果为 0 >AND指令设置CFOF≡0,根据结果 设置SF、ZF和PF状态,而对AF未定义
第 2 章 逻辑与指令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
第2章 逻辑或指令OR OR >对两个操作数执行逻辑或运算,结果 送到目的操作数 OR reg, imm/reg/mem: reg+ Imm/reg/mem OR mem, imm/reg; mem+-mem imm/reg 只要相“或”的两位有一位是1 结果就是1;否则,结果为0 OR指令设置CF≡OF=0,根据结果设 置SF、ZF和PF状态,而对AF未定义
第 2 章 逻辑或指令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
第2章 逻辑异或指令XOR XOR >对两个操作数执行逻辑异或运算,结 果送到目的操作数 XOR reg, imm/reg/mem; reg+feg e imm/reg/mem XOR mem, imm/reg; mem+-membo imm/reg 只有相“异或”的两位不相同 结果才是1;否则,结果为0 XOR指令设置CFOF≡0,根据结果 设置SF、ZF和PF状态,而对AF未定义
第 2 章 逻辑异或指令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
第2章 逻辑非指令NOT NOT >对一个操作数执行逻辑非运算 NOT reg/mem reg/meme reg/mem v按位取反,原来是“0的位变 为“1”;原来是“1的位变为“0 >NOT指令是一个单操作数指令 >NOT指令不影响标志位
第 2 章 逻辑非指令NOT ➢对一个操作数执行逻辑非运算 ➢NOT指令是一个单操作数指令 ➢NOT指令不影响标志位 NOT reg/mem ;reg/mem←~reg/mem 按位取反,原来是“0”的位变 为“1”;原来是“1”的位变为“0” NOT
例228:逻辑运算 mova1,45h;逻辑与a1=01h and al,3lh;CF=OF=0,SF=0、ZF=0、PF=0 mov al,45h;逻辑或a1=75h or al. 31h CF=0F=0,SF=0、ZF=0、PF=0 mova1,45h;逻辑异或a1=74h xor al,31h;CF=OF=0,SF=0、ZF=0、PF=1 mova1,45h;逻辑非a1=0bah not al ;标志不变 ⊙E
例2.28:逻辑运算 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 ;标志不变
例229:逻辑指令应用 ;AND指令可用于复位某些位(同0相与),不 影响其他位:将B中D3和D0位清0,其他位不变 andb1,11110110B ;OR指令可用于置位某些位(同1相或),不影 响其他位:将BL中D3和D0位置1,其他位不变 orb1,00001001B ;XOR指令可用于求反某些位(同1相异或), 不影响其他位:将B中D3和D位求反,其他不变 xor bl,00001001B
例2.29:逻辑指令应用 ;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
第2章 测试指令TEST EST 对两个操作数执行逻辑与运算,结果 不回送到目的操作数 TEST reg, imm/reg/mem reg∧imm/reg/mem TEST mem, imm/reg; mem/imm/reg ●有相“与”的两位都是1,结 果才是1;否则,“与”的结果为 0 >AND指令设置CFOF≡0,根据结果 设置SF、ZF和PF状态,而对AF未定义
第 2 章 测试指令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 例230:测试为0或1 test a1,0lh;测试AL的最低位Do jnz there;标志ZF=0,即D0=1 ;则程序转移到 there ;否则ZF=1,即D0=0,顺序执行 there TEST指令通常用于检测一些条件是否 满足,但又不希望改变原操作数的情况
例2.30:测试为0或1 test al,01h ;测试AL的最低位D0 jnz there ;标志ZF=0,即D0=1 ;则程序转移到there ... ;否则ZF=1,即D0=0,顺序执行 there: ... TEST指令通常用于检测一些条件是否 满足,但又不希望改变原操作数的情况 TEST