有符号和无符号之间的区别,是什么意思是负字节?

时间:2014-02-13 10:46:40

标签: assembly x86 unsigned x86-16 signed

我需要解决下面的问题,但我不理解解决方案所需的概念。

让我们考虑以下双字词串:B234 * A68C * h,* 52B4 * 78C8h,* 1AB3 * C470h,F9DC * 98B6 *小时。要求:

1)在屏幕上打印单词'排名,每个双字中包含最小值(考虑到 unsigned

答案是'2112'(粗体字具有最小值)

2)在屏幕上打印具有最大值的字节的总和(考虑它们签名

3)在屏幕上打印严格否定 *双字的低字*

如何区分已签名和未签名?什么意味着负面的低级词?它是否适合区间[0,255]中的值?

1 个答案:

答案 0 :(得分:5)

是16位。 双字是32位,可以认为是由两个单词组成。

在双字中,低位字是低位字(低位字的位置,因为x86是小端)。 高位字是高位字(高位存储器地址)。

寄存器不区分已签名的无符号值。没有两种单独的数据类型,正如您通常在更高级别的语言中所考虑的那样。只有使用指令操作单词/双字时,才会发挥有符号和无符号之间的区别。有三类指令:

  • 无符号指令,将寄存器/内存中的值视为无符号值。示例:ja(如果超过则跳转)。

  • 签名指令,将寄存器/内存中的值视为有符号值。示例:jg(如果大于,则跳转)。

  • 不可知指令,其行为方式是将值解释为有符号还是无符号无关紧要。示例:add(有符号和无符号加法是相同的,因为这是二进制补码运算的属性)。

x86指令的任何参考页/文档都应指定指令是有符号还是无符号。如果未指定,则该指令是不可知的。

希望这有助于澄清一些事情!