16位模式下VCVTSD2USI指令:能否写入16位通用寄存器?
关于VCVTSD2USI在16位模式下的寄存器使用问题
核心结论
AVX512系列指令(包括VCVTSD2USI)不支持16位模式(无论实模式还是D=0的16位保护模式代码段),英特尔官方文档仅明确其兼容32位和64位模式,因此16位模式下执行这类指令属于未定义行为。
细节说明
- 从指令编码设计来看,EVEX.W位仅用于区分32位(W0)或64位(W1)通用寄存器,不存在对应16位寄存器的编码位,硬件本身不会在16位模式下解析出AX这类16位操作数。
- 像NDISASM 2.15这类反汇编器在16位模式下将其反汇编为
vcvtsd2usi eax,xmm0,只是反汇编器的推测性输出,并非硬件实际执行逻辑——硬件在16位模式下根本不识别EVEX前缀的AVX512指令,执行时会直接触发非法操作异常(#UD)。
反汇编器适配建议
在16位模式下遇到EVEX前缀的AVX512指令时,应将其标记为无效指令,或明确标注“该指令不支持16位模式”,而非强行映射到32位或16位寄存器。
内容的提问来源于stack exchange,提问作者vitsoft
相关产品推荐
相关产品推荐

