Assembly 程序集中堆栈上的负结果

Assembly 程序集中堆栈上的负结果,assembly,stack,negative-number,att,Assembly,Stack,Negative Number,Att,组装AT&T 嗨, 我在尝试执行subl时遇到问题 特别是我正在尝试做x-y,其中x

组装AT&T

嗨, 我在尝试执行subl时遇到问题

特别是我正在尝试做x-y,其中x。 但是正确的结果并没有放在堆栈上

下面是一段代码:

....
call read             # Function to read a number (i.e. 5)
movl %eax, -8(%ebp)   # Copy the number read into the stack.
....
call read             # Function to read a number (i.e. 15)
movl %eax, -28(%ebp)  # Copy the number read into the stack.
....
movl -8(%ebp), %eax   # Copy the number 5 in EAX.
subl -28(%ebp), %eax  # EAX = 5 - 15
movl %eax, -32(%ebp)  # Put the result in -32(%ebp)
....
如果我打印-32(%ebp),我不会得到-10(5-15),但会得到一个奇怪的符号

所以,问题是:如何在不改变其形式的情况下将负数存储在堆栈上

非常感谢你


AlfonZ

错误在于您的打印功能不支持负数

可以在堆栈(或其他位置)上存储负数,而无需更改其形式。但您需要使用该存储值的任何东西来理解它是一个有符号的量


打印函数将小于10的任何值视为单个非负数字(通过向其添加“0”并打印该单个字符)。当您将“0”添加到负数并打印该字符时,您会看到一个“奇怪的符号”。

您是否使用了一个可以处理32位有符号数字的打印函数?您会看到什么“奇怪的符号”?调试器为EAX显示了什么值?@SuperBiasedMan在本例中,使用5-15,即-10,我会获得符号“&”。如果我尝试使用10-15,也就是-5,我会得到符号“+”。@AlfonZ我问你EAX中有什么是因为你没有告诉我们。“一些奇怪的符号”几乎不够描述性。EAX中的实际十六进制值是多少?