gpt4 book ai didi

assembly - 汇编变量是如何实现的?

转载 作者:行者123 更新时间:2023-12-03 06:22:47 25 4
gpt4 key购买 nike

我对 Assembly 中如何实现变量有点困惑。我知道以下声明在程序的 data 部分中创建一个命名内存位置:

.section .data
var:
.long 23

然后您可以访问变量,例如:

movl var, %eax //read from var location

我不清楚的是上述指令是如何实际实现的。我的印象是,内存引用,甚至是绝对内存引用,都需要先加载到寄存器中,然后才能使用。

汇编器是否需要将上述指令转换为多条指令,如:

leal var, %ebx
movl (%ebx), %eax

或者汇编器是否跟踪 var 的地址并像绝对立即访问一样访问该位置,例如:

movl ($addr_of_var), %eax

最佳答案

x86 指令集不需要在使用内存地址之前将其加载到寄存器中 - 几乎所有指令都可以在指令中使用直接或间接内存引用。请参阅Intel architecture manual了解更多详情。

首先将地址加载到寄存器中的要求是某些 RISC cpu(例如 MIPS)的特征。

关于assembly - 汇编变量是如何实现的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39969625/

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