gpt4 book ai didi

assembly - 为什么在 Pentium IA-32 上不能将一个字节压入堆栈?

转载 作者:行者123 更新时间:2023-12-03 22:29:20 24 4
gpt4 key购买 nike

我了解到您不能将一个字节直接推送到 Intel Pentium 的堆栈上,有人可以向我解释一下吗?

我得到的原因是因为 esp 寄存器是可字寻址的(或者,这是我们模型中的假设)并且它必须是“偶数地址”。我会假设递减某个 32 位二进制数的值不会与寄存器的对齐方式混淆,但显然我还不够了解。

我尝试了一些 NASM 测试,结果发现如果我声明一个变量(bite db 123)并将其压入堆栈,esp 会减少 4(表示它压入了 32 位?)。但是,“推字节咬”(对不起,我选择了变量名)会导致一种错误:

test.asm:10: 错误:不支持的非 32 位 ELF 重定位

在这个困难时期,任何智慧之言都将不胜感激。我是一年级本科生,很抱歉我在这方面的天真。

最佳答案

在某些情况下,它会使堆栈指针无法完成其工作。例如,假设您有一个函数将一个字节压入堆栈,然后调用另一个函数。该调用最终会尝试将未对齐的返回地址写入堆栈,从而导致错误。

关于assembly - 为什么在 Pentium IA-32 上不能将一个字节压入堆栈?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2586591/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com