You need to enable JavaScript to run this app. 为何tword为10字节而非20字节?相关类型大小命名规则咨询
优惠活动
大模型
产品
解决方案
定价
更多

为何tword为10字节而非20字节?相关类型大小命名规则咨询

xword系列命名的错位感,本质是x86架构演化中压根没做过长期统一的命名规划

核心认知误区

这套在汇编里常用的、带word后缀的操作数尺寸标注,从来不是一套“前缀对应数词N、代表N个基础word长度”的统一设计。它是跟着x86硬件几十年的发展逐步补全的标注体系,不同时期加进来的名称,命名来源完全独立,压根没有提前对齐过规则。

逐个拆解每个名称的实际来源

  • 通用整数操作数线的命名,是沿着2倍长度递增的数词逻辑做的:
    • word:16位/2字节,是8086时代定下的基础长度单位
    • dword:32位/4字节,前缀d-来自拉丁语duo(双),对应2个基础word,是32位通用寄存器时代引入的标注
    • qword:64位/8字节,前缀q-来自拉丁语quadri(四),对应4个基础word,是64位通用寄存器时代引入的标注
    • oword:128位/16字节,前缀o-来自拉丁语octo(八),对应8个基础word,是SSE指令集时代引入的标注。这几个顺着16→32→64→128位的2倍递增序列,完全符合数词命名的逻辑。
  • tword是完全不属于上述序列的“外来户”:
    这个标注是8087浮点协处理器配套推出的,全称是temporary word(临时操作数),对应x87 FPU内部用的10字节扩展浮点临时格式,和“前缀代表多少个word”的数词逻辑半毛钱关系都没有。它的长度恰好是10字节,才会让大家误以为t-是ten(十)的缩写,顺理成章推算成10个word也就是20字节,这是纯纯的语义误解。
  • 后期SIMD扩展的命名,直接跳脱了数词体系:
    到了AVX、AVX-512指令集阶段,需要标注256位、512位的操作数尺寸,已经找不到顺承数词逻辑的合适前缀了,干脆直接用对应硬件寄存器的名字来命名:
    • yword:256位/32字节,对应AVX架构的ymm寄存器
    • zword:512位/64字节,对应AVX-512架构的zmm寄存器

为什么会出现“oword比tword大”的反常感受

这种反常感完全来自大家的预设——默认所有带word后缀的名称,都是按同一套数词规则生成、前缀顺序和长度顺序严格对应的序列。但实际上:

  • oword是通用整数/SIMD操作数尺寸序列的成员,沿着2倍增长的规则一路涨到128位(16字节)
  • tword是浮点协处理器分支引入的特殊尺寸标注,本身长度就是固定的10字节,从来没参与过“按数词排大小”的排序逻辑
    两个名称来自完全不同的技术分支,从来没为了对齐长度、排序前缀做过统一设计,自然会出现字母顺序上靠后的oword实际存储长度更长的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.05 18:45:04