如题,在书上的例子中
mov al,0f0h
add al,088h
书上说指令执行后:cf=1,of=1,对于cf我没有什么问题,但对于of我就弄不懂了
因为执行的过程用二进制表示如下:
11110000
+10001000
-——————
01111000 即78h
那问题就来了,如何判定这个结果是溢出的呢?
我在论坛都简单的看了下,总不至于每次我都要把他们转化为10制计算一下结果再来判断是否溢出吧?
比如这题,我要先都转化为十进制,为-16+(-120)=-136,这时我才知道它溢出了,
那有没有更简单的方法来判别呢?就从它的计算过程来判断呢?
还有一个相关的问题:
cpu是如何区分运算是有符号数运算和无符号数运算的呢?
因为有符号数和无符号数运算方式就不一样,有符号数的最高位,如第七位,是不参与运算的,而无符号数的所有位都参与运算,而cpu又是如何让它们最后的结果正确的呢?
我找了一下add指令的解释,如下:
The ADD instruction performs integer addition. It evaluates the result for both signed
and unsigned integer operands and sets the OF and CF flags to indicate a carry (overflow)
in the signed or unsigned result, respectively. The SF flag indicates the sign of
the signed result.
也没有找到我想要的答案,希望有人可以指点一下!先谢谢了! |