第7章逻辑运算.ppt

上传人:sccc 文档编号:5116668 上传时间:2023-06-05 格式: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;假如被配对的两个位是相同值(都为0或都为

2、 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 BH,AL;将BH设为11

3、011101(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.TEST TEST的功能与AND相似,但是它只设定标志的值,不将结果存于第一

4、个操作数的寄存器或存储器单元中。例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二者并不相同,NEG是求一个数的相反数,它会将所有的位取反,然后再加1(即求补)。NEG进行的是0操作数。例如,

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

6、 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.ASM0000CODE SEGMENT PARA CODE ASSUME CS:CODE,DS:CODE,SS:CODE 0100 ORG 100H 0100 EB 1C 90BEGIN:JMP MAIN;,43 68 61 6E 67 65 20TITLEX DB Change to uppercase letters 74 6F 20 75

7、 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;被转换字母数 0125B20:8A 27 MOV AH,BX;从TITLEX栏取字母 80 FC 61CMP AH,61H;若字母小于a,012A 72 0AJB B30;若字母大于z 012C 80 FC 7A CMP AH,7AH;则 012F 77 05 JA B30;转B30 80 E4 DF AND AH,11011111B;若

8、字母是小写转换成大写,88 27 MOV BX,AH;转换结果仍存入TITLEX 0136B30:43 INC BX;指向下一个字母 0137 E2 ECLOOP B20 0139 C3 RET 013AMAIN ENDP 013ACODE ENDS END BEGIN,例7.4的程序,从TITLEX+1的偏移地址开始,将TITLEX字符串的字母从小写转换为大写,此程序设定BX的初值为TITLEX+1的偏移地址,然后利用此地址,把从TITLEX+1开始的字节一一传送给AH。假如,字节的值是在61H到7AH的范围内,则AND指令将会把b5位设为0:AND AH,11011111B 所有不是az的

9、字节,则不会改变其内容。这个程序同时把被转换后的字节再送回TITLEX,并且增加BX的值,以便处理下一个字节。,7.2 移位及循环移位,移位和循环移位指令是CPU逻辑处理能力的一部分。它们具有下列几项功能。(1)可以作用在一个字节或字上;(2)可以作用在寄存器或存储器上;(3)可以向左或向右移位/循环移位;(4)假如作用的是字节,则最多可以移位/循环移位8位;如果是字,则可以达到16位;,(5)可分为逻辑(不带正负号)或算术(带有正负号)的移位;(6)如果移位的位是1位,则可以直接写成操作数1;假如,移位的位数大于1位,那么就要将此值传送给CL寄存器。7.2.1 移位 被移出的位将置入CF标志

10、中。图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的最左(最高)位移入0。第二条SHR将AL向右移3位。CF标志的内容依序变化为1、1及0,并且在AL的最左边三个位补0。,例如,利用SAR向右算术移位的情况。MOV CL,03(AL)MOV AL,10110111B;1

11、0110111 SAR AL,1;11011011 向右移1位 SAR AL,CL;11111011 向右移3位 SAR与SHR有一重要的不同点,即SAR利用正负号位去填补最左边(最高位)空出的位,即最高位保持不变。利用这种方法,正值与负值都保持它们原来的正负号。上面的例子正负号位的值为1。,向左移位是在右边的位置上补0。因此,SHL及SAL的作用就完全相同了。向左移位可以使移位的值乘以2,向右移位可以使移位的值除以2。这是一种非常有用的方法,并且二者都比用乘除指令更快速。奇数(例如,5和7)在除以2时,所得的值会比真正的值小(分别是2和3),并且CF被设定为1。如果要移动两个位,可以连续使用

12、两条移位指令,这样会比将2放入CL中,再用一条移位指令效率更高。利用JC(如有进位则转移)指令,可以测试被移入CF标志的位。,7.2.2 循环移位 循环移位指令会将被移出的位再回送给空出的位。图7-2是循环移位指令的助记符和图形说明。,图7-2 循环移位指令的助记符和图形说明,例如,下面的指令序列用来说明ROR的作用。MOV CL,03(BL)MOV BL,1011 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备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号