我需要解决下面的问题,但我不理解解决方案所需的概念。
让我们考虑以下双字词串:B234 * A68C * h,* 52B4 * 78C8h,* 1AB3 * C470h,F9DC * 98B6 *小时。要求:
1)在屏幕上打印单词'排名,每个双字中包含最小值(考虑到 unsigned )
答案是'2112'(粗体字具有最小值)
2)在屏幕上打印具有最大值的字节的总和(考虑它们签名)
3)在屏幕上打印严格否定 *双字的低字*
如何区分已签名和未签名?什么意味着负面的低级词?它是否适合区间[0,255]中的值?
答案 0 :(得分:5)
字是16位。 双字是32位,可以认为是由两个单词组成。
在双字中,低位字是低位字(低位字的位置,因为x86是小端)。 高位字是高位字(高位存储器地址)。
寄存器不区分已签名的或无符号值。没有两种单独的数据类型,正如您通常在更高级别的语言中所考虑的那样。只有使用指令操作单词/双字时,才会发挥有符号和无符号之间的区别。有三类指令:
无符号指令,将寄存器/内存中的值视为无符号值。示例:ja
(如果超过则跳转)。
签名指令,将寄存器/内存中的值视为有符号值。示例:jg
(如果大于,则跳转)。
不可知指令,其行为方式是将值解释为有符号还是无符号无关紧要。示例:add
(有符号和无符号加法是相同的,因为这是二进制补码运算的属性)。
x86指令的任何参考页/文档都应指定指令是有符号还是无符号。如果未指定,则该指令是不可知的。
希望这有助于澄清一些事情!