逻辑运算指令是另一组重要的指令.doc
文本预览下载声明
逻辑运算指令是另一组重要的指令,它包括:逻辑与(AND)、逻辑或(OR)、逻辑非(NOT)和异或指令(XOR),逻辑运算指令也是经常使用的指令。
1、逻辑与操作指令AND(LogicalAND Instruction)
指令的格式:AND Reg/Mem, Reg/Mem/Imm受影响的标志位:CF(0)、OF(0)、PF、SF和ZF(AF无定义)指令的功能是把源操作数中的每位二进制与目的操作数中的相应二进制进行逻辑“与操作”,操作结果存入目标操作数中。
例5.6 已知(BH)=67H,要求把其的第0、1和5位置为0。
解:可以构造一个立即数,其第0、1和5位的值为0,其它位的值为1,该立即数即为:0DCH,然后用指令ANDBH, 0DCH来实现此功能。
其计算过程如右图所示。 2、逻辑或操作指令OR(LogicalOR Instruction)
指令的格式:OR Reg/Mem, Reg/Mem/Imm受影响的标志位:CF(0)、OF(0)、PF、SF和ZF(AF无定义)指令的功能是把源操作数中的每位二进制与目的操作数中的相应二进制进行逻辑或操作,操作结果存入目标操作数中。
例5.7 已知(BL)=46H,要求把其的第1、3、4和6位置为1。
解:构造一个立即数,使其第1、3、4和6位的值为1,其它位的值为0,该立即数即为:5AH,然后用指令ORBL, 5AH来实现此功能。
其计算过程如右图所示。 3、逻辑非操作指令NOT(LogicalNOT Instruction
指令的格式:NOT Reg/Mem其功能是把操作数中的每位变反,即:1←0,0←1。指令的执行不影响任何标志位。
例5.8 已知(AL)=46H,执行指令“NOT AL”后,AL的值是什么?
解:执行该指令后,(AL)=0B9H。其计算过程如下所示。 4、逻辑异或操作指令XOR(ExclusiveOR Instruction)
指令的格式:XOR Reg/Mem, Reg/Mem/Imm受影响的标志位:CF(0)、OF(0)、PF、SF和ZF(AF无定义)指令的功能是把源操作数中的每位二进制与目的操作数中的相应二进制进行逻辑异或操作,操作结果存入目标操作数中。
例5.9 已知(AH)=46H,要求把其的第0、2、5和7位的二进制值变反。
解:构造一个立即数,使其第0、2、5和7位的值为1,其它位的值为0,该立即数即为:0A5H,然后再用指令XOR AH, 0A5H来实现此功能。
其计算过程如右图所示。 5、逻辑操作指令的小结
下面是学习和掌握逻辑类指令的控件,可模拟执行AND、OR、NOT和XOR等指令。
31 … 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
… … VM RF NT IOPL OF DF IF TF SF ZF AF PF CF 图2.2 16位/32位标志寄存器的示意图
上面9个标志位可分为二组:运算结果标志位(有背景色的标志位)和状态控制标志位。前者受算术运算和逻辑运算结果的影响,后者受一些控制指令执行的影响。
更详细的内容请点击:标志位的说明。
有些指令的执行会改变标志位(如:算术运算指令等),不同的指令会影响不同的标志位,有些指令的执行不改变任何标志位(如:MOV指令等),有些指令的执行会受标志位的影响(如:条件转移指令等),也有指令的执行不受其影响。
程序员要想熟练运用这些标志位,就必须掌握每个标志位的含义、每条指令的执行条件和执行结果对标志位的作用。
注意:虽然知道每个标志位在标志寄存器内的具体位置是有好处的,但通常情况下,没有这个必要。在使用第5.2.9节中的“条件转移指令”时,系统会自动引用相应标志位的值来决定是否需要“转移”的,所以,不必过分强调标志位在标志寄存器内的具体位置
5.1、书写正确的MOV指令,需要符合哪些规定?在32位CPU中,增加了什么指令来克服不同数据类型之间的数据传送? 5.2、简述指令MOV BX, 1234H、MOV BX, [1234]和MOV BX, offset [1234H]的功能和它们之间区别。 5.3、简述指令MOV BX, Data和MOV BX, offset Data之间的区别。 5.4、选择指令实现下列要求,OPN1 ← OPN2的含义:把操作数OPN2的值传送给OPN1。 1)、EBX ← EDX3)、SI ← BX5)、AL ← BH7)、AX ← 13AH9)、SI ← 1000H 2)、BX ← CL4)、DS ← AX6)、AL ← 12H8)、CX ← 0CDH
显示全部