汇编中的无符号整数

fri*_*bob 4 c x86 assembly unsigned-integer

全新的汇编需要一些无符号算术的帮助。从 C 程序转换是什么意思。

使用:

Linux

国家安全管理协会

x86(32 位)

我想从用户那里读入一个数字。我希望这个数字是无符号的。当我输入一个高于有符号整数限制的数字并使用信息寄存器时,我注意到我的寄存器存储为负数,这意味着发生了溢出。(显然输入的数字低于 max unsigned int)我如何将此寄存器视为无符号,以便我可以根据结果进行比较和跳转?

小智 8

在汇编中,没有不同的有符号和无符号类型。寄存器保存的值可以是有符号的也可以是无符号的,这取决于您如何看待它。

有迹象表明,与已签署的解释(一致的指令jgjl等),并与该无符号解释(一致的指令jajb等等)的cmp指令同时适用于-它设置可以用指令用于像国旗jl跳基于在有符号解释上,以及指令可以使用的标志,比如jb基于无符号解释跳转。无论您没有使用哪个标志,您都可以忽略。

因此,当您说“我的寄存器存储为负数”时,这是没有意义的。如果您选择以这种方式解释它,它只会显得消极。

  • 强制转换应该有效:`print (unsigned)$eax`。或者可能`print/u` (2认同)