装配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
答案 0 :(得分:2)
错误在于您的打印功能不是为支持负数而设计的。
您可以在堆栈(或其他位置)上存储负数而不更改其形式。但是你需要使用该存储值的任何用途来理解它是一个有符号的数量。
您的打印功能会将任何小于10的值视为单个非负数(通过向其添加“0”并打印该单个字符)。当您将“0”添加到负数并打印该字符时,您会得到您观察到的“奇怪符号”。