我正在修改putchar
,push
和pop
。当我尝试推送 的值rcx
,对其进行操作,调用putchar
并将其弹出回 rcx 时,我发现 in 的值rcx
已更改为 0。就像在第一段代码中一样。
为了比较,我编写了第二段代码,在我 push 的地方rcx
,用它做一些不是的事情,然后将它putchar
弹回rcx
,rcx
仍然是它被推送的值。
mov rcx, 123
push rcx
inc rcx
call [putchar]
pop rcx
call [putchar]
mov rcx, 123
push rcx
inc rcx
pop r12
call [putchar]
mov rcx, r12
call [putchar]
putchar
真的清除堆栈吗?有谁知道如何保护堆栈(或至少是其中的重要部分)不受此影响?