3.3.3 逻辑运算和移位指令 1.逻辑运算指令● 运算规则:按位操作,无进/借位● 对标志位的影响(除NOT指令外):
CF OF SF ZF PF AF 0 0 * * * 无定义
根据运算结果设置
(1) 逻辑”与” AND对两个操作数进行按位逻辑“与”操作。 格式:AND dest, src 用途:保留操作数的某几位,清零其他位。 例1:保留AL中低4位,高4位清0。 AND AL, 0FH 例2:AL中有字符’a’~’z’, 将其转换成大写。 AND AL, 01011111B2
例3:测试AL的bit7,bit5,bit2是否都是1。 AND AL, 10100100B CMP AL, 10100100B JZ YES ; if match, go to YES … … ; if not match … … YES: … … ; goes here if all ‘1’
(2) 逻辑”或” OR对两个操作数进行按位逻辑”或”操作。 格式:OR dest, src 用途:对操作数的某几位置1;对两操作数 进行组合。 例1:把AL中的非压缩BCD码变成相应十进制 数的ASCII码。 OR AL, 30H4
例2:把AH和AL中的非压缩BCD码组合成压 缩的BCD码, 放到AL中。 MOV CL, 4 SHL AH, CL OR AL, AH例3:把AL的第5位置为1 OR AL, 00100000B
(3) 逻辑“非”(取反) NOT对操作数进行按位逻辑”非”操作。 格式:NOT mem/reg 例:NOT CX NOT BYTE PTR[DI]
(4) 逻辑”异或” XOR对两个操作数按位进行”异或”操作。 格式:XOR dest, src 用途:对reg清零(自身异或) 把reg/mem的某几位变反(与’1’异或)
例1:把AX寄存器清零。 例2:把DH的bit4,3变反 ① MOV AX,0 XOR DH,18H ② XOR AX,AX ③ AND AX,0 ④ SUB AX,AX7
(5) 测试指令TEST操作与AND指令类似,但不将”与”的结果送回, 只影响标志位。 TEST指令常用于位测试,与条件转移指令一起 用。 例:测试AL的内容是否为负数。 TEST AL,80H ;检查AL中D7=1? JNZ MINUS ;是1(负数),转MINUS … … ;否则(正数)不转移MINUS: … … … …8
2.移位指令 (1)非循环移位指令算术左移指令 SAL(Shift Arithmetic 算术右移指令 SAR(Shift Arithmetic 逻辑左移指令 SHL(Shift Left) 逻辑右移指令 SHR(Shift Right) 这4条指令的格式相同,以SAL为例: SALCL mem/reg, 1Left) Right)
;移位位数大于1时 ;移位位数等于1时9
移位指令执行的操作如下图所示:最高位 CF (a)算术/逻辑左移 SAL/SHL 最高位 CF 最低位 CF 0 (b)算术右移 SAR (c)逻辑右移 SHR10
最低位 0
最高位
最低位
非循环移位指令功能示意图
算术移位——把操作数看做有符号数;
逻辑移位——把操作数看做无符号数。 移位位数放在CL寄存器中,如果只移1位,也 可以直接写在指令中。例如: MOV CL,4 SHR AL,CL ;AL中的内容右移4位 影响C,P,S,Z,O标志。 结果未溢出时: 左移1位≡操作数*2 右移1位≡操作数/211
例:把AL中的数x乘10 因为10=8+2=23+21,所以可用移位实现乘10 操作。程序如下: SAL AL,1 ; 2x MOV AH,AL SAL AL,1 ; 4x SAL AL,1 ; 8x
ADD AL,AH ; 8x+2x = 10x
(2)循环移位指令不含进位位的循环左移指令 ROL 不含进位位的循环右移指令 ROR 含进位位的循环左移指令 RCL 含进位位的循环右移指令 RCR 格式同非循环移位指令。 移位位数放在CL寄存器中,如果只移1位,
也可以直接写在指令中。 循环移位指令只影响标志位CF和OF。13
这4条指令的功能如下图示:最高位 CF (a) ROL 最高位 CF (b) ROR 最低位 CF (d) RCR 最高位 最低位 CF (c) RCL 最低位 最高位 最低位
循环移位指令功能示意图14
用移位操作代替乘除法可提高运算速度
例:前例中计算 x×10。 (1)采用乘法指令:MOV BL,10 MUL BL
共需70~77个T周期。 (2)采用移位和加法指令:SAL MOV SAL SAL ADD AL,1 AH,AL AL,1 AL,1 AL,AH ; ; ; ; ; 2T 2T 2T 2T 3T15
只需11个T周期,仅相当于乘法的1/7。
循环移位举例:例1:将AL的高4位与低4位互换。 MOV CL,4 ROL AL,CL 例2:将1A00H内存单元中的双字循环左移1位。 CMP [1A00H],8000H CMC RCL WORD PTR[1A02H],1 RCL WORD PTR[1A00H],116
…… 此处隐藏:164字,全部文档内容请下载后查看。喜欢就下载吧 ……