AVX-512FP16半精度浮点数Disp8*N压缩元素大小及NASM编译疑问
结论:这是NASM和NDISASM 3.02的bug
根据2026年3月版《Intel 64和IA-32架构软件开发手册》,VCMPSH指令的标量FP16操作定义明确:
- 内存操作数为
m16(2字节半精度浮点数),因此Disp8*N压缩寻址中的N=2字节(元素长度)。 - Disp8*N的计算规则是:
实际内存偏移 = Disp8值 × N。对于[RBP+4],实际偏移为4,因此Disp8值应为4 ÷ 2 = 02,对应指令编码的第7字节应为02。
NASM 3.02的问题在于:
- 汇编时错误地将N按4字节计算,得出Disp8值为
4 ÷ 4 = 01,生成了错误的编码62 F3 7E 08 C2 4D 01 00。 - NDISASM 3.02反汇编时虽能正确解析出内存地址
word [rbp+0x4],但未纠正编码中Disp8字段的错误,本质是汇编阶段的位移计算逻辑不符合Intel手册规范。
你的理解完全正确,这是NASM/NDISASM 3.02的实现bug。
内容的提问来源于stack exchange,提问作者vitsoft
相关产品推荐
相关产品推荐

