我正在修改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真的清除堆栈吗?有谁知道如何保护堆栈(或至少是其中的重要部分)不受此影响?