c - 汇编语言棘手的内存地址

标签 c gcc assembly att

我们收到提示(使用 AT&T ASM)

eax      = A

ebx      = B

ecx      = &X

edx      = &Y

我知道 (%eax) 会抓取 A 内存位置中的数据,但是 (%edx) 会抓取什么呢?比如说通话

 movl (%edx), %ebx

还有

movl %eax, (%ecx)

第一个调用是否只是将 %ebx 的当前值替换为 &Y(y 的内存位置),第二个调用是否将内存位置 &X 中的数据替换为值 A?

movl %edx, %eda 操作怎么样?这是否只是将 &Y 的内存位置移动到 eax 中?

谢谢

最佳答案

从“C”语言的角度来看:

eax      = A

eax 获取 A 值的副本。

ebx      = B

ebx 获取 B 值的副本。

ecx      = &X

ecx 获取 X 的地址(或内存位置)。

edx      = &Y

edx 获取 y 的地址(或内存位置)。

关于c - 汇编语言棘手的内存地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23206591/

相关文章:

linux - Linux 上 RIP 相对寻址的段错误

c - 如何在 15 和 18 处处理此警告 ."warning: array subscript has type ‘char’ [-Wchar-subscripts]”

c - C 中的变量提升

c - 具有可变参数的函数。 open() 是如何工作的?

xcode - Xcode 或 gcc 是否有开发人员名称的宏?

c - 此代码的预期输出

c++ - 为什么 Clang std::ostream 会写入 std::istream 无法读取的 double 值?

assembly - Objdump 在编译的程序集上将 fsubrp 交换为 fsubp?

performance - Cortex M4 LDR/STR 时序

c - 如何使用 GCC 编译器强制执行结构位顺序?