1.逻辑非指令NOT
格式:NOT OPD
操作形式:OPD←。
描述:
指令的功能是把操作数中的每位变反,即:1←0,0←1。将目的地址中的内容逐位取反后送入目的地址。操作数不能用立即数,指令执行后对标志位无影响,也可用于求补。
举例:
MOV AX,1234H ;(AX)=1234H
NOT AX ;(AX)=EDCBH
2.逻辑与指令AND
格式:AND 目的操作数,源操作数
操作形式:DOPD ← DOPD∧SOPD。
描述:
(1)逻辑与运算法则为1∧1=1,1∧0=0,0∧1=0,0∧0=0。
(2)指令的功能是把源操作数中的每位二进制与目的操作数中的相应二进制进行逻辑乘运算操作,操作结果存入目的操作数中。
(3)受影响的标志位:CF、OF为0,PF、SF和ZF根据运算定, AF无定义。
(4)利用AND指令与0或1相与可对操作数的某些位进行屏蔽和保留操作。
举例:
将AL中第0位和第7位清零。
MOV AL,0FFH
AND AL,7EH
3.逻辑或指令OR
格式:OR 目的操作数,源操作数
操作形式:DOPD ← DOPD∨SOPD
描述:
(1)逻辑或运算法则:1∨1=1,1∨0=1,0∨1=1,0∨0=0。
(2)指令的功能是把源操作数中的每位二进制与目的操作数中的相应二进制进行逻辑加运算操作,操作结果存入目的操作数中。
(3)受影响的标志位:CF、OF为0,PF、SF和ZF根据运算定, AF无定义。
(4)利用OR指令与1或0相或,可对操作数置1操作,和保留原位不变。
举例:
将AL中第0位和第7位置1。
MOV AL,0
OR AL,81H
4.逻辑异或指令XOR
格式:XOR目的操作数,源操作数
操作形式:DOPD ← DOPDSOPD
描述:
(1)逻辑异或运算法则:11=0,10=1,01=1,00=0。
(2)指令的功能是把源操作数中的每位二进制与目的操作数中的相应二进制进行逻辑“异或”操作,操作结果存入目的操作数中
(3)受影响的标志位:CF、OF为0,PF、SF和ZF根据运算定, AF无定义。
(4)利用该指令与1和0相异或,分别可以操作数对应位变反和保持不变。
(5)对操作数自身异或运算可对寄存器和CF、OF置0。
举例:
(1)将AL中的0、7位变反
XOR AL,81H
(2)将AX清零
XOR AX,AX
5.逻辑测试指令TEST
格式:TEST 目的操作数,源操作数
操作形式:DOPD∧SOPD。
描述:
(1)该指令与指令AND的区别在于,两操作数相与后不保存结果。
(2)指令的功能是把源操作数的每位二进制与目的操作数中的相应二进制进行逻辑“与”操作,根据所得结果设置有关标志位,为随后的条件转移指令提供条件,由于不保存差值,所以不会改变指令中的操作数。
(3)受影响的标志位:CF、OF为0,PF、SF和ZF根据运算定, AF无定义。
举例:
(1)TEST AX,100B;B表示二进制
JNZ AA ;如果AX右数第三位为1,JNZ将跳转到AA处。
(2)测试寄存器是否为空
TEST AX,AX
JZ AA
如果AX为零,则ZF标志为1,JZ将跳转到AA处。
写出下面程序各语句运行后寄存器和状态字的值
![](https://i-blog.csdnimg.cn/blog_migrate/f541a059d40572ef386bccd8a613fe9d.png)
以上数据的的操作过程如下:
走到上图这个步骤的时候,会进入循环,这个时候,我们进行一下操作跳出循环
到以上步骤的时候,即到MOV DX,0000的之后,再次进入了循环,这个时候。关闭页面,重新进入,利用-U查看地址,然后输入-G=000,002D,002D是我们要跳转到的地址。再之后,就进入了但是,出现的第一条是多出来的信息,MOV AH,4C对应的应该是下一条的,即AX=4C24。。。。