第7章逻辑运算.ppt

上传人:本田雅阁 文档编号:3132272 上传时间:2019-07-15 格式:PPT 页数:28 大小:296.53KB
返回 下载 相关 举报
第7章逻辑运算.ppt_第1页
第1页 / 共28页
第7章逻辑运算.ppt_第2页
第2页 / 共28页
第7章逻辑运算.ppt_第3页
第3页 / 共28页
第7章逻辑运算.ppt_第4页
第4页 / 共28页
第7章逻辑运算.ppt_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《第7章逻辑运算.ppt》由会员分享,可在线阅读,更多相关《第7章逻辑运算.ppt(28页珍藏版)》请在三一文库上搜索。

1、第7章 逻辑运算,7.1 逻辑运算指令 7.2 移位及循环移位,7.1 逻辑运算指令,所有的逻辑指令都将处理寄存器或存储器中的一个字节或一个字。指令将被操作(参与运算)的字节、字的各位予以配对,并且设定CF、OF、PF、SF和ZF标志的状态,AF标志对于用户没有意义。,7.1.1 逻辑指令 1. AND 与运算 假如被配对的两个位都为1,则其结果为1;而在其他的情况中,它的值均为0。 2. OR 或运算 假如被配对的两个位其中有一个为1,则其结果为1;假如两者都是0,则结果为0。,3. XOR 异或运算 假如被配对的两个位其中一个为0,而另一个为1,则结果为1;假如被配对的两个位是相同值(都为

2、0或都为 1),其结果为0。 参与逻辑运算的操作数有两个,第一个操作数所指定的字节或字,存放在寄存器或存储器单元中,其中的值是唯一可改变的,因为最后的结果存放在此寄存器或存储器单元中。 例如,下面的AND、OR及XOR指令,使用的操作数值是相同的。,A ND OR XOR 0101 0101 0101 0011 0011 0011 结果: 0001 0111 0110,例7.1 下列逻辑运算中,各题目彼此是互不相关的,假设AL的内容为11000101,BH的内容为01011100,进行下列逻辑运算后,相应的寄存器被设为: (1) AND AL,BH ;将AL设为01000100 (2) OR

3、BH,AL ;将BH设为11011101 (3) XOR AL,AL ;将AL设为00000000 (4) AND AL,00 ;将AL设为00000000 (5) AND AL,0FH ;将AL设为00000101 (6) OR CL,CL ;设定SF及ZF,例7.1中的(3)和(4)提供了一个将寄存器清为0的方法。(5)将AL的高4位清为0。 可以利用OR来完成下面的操作目的,也可以利用CMP指令(这样可能会更清楚)。 例7.2 OR的使用。 (1) OR CX,CX ;测试CX是否为0 JZ ;如果为0则转移 (2) OR CX,CX ;测试CX的正负号 JS ;如果为负则转移,4. T

4、EST TEST的功能与AND相似,但是它只设定标志的值,不将结果存于第一个操作数的寄存器或存储器单元中。 例7.3 TEST的使用。 (1) TEST BL,11110000B ;BL的高4位是否有不为0的位? JNZ ,(2) TEST AL,00000001B ;AL的内容是否为奇 数? JNZ (3) TEST DX,0FFH ;DX的内容是否为0? JZ ,5. NOT NOT是另一种逻辑运算指令,它的作用是将寄存器或存储器单元中的字节或字的每个位取反,即01,10。 例如,假设AL的内容为11000101,那么NOT AL指令会将AL的内容变为00111010。NOT与NEG二者并

5、不相同,NEG是求一个数的相反数,它会将所有的位取反,然后再加1(即求补)。NEG进行的是0操作数。例如,0FFH(-1)经NEG后变为01H(+1)。 TEST与AND作用相同也是与运算,但是只设定标志,并不改变该位的值。,7.1.2 将小写转换为大写 例7.4 将小写转换成大写。 在许多情况下,需要将大写与小写字母进行转换。例如,你可能接收到一个文件,里面的内容是由大写字母所组成的,或者一个程序,允许使用者以大写或小写回答命令(例如YES或yes),你需要将它们转换后再进行测试。,大写字母AZ,以十六进制的ASCII码表示即41H5AH;而小写字母az的ASCII码是61H7AH。二者唯一

6、不同之处是,大写的b5位是0,而小写的b5位是1,如下所示: 位:7 6 5 4 3 2 1 0 位: 7 6 5 4 3 2 1 0 字母A:0 1 0 0 0 0 0 1 字母Z: 0 1 0 1 1 0 1 0 字母 a:0 1 1 0 0 0 0 1 字母 z: 0 1 1 1 1 0 1 0,例7.4的程序清单(L74.LST)如下:,; filename:L74.ASM 0000 CODE SEGMENT PARA CODE ASSUME CS:CODE,DS:CODE,SS:CODE 0100 ORG 100H 0100 EB 1C 90 BEGIN:JMP MAIN ; ,43

7、 68 61 6E 67 65 20 TITLEX DB Change to uppercase letters 74 6F 20 75 70 70 65 72 63 61 73 65 20 6C 65 74 74 65 72 73 ; 011EMAIN PROC NEAR 011E 8D 1E 0104 R LEA BX,TITLEX+1 ;被转换字母开始地址,B9 001A MOV CX,26 ;被转换字母数 0125 B20: 8A 27 MOV AH,BX ;从TITLEX栏取字母 80 FC 61 CMP AH,61H ;若字母小于a,012A 72 0A JB B30 ;若字母大于

8、z 012C 80 FC 7A CMP AH,7AH ;则 012F 77 05 JA B30 ;转B30 80 E4 DF AND AH,11011111B ;若字母是小写转换成大写,88 27 MOV BX,AH ;转换结果仍存入TITLEX 0136 B30: 43 INC BX ;指向下一个字母 0137 E2 EC LOOP B20 0139 C3 RET 013A MAIN ENDP 013A CODE ENDS END BEGIN,例7.4的程序,从TITLEX+1的偏移地址开始,将TITLEX字符串的字母从小写转换为大写,此程序设定BX的初值为TITLEX+1的偏移地址,然后利

9、用此地址,把从TITLEX+1开始的字节一一传送给AH。假如,字节的值是在61H到7AH的范围内,则AND指令将会把b5位设为0: AND AH,11011111B 所有不是az的字节,则不会改变其内容。这个程序同时把被转换后的字节再送回TITLEX,并且增加BX的值,以便处理下一个字节。,7.2 移位及循环移位,移位和循环移位指令是CPU逻辑处理能力的一部分。它们具有下列几项功能。 (1) 可以作用在一个字节或字上; (2) 可以作用在寄存器或存储器上; (3) 可以向左或向右移位/循环移位; (4) 假如作用的是字节,则最多可以移位/循环移位8位;如果是字,则可以达到16位;,(5) 可分

10、为逻辑(不带正负号)或算术(带有正负号)的移位; (6) 如果移位的位是1位,则可以直接写成操作数1;假如,移位的位数大于1位,那么就要将此值传送给CL寄存器。 7.2.1 移位 被移出的位将置入CF标志中。图7-1是移位指令的助记符和图形说明。,图7-1 移位指令的助记符和图形说明,例如,SHR的使用(下面的指令是连续的)。 MOV CL,03 (AL) MOV AL,10110111B ;10110111 SHR AL,1 ;01011011 向右移1位 SHR AL,CL ;00001011 向右移3位 第一条SHR将AL的内容向右移1位。被移出的位放在CF标志中,CF为1;并在AL的最

11、左(最高)位移入0。第二条SHR将AL向右移3位。CF标志的内容依序变化为1、1及0,并且在AL的最左边三个位补0。,例如,利用SAR向右算术移位的情况。 MOV CL,03 (AL) MOV AL,10110111B ;10110111 SAR AL,1 ;11011011 向右移1位 SAR AL,CL ;11111011 向右移3位 SAR与SHR有一重要的不同点,即SAR利用正负号位去填补最左边(最高位)空出的位,即最高位保持不变。利用这种方法,正值与负值都保持它们原来的正负号。上面的例子正负号位的值为1。,向左移位是在右边的位置上补0。因此,SHL及SAL的作用就完全相同了。向左移位

12、可以使移位的值乘以2,向右移位可以使移位的值除以2。这是一种非常有用的方法,并且二者都比用乘除指令更快速。 奇数(例如,5和7)在除以2时,所得的值会比真正的值小(分别是2和3),并且CF被设定为1。如果要移动两个位,可以连续使用两条移位指令,这样会比将2放入CL中,再用一条移位指令效率更高。 利用JC(如有进位则转移)指令,可以测试被移入CF标志的位。,7.2.2 循环移位 循环移位指令会将被移出的位再回送给空出的位。图7-2是循环移位指令的助记符和图形说明。,图7-2 循环移位指令的助记符和图形说明,例如,下面的指令序列用来说明ROR的作用。 MOV CL,03 (BL) MOV BL,1

13、011 0111B ;1011 0111 ROR BL,1 ;1101 1011 向右循环移1位 ROR BL,CL ;0111 1011 向右循环移3位,第一条ROR,是把BL的最右边的一个位移出,将它放在BL最左边空出来的位中。第二条ROR移出最右边的三个位,将它依顺序放在BL最左边的3个位中。 RCR和RCL两条指令,将和CF标志一起循环移位。被移出的位移入CF中,而原来CF中的值将会被移入空出来的位上。,下面是利用移位及循环移位两种指令的一个例子。假设有一个32位的数值,其中最左边的16位放在DX中,而最右边的16位放在AX中,就如同DX:AX。下列指令可以实现将此数值乘以2: SHL AX,1 ;将DX:AX乘以2 RCL DX,1 SHL指令将所有的位向左移一位,所以最左边的位将被移入CF标志中,空出的位补0即乘以2。RCL指令将DX的内容向左移,并将CF的内容插入DX空出来的位中。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1