XOR AX,AX ;AX=__ FLAG=__
MOC AX,89ABH ;FLAG=__
AND AX,F0FFH ;AX=__ FLAG=__
RCL AX,1 ;AX=__ FLAG=__
请会的朋友帮下忙我先谢谢了!~
XOR AX,AX ;AX=__ FLAG=__
MOC AX,89ABH ;FLAG=__
AND AX,F0FFH ;AX=__ FLAG=__
RCL AX,1 ;AX=__ FLAG=__
请会的朋友帮下忙我先谢谢了!~
补充说明:
ZF 零标志 -- 当结果为负时,SF=1,否则,SF=0.
AF 辅助进位标志---运算过程中第三位有进位值,置AF=1,否则,AF=0
PF 奇偶标志------当结果操作数中偶数个"1",置PF=1,否则,PF=0
SF 符号标志----当结果为负时,SF=1;否则,SF=0.溢出时情形例外
DF 方向标志----当方向左时,DF=1;否则,DF=0.
CF 进位标志----- 最高有效位产生进位值,例如,执行加法指令时,MSB有进位,置CF=1;否则,CF=0.
OF 溢出标志-----若操作数结果超出了机器能表示的范围,则产生溢出,置OF=1,否则,OF=0
然后具体什么指令影响什么标志位,这个要去看下书,强制记忆一下。
接着就可以对照结果了:
1.各位眼睛真是大。。。。
XOR AX,AX ;AX=0000H FLAG=0004H
FLAG=0x04, 这就是第2位的PF位,这就奇偶位了,XOR AX,AX的结果是0, XOR指令只影响PF位,它是以最低位的0和1来判断的,结果FLAG是0x04了。
2. MOV AX,89ABH ;FLAG=0004
非赋值、非存取的运算,才会改变标志位,具体指令会影响FLAG什么位,可以去查指令集的说明
XOR影响了PF位,但MOV指令是不影响FLAG标志位的,所以MOV AX,89AB后,虽然AX是奇数,但不影响FLAG位。
3.AND AX,F0FFH ;AX=80ABH FLAG=0080H
与影响PF和SF,结果为负的奇数,所以PF的4没了,多了8那个SF位。
4.RCL AX,1 ;AX=0156H FLAG=0805H
你去看书的话,移位时,CY和寄存相连,所以这个逻辑左移指令把最高位的1移到了CY进位位中,结果是偶数PF=1,同时方向DF=1是左,最后最后FLAG=0805H了。
首先来看下FLAG寄存器的存放信息
1、CF:这是进位标志 ,用于在执行指令时是否产生进位或借位如果产生则CF=1,否则CF=0。
2、AF:这是辅助进位标志,这个是用于在指令执行时是否产生借位位如有AF=1否则AF=0。
2、PF:奇偶标志,用于校验数据的奇偶性。检验奇数据奇偶性如果是PF=1;否则PF=0。
3、TF:陷阱标志,在进行中断处理也会用到的主要将此TF清零这个忘记了!。
4、IF:中断允许标志,如果CPU接到并响应了设备的中断请求IF=1否则IF=0该标志在进行中断处理的时候也会和TF一起时候吧这两个标志位清零。
5、ZF:零标志,用于执行指令是否为零如果是则ZF=1否则ZF=0
6、OF:溢出标志,该标志位用于表示操作数执行时是否发生溢出如果是cf=1否则cf=0
7、DF:方向标志(以下不做介绍同样道理)
8.SF:符号标志
下面来看第一个 XOR异或运算 自己跟自己异或 各位相同 当然是0了 至于FLAG上的特征貌似没有
FLAG=0
第二个AX只有两个字节 而89ABH有4个字节 显然 数据溢出 所以 OF=1
AND 与操作 与F0FF AX两个字节 所以只能与FF相与 所以AX=0 产生错位 所以CF=1
RCL 将CF移至最低位 所以 AX=1 产生进位 所以 CF=1
XOR AX,AX ;AX=0000H FLAG=NV UP EI PL ZR NA PE NC
MOV AX,89ABH ;FLAG=同上
AND AX,F0FFH ;AX=80ABH FLAG=NV UP EI NG NZ NA PO NC
RCL AX,1 ;AX=0156H FLAG=OV UP EI NG NZ NA PO NC