Assembly 程序集中堆栈上的负结果
组装AT&T 嗨, 我在尝试执行subl时遇到问题 特别是我正在尝试做x-y,其中xAssembly 程序集中堆栈上的负结果,assembly,stack,negative-number,att,Assembly,Stack,Negative Number,Att,组装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中的实际十六进制值是多少?