具有不同标志的负值
Negative values with different flags
我正在尝试了解负值如何与不同的标志一起使用。
使用此代码:
mov ax, 0
add al, 116
sub al, 117
现在我应该写下 ZF、CF、OF 和 SF。
零标志将为 0,因为结果不为零。
Carry Flag 将为 1 因为我必须 'borrow'.
问题出在工作表中我需要写下为什么进位标志将 on/off 格式为:'The carry flag will be on/off because the result of the operation is _______ (in base 10), and this value exceeds the range of numbers in 8 bits.'
我不太明白unsigned的结果是什么..
- 溢出标志我知道它应该关闭,但我不明白为什么。
补 2 的:0001 -> 1110 + 1 -> 1111 = FFh
FF 是 255,它超出了“-127 - 128”的范围,那么为什么 OF 关闭?
- Sign Flag - 为什么它打开?
感谢您的帮助。
当结果为负时,SF 变为 1。
OF 将 2 个相同符号的数字相加或将 2 个不同符号的数字相减,结果不符合您在 al
中的情况
al
中的结果是 1111 1111
base 2(所有八位设置为 1)。
如果您解释它为无符号的 8 位值,它是 255 = FFh
。
如果您解释它为带符号的 8 位值,则它是 -1 = -1h
。
如你所见,al
中的值本身没有任何信息,无论是有符号还是无符号值,都只有8位。逻辑含义和类型由代码给出,它以某种方式解释这 8 位。
CF 与无符号数学相关,116 - 117 是“1 小于 0”,这超出了无符号范围(所有可能的位大小都从 0 开始)。
所以我不确定在你的sheet中写什么..可能是-1,因为这是十进制的结果,它确实超出了(unsigned) 8 位。然后在无符号计算机数学中,对于 8 位值,0-1 又是 255,因为它们以 256 环绕(或其他位大小的其他二次方)(8 位数学是 group-256 或它在代数中的称呼) , 做 0-1 然后定义明确,结果只是 "255")。
所以我对那个提议的句子感到很困惑,如果你在那里写 255
,那是正确的结果,但它很适合无符号的 8 位。它超出了带符号的 8 位值的范围(最大仅 +127)。但是对于带符号的 8 位值,结果 -1
适合 8 位,所以......我发现这个措辞不准确,而且我不确定预期的答案是什么。 CF 将打开,因为 0 - 1 = 255(环绕 → CF=1),但 255 适合 8 位。这对我来说足够准确了。
OF 与带符号的数学相关。当带符号的数学溢出时,它被设置。当你做 116 + -117 时,这是正值加上负值。两个源值都已在 8 位带符号范围内 (-128..+127)。然后将正负相加可以得到介于原始值之间的值。如果介于两者之间,肯定又是合法的8位有符号值,所以根本不会发生溢出。
如果您添加两个负值或两个正值,可能会发生溢出。然后,如果结果的符号与任何源值的符号不同,就会发生溢出 (OF=1)。 IE。 positive+positive 的negative 结果OF=1,negative+negative 的positive/zero 结果OF=1。其他所有组合都是 OF=0.
在这种特殊情况下,116 + -117 = -1 → 全部适合 8 位有符号值,没有任何问题,OF=0。
SF 是结果的最高位,因为无符号 8 位值 0..127 在有符号 8 位中的解释方式相同,但 128..255 在有符号 8 中被解释为 -128..-1位,其中最高位是负值信号,该值可以表示为-(256 - unsigned_8b_value)。在你的例子中 -(256 - 255) = -1, and SF=1 (top bit of 11111111 (top = left-most, the one encoding value 27 = 128).
你已经在上一个问题中得到了http://teaching.idallen.com/dat2343/10f/notes/040_overflow.txt,这很好地解释了这一切?你看完了吗?
我正在尝试了解负值如何与不同的标志一起使用。 使用此代码:
mov ax, 0
add al, 116
sub al, 117
现在我应该写下 ZF、CF、OF 和 SF。
零标志将为 0,因为结果不为零。
Carry Flag 将为 1 因为我必须 'borrow'.
问题出在工作表中我需要写下为什么进位标志将 on/off 格式为:'The carry flag will be on/off because the result of the operation is _______ (in base 10), and this value exceeds the range of numbers in 8 bits.'
我不太明白unsigned的结果是什么..
- 溢出标志我知道它应该关闭,但我不明白为什么。
补 2 的:0001 -> 1110 + 1 -> 1111 = FFh
FF 是 255,它超出了“-127 - 128”的范围,那么为什么 OF 关闭?
- Sign Flag - 为什么它打开?
感谢您的帮助。
当结果为负时,SF 变为 1。
OF 将 2 个相同符号的数字相加或将 2 个不同符号的数字相减,结果不符合您在 al
中的情况al
中的结果是 1111 1111
base 2(所有八位设置为 1)。
如果您解释它为无符号的 8 位值,它是 255 = FFh
。
如果您解释它为带符号的 8 位值,则它是 -1 = -1h
。
如你所见,al
中的值本身没有任何信息,无论是有符号还是无符号值,都只有8位。逻辑含义和类型由代码给出,它以某种方式解释这 8 位。
CF 与无符号数学相关,116 - 117 是“1 小于 0”,这超出了无符号范围(所有可能的位大小都从 0 开始)。
所以我不确定在你的sheet中写什么..可能是-1,因为这是十进制的结果,它确实超出了(unsigned) 8 位。然后在无符号计算机数学中,对于 8 位值,0-1 又是 255,因为它们以 256 环绕(或其他位大小的其他二次方)(8 位数学是 group-256 或它在代数中的称呼) , 做 0-1 然后定义明确,结果只是 "255")。
所以我对那个提议的句子感到很困惑,如果你在那里写 255
,那是正确的结果,但它很适合无符号的 8 位。它超出了带符号的 8 位值的范围(最大仅 +127)。但是对于带符号的 8 位值,结果 -1
适合 8 位,所以......我发现这个措辞不准确,而且我不确定预期的答案是什么。 CF 将打开,因为 0 - 1 = 255(环绕 → CF=1),但 255 适合 8 位。这对我来说足够准确了。
OF 与带符号的数学相关。当带符号的数学溢出时,它被设置。当你做 116 + -117 时,这是正值加上负值。两个源值都已在 8 位带符号范围内 (-128..+127)。然后将正负相加可以得到介于原始值之间的值。如果介于两者之间,肯定又是合法的8位有符号值,所以根本不会发生溢出。
如果您添加两个负值或两个正值,可能会发生溢出。然后,如果结果的符号与任何源值的符号不同,就会发生溢出 (OF=1)。 IE。 positive+positive 的negative 结果OF=1,negative+negative 的positive/zero 结果OF=1。其他所有组合都是 OF=0.
在这种特殊情况下,116 + -117 = -1 → 全部适合 8 位有符号值,没有任何问题,OF=0。
SF 是结果的最高位,因为无符号 8 位值 0..127 在有符号 8 位中的解释方式相同,但 128..255 在有符号 8 中被解释为 -128..-1位,其中最高位是负值信号,该值可以表示为-(256 - unsigned_8b_value)。在你的例子中 -(256 - 255) = -1, and SF=1 (top bit of 11111111 (top = left-most, the one encoding value 27 = 128).
你已经在上一个问题中得到了http://teaching.idallen.com/dat2343/10f/notes/040_overflow.txt,这很好地解释了这一切?你看完了吗?