【发布时间】:2015-07-07 11:26:30
【问题描述】:
组装 AT&T。
嗨, 当我尝试执行 subl 时遇到问题。
特别是我正在尝试 x - y where 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),但会得到一个奇怪的符号。
所以,问题是:如何在不改变形式的情况下将负数存储在堆栈上?
非常感谢。
阿方兹
【问题讨论】:
-
您是否使用了可以处理 32 位有符号数字的打印功能?
-
你得到了什么“奇怪的符号”?
-
您的调试器显示 EAX 的值是多少?
-
@SuperBiasedMan 在这种情况下,使用 5 - 15,即 -10,我获得符号“&”。如果我尝试使用 10 - 15,即 -5,我会得到符号“+”。
-
@AlfonZ 我之所以问你 EAX 中有什么是因为你实际上并没有告诉我们。 “一些奇怪的符号”几乎没有足够的描述性。 EAX 中实际的十六进制值是多少?
标签: assembly stack negative-number att