MASM64中是否存在可直接压入16位立即数的汇编指令?
MASM64本身就原生支持该需求,不需要手动写入机器码实现16位立即数压栈。
你只需要在push指令后显式指定操作数的位宽为word即可,写法如下:
push word 0
原理解释
x64模式下,push指令默认对立即数操作时,会将32位立即数符号扩展为64位后压栈,因此push 0默认触发64位压栈逻辑,RSP会减8。
当你显式添加word修饰符指定16位操作位宽后,MASM64会自动为指令添加0x66操作数宽度前缀,生成的机器码和你之前硬编码的00006866h完全一致,执行后RSP减2,刚好符合你压入16位立即数后给popf使用的需求。
改写后的完整可运行代码
.code FlagFunction PROC push word 0 ; 原生16位立即数0压栈,无需硬编码机器码 popf ret FlagFunction ENDP END
内容的提问来源于stack exchange,提问作者Kozue Mukai
相关产品推荐
相关产品推荐

