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

如何在MASM 32位代码中强制指定PUSH指令的操作数大小?

在MASM 5.0及以上版本中控制push指令长度的方法

MASM没有NASM里strict byte/strict dword这类直接关键字,但可以通过类型修饰符强制指定push指令的立即数长度,从而生成对应字节数的指令:

生成2字节push指令(操作码+1字节数据)

使用byte ptr修饰立即数,强制生成push imm8格式的指令(操作码0x6A + 1字节立即数):

push byte ptr 42   ; 编译后对应机器码:0x6A 0x2A(共2字节)

注:在16位模式下,该指令会将字节立即数零扩展为16位字再入栈;32位模式下则零扩展为32位双字入栈,但指令长度始终为2字节。

生成5字节push指令(操作码+4字节数据)

使用dword ptr修饰立即数,强制生成push imm32格式的指令(操作码0x68 + 4字节立即数):

push dword ptr 42   ; 编译后对应机器码:0x68 0x2A 0x00 0x00 0x00(共5字节)

注:如果不指定类型,MASM会自动将小立即数优化为push imm8格式,因此必须显式用dword ptr强制生成4字节立即数版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 22:29:55