Assembly x86汇编编程(GAS语法):如何将2^32-1的值转换为长

Assembly x86汇编编程(GAS语法):如何将2^32-1的值转换为长,assembly,x86,unsigned,gnu-assembler,att,Assembly,X86,Unsigned,Gnu Assembler,Att,我试图通过以下代码将2^32-1(4294967295)的值放入一个长标签中: .data num: .long 4294967295 但是,当我将变量推入寄存器(movl num,%ecx)后查看寄存器中的数据时,被除数显示为-1。该程序在32位计算机上运行。这似乎很奇怪,因为32位长的字符不应该存储为32位整数,4294967295和-1是相同的;这只是一个将值解释为无符号还是有符号的问题。@NateEldredge我如何强制我的汇编程序将值解释为无符号?您编写的代

我试图通过以下代码将
2^32-1(4294967295)
的值放入一个长标签中:

.data
    num:
        .long 4294967295

但是,当我将变量推入寄存器(
movl num,%ecx
)后查看寄存器中的数据时,被除数显示为
-1
。该程序在32位计算机上运行。这似乎很奇怪,因为32位长的字符不应该存储为32位整数,4294967295和-1是相同的;这只是一个将值解释为无符号还是有符号的问题。@NateEldredge我如何强制我的汇编程序将值解释为无符号?您编写的代码使得,在有区别的少数地方,您可以执行对无符号值做正确处理的指令。例如,在比较时,您使用
ja/jb
而不是
jg/jl
,在乘法或除法时使用
mul/div
而不是
imul/idiv
。在输出数字时,您可以对其进行适当的格式化(例如,
printf
使用
%u
而不是
%d
)。如果您想显示实际代码以及您认为错误的原因,这会有所帮助。如果您在调试器中检查寄存器,只需告诉调试器将值打印为无符号。例如,在gdb中,
print/u$ecx
。但这与程序本身无关。@NateEldredge是否有指向x86 AT&T语法命令资源的链接,这些命令与无符号数字的使用有关(我知道比较是ja/jb,但加法/减法/右移/左移怎么办)?