装配中堆栈的负面结果

时间:2015-07-07 11:26:30

标签: 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

1 个答案:

答案 0 :(得分:2)

错误在于您的打印功能不是为支持负数而设计的。

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

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