如何在8086模式下强制NASM生成0x82操作码?
如何让NASM在
CPU 8086模式下生成0x82操作码 核心逻辑
0x82操作码对应带字节立即数的ADD/ADC/SUB/SBB/CMP/TEST指令,和0x80操作码语法重叠,但NASM默认优先选择0x80(0x80支持字节/字立即数,兼容性更广)。要触发0x82,需用NASM的strict关键字强制指定窄操作码类型。
可用指令示例
在CPU 8086伪指令之后,通过strict byte限定立即数,就能让NASM生成0x82操作码:
- 寄存器操作数场景:
CPU 8086 add strict byte al, 0x10 ; 输出字节:0x82 0xC0 0x10 adc strict byte bl, 0x20 ; 输出字节:0x82 0xD3 0x20 sub strict byte cl, 0x30 ; 输出字节:0x82 0xE1 0x30 sbb strict byte dl, 0x40 ; 输出字节:0x82 0xF2 0x40 cmp strict byte ah, 0x50 ; 输出字节:0x82 0xF4 0x50 test strict byte bh, 0x60 ; 输出字节:0x82 0xE7 0x60 - 内存操作数场景(需符合8086寻址规则):
CPU 8086 add strict byte [bx], 0x70 ; 输出字节:0x82 0x07 0x70 cmp strict byte [bp+si+0x80], 0x80 ; 输出字节:0x82 0x3C 0x80 0x80
注意事项
- 必须在
CPU 8086伪指令之后使用,否则NASM可能生成现代CPU兼容的操作码。 - 验证方式:用
nasm -f bin -o test.bin test.asm编译后,通过xxd test.bin查看十六进制输出,确认开头为0x82的指令字节。
内容的提问来源于stack exchange,提问作者Clamps
相关产品推荐
相关产品推荐

