假设x、y两个数采用8位补码表示,已知这两个数X=0x7E、Y=0x5D。试计算X-Y的结果、标志位ZF、SF、OF、CF的值,并写出该运算中x、y、x - y的十进制真值
运算前怎么判断,运算后还怎么判断
直接减
X=0x7E=十进制126;Y=0x5D=十进制93
X-Y=01111110+(01011101)的补码=01111110+10100011=100100001 舍弃第1位后=00100001=十进制33
CF:进位标志位。当进行加减运算时,若最高位发生进位或借位,则CF为1,否则为0。由上面分析结果原本为100100001即进了一位,CF=1
ZF:零标志位。即相当于ZF=(运算结果==0)?1:0。由上面分析知道结果为33,不等于0,即ZF=0;
SF:符号标志位。当运算结果的最高位是1时,SF为1,否则为0。00100001的最高位是0,SF=0;
OF:溢出标志位。当运算结果超出了带符号数所能表示的数值范围即溢出时,OF为1,否则为0。00100001=33远远小于2的8次方,故没溢出。OF=0;
x = 0x7E = 126(10)
y = 0x5D = 93(10)
x - y = 126(10) - 93(10) = 33(10)
ZF: 结果为非零,ZF=0
SF: 结果为正数,SF=0
OF: x - y不大于x的绝对值,OF=0
CF: y不大于x,CF=0
x、y、x - y的十进制真值: 126(10)、93(10)、33(10)