You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AT&T汇编语法中括号为何随上下文变化?%rdi与(%rdi)有何区别?

%rdi 与 (%rdi) 的区别解析

你的核心理解是完全正确的,针对mov和cmp这类指令,两者的差异可以明确拆解为:

  • %rdi:直接使用寄存器值
    当指令中写%rdi时,操作的就是RDI寄存器里存储的数值本身。比如你提到的场景:

    • 如果RDI存的是ASCII字符'w'的数值(0x77),mov %rdi, %rax会把0x77直接拷贝到RAX寄存器;cmp %rdi, %rbx则是把RBX寄存器的值和0x77做比较。
    • 如果RDI存的是0x1007bf,%rdi就代表这个十六进制数值本身,指令会直接对这个数值进行操作。
  • (%rdi):以寄存器值为地址访问内存
    当指令中写(%rdi)时,是把RDI里的数值当作内存地址,去访问该地址对应的内存单元中的数据。对应你的场景:

    • 若RDI存的是0x77('w'的ASCII码),(%rdi)指的是尝试读取内存地址0x77处的值——但要注意,现代操作系统中低地址(比如0x77)属于未映射的无效空间,实际执行这类指令会触发段错误(Segmentation Fault),所以这种用法仅存在理论寻址逻辑,实际代码中无法正常运行。
    • 若RDI存的是0x1007bf,mov (%rdi), %rax会把内存地址0x1007bf处的8字节(x86-64架构下默认操作数大小)数据加载到RAX;cmp (%rdi), %rbx则是比较RBX的值和该地址内存中的数据。

内容的提问来源于stack exchange,提问作者JBatswani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 14:25:01