有没有办法将特定的立即字节大小的数字“移动”到直接内存位置?即
MOV 10h,ffffh
将值 16 写入内存地址 65535 ?如果是,那是哪个操作码,或者我是否必须先将存储器地址存入寄存器?
16
65535
是 . 操作码是 C6 . 您应下载英特尔ISA文档的副本,即freely available .
C6
对于您的后续问题:您的示例的完整编码是:
c6 04 25 ff ff 00 00 10 opcode modr/m sib address immediate
Intel Manual Volume 2 Instruction Set Reference - 325383-056US September 2015 第3.2节"MOV—Move "有一个表,其中包含:
Opcode Instruction ---------------- ---------------- C6 /0 ib MOV r/m8, imm8 C7 /0 iw MOV r/m16, imm16 C7 /0 id MOV r/m32, imm32 REX.W + C7 /0 io MOV r/m64, imm32
那你必须知道:
r/m 表示寄存器或存储器位置
r/m
imm 表示立即
imm
所以那些是你正在寻找的编码 .
更经验的你也可以尝试一下并反编译:
mov byte [0x1234678], 0x9A
然后:
as --32 -o a.o a.S nasm -felf32 -o a.o a.asm
得到:
00000000 <.text>: 0: c6 05 78 56 34 12 9a movb $0x9a,0x12345678
因此,我们得出结论, c6 是操作码,其中包含ModR / M 05 ,以及后续内容 .
c6
05
2 回答
是 . 操作码是
C6
. 您应下载英特尔ISA文档的副本,即freely available .对于您的后续问题:您的示例的完整编码是:
Intel Manual Volume 2 Instruction Set Reference - 325383-056US September 2015 第3.2节"MOV—Move "有一个表,其中包含:
那你必须知道:
r/m
表示寄存器或存储器位置imm
表示立即所以那些是你正在寻找的编码 .
更经验的你也可以尝试一下并反编译:
然后:
得到:
因此,我们得出结论,
c6
是操作码,其中包含ModR / M05
,以及后续内容 .