我正在参加组装课程,但我遇到了堆栈框架的问题。要求之一是通过使用堆栈而不是寄存器来传递参数。我试图通过引用传递一个变量,然后在过程中更改该变量的值。这是我到目前为止所拥有的。WriteString
并且ReadDec
来自随书一起提供的(尔湾)图书馆。
.data
numVal DWORD ?
.code
main PROC
PUSH OFFSET numVal
CALL GetNumber
exit
main ENDP
GetNumber PROC
PUSH edx
PUSH ebp
MOV ebp, esp
CALL ReadDec ; gets what the user inputs and puts in eax
MOV [ebp+12], eax
; MOV numVal, eax ; this works just fine
POP ebp
POP edx
RET 4
GetNumber ENDP
END main
但是,如果我尝试打印出来或numVal
在其他地方使用,无论用户输入什么,它都会返回为 0。我假设它将用户输入的任何内容发送到ebp+12
,这是指该地址而不是numVal
. 那么,如果这是正确的,有没有办法numVal
通过引用传递或其他方式来做到这一点?或者是我注释掉的行,MOV numVal, eax
唯一的方法吗?
PS。这是作业,我试图将其标记为这样,但它不允许我这样做。
聚苯乙烯。这也是我第一次在溢出上发帖,我非常感谢任何建设性的批评,以改善发帖、礼仪等。