是否有 x86 操作码用于将立即字节移动到直接内存位置(不使用寄存器)?

发布于 2024-12-04 05:13:17 字数 163 浏览 5 评论 0原文

有没有办法将特定的立即字节大小的数字“移动”到直接内存位置?即

MOV 10h,ffffh

要将值16写入内存地址65535?如果是这样,那是哪个操作码,或者我必须先将内存地址存储到寄存器中?

Is there a way to 'mov'e a specific immediate byte-size number into a direct memory location? I.e.

MOV 10h,ffffh

to write the value 16 into the memory address 65535? If so, which opcode is that, orwould I have to store a memory address into a register first?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

物价感观 2024-12-11 05:13:17

是的。操作码是C6。您应该免费下载英特尔 ISA 文档的副本,这些文档免费可用

对于您的后续问题:您的示例的完整编码是:

  c6      04      25   ff ff 00 00   10
opcode  modr/m   sib     address     immediate

Yes. The opcode is C6. You should download a copy of the Intel ISA documents, which are freely available.

To your follow-up question: the full encoding of your example is:

  c6      04      25   ff ff 00 00   10
opcode  modr/m   sib     address     immediate
幸福%小乖 2024-12-11 05:13:17

英特尔手册第 2 卷指令集参考 - 325383-056US 2015 年 9 月 第 3.2 节“MOV—移动
" 有一个表,其中包含:

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 表示寄存器或内存位置
  • 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,后面紧随其后。

Intel Manual Volume 2 Instruction Set Reference - 325383-056US September 2015 Section 3.2 "MOV—Move
" has a table which contains:

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

Then you must know that:

  • r/m means register or memory location
  • imm means immediate

So those are the encodings you are looking for.

More empirically you could also have just tried it out and decompiled:

mov byte [0x1234678], 0x9A

Then:

as --32 -o a.o a.S
nasm -felf32 -o a.o a.asm

Gives:

00000000 <.text>:
   0:    c6 05 78 56 34 12 9a    movb    $0x9a,0x12345678

So we conclude that c6 is the opcode, with ModR/M 05, and immediates following.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文