汇编中的无符号整数

Unsigned integers in assembly

汇编新手需要一些无符号算术方面的帮助。从 C 程序转换意味着什么。

使用:

Linux

NASM

x86(32 位)

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

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

有符合有符号解释的指令(jgjl等)和符合无符号解释的指令(ja、[=13] =], 等) cmp 指令对两者都有效 - 它设置可由 jl 等指令使用的标志以根据带符号的解释跳转,以及可由 jb 根据无符号解释跳转。无论您不使用哪个标志,您都可以忽略。

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