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

如何确定AT&T格式x86汇编指令的大小后缀?

AT&T汇编指令后缀判定规则及习题解答

核心判定规则

AT&T格式汇编的指令后缀,作用是明确标注操作数的位宽,常用后缀和对应位宽关系固定:

  • b:匹配1字节(8位)操作数
  • w:匹配2字节(16位)操作数
  • l:匹配4字节(32位)操作数
  • q:匹配8字节(64位)操作数

判定逻辑只需要记住两点,没有额外复杂规则:

  1. 通用寄存器的位宽是固定的,只要指令里出现明确位宽的寄存器,直接匹配对应后缀即可,比如%al对应b、%ax对应w、%eax对应l、%rax对应q。
  2. 立即数本身没有位宽,无明确长度声明的内存操作数,也可以通过另一个操作数的位宽确定后缀,同一条指令的两个操作数的位宽必须一致,不存在跨位宽操作的情况。

习题逐题推导

你贴的两张习题图的所有题目都可以用上面的规则直接推导:
题目图片1
举几个典型例子:

  • 操作数出现%eax(32位寄存器),对应后缀l,指令为movl
  • 操作数出现%dl(8位寄存器),对应后缀b,指令为movb
  • 操作数出现%ax(16位寄存器),对应后缀w,指令为movw
  • 如果两个操作数都没有明确位宽(比如立即数写内存),题目会给出对应变量类型,char对应b、int对应l、long对应q即可。

题目图片2
所有算术类指令的后缀判定规则和mov指令完全一致:

  • 操作数出现%bl(8位寄存器),add指令后缀为b,即addb
  • 操作数出现%rsp(64位栈指针寄存器),sub指令后缀为q,即subq
  • 操作数出现%si(16位寄存器),inc指令后缀为w,即incw

把常见寄存器的位宽记熟,这类题不会有出错的可能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 20:09:04