【发布时间】:2021-01-29 03:29:06
【问题描述】:
我正在阅读 x86 英特尔文档上的 ADD 指令,一次一行,并尝试重现它,以便了解它们晦涩的符号是如何工作的,并弄清楚如何在没有 gcc/clang/ 的情况下生成机器代码llvm/等..
我目前被困在81 操作码对上:
81 /0 iw ADD r/m16, imm16 MI Valid Valid Add imm16 to r/m16.
81 /0 id ADD r/m32, imm32 MI Valid Valid Add imm32 to r/m32.
哪两个 NASM 指令调用示例(各一个)将生成与这些模式匹配的输出并为每个生成以 81 开头的输出?
当我尝试我认为可行的方法时,我得到完全不同的输出:
add ax, 6553
变成:
66 05 99 19
从这里:
bits 64
global start
section .text
start:
ADD ax, 6553
和
nasm -f macho64 test.asm
我可以让83 工作,例如:
83 /0 ib ADD r/m16, imm8
这样工作:
bits 16
global start
section .text
start:
add ax, 1
但是81的不行,只差imm16,我不明白。
【问题讨论】:
标签: assembly x86 nasm machine-code