繁体   English   中英

寄存器的十六进制值? 86

[英]Hex values of registers? x86

MOV DL,AL

“MOV DL”= B2

但是AL的十六进制字节值是多少? 这些列在哪里?

我才意识到它必须是另一个操作码! 谁能指出我正确的方向?

英特尔架构软件开发人员手册第2卷:指令集参考手册 ,表3-1。 注册编码与+ rb,+ rw和+ rd命名法相关联,第3-3页:

AL = 0 AX = 0 EAX = 0
CL = 1 CX = 1 ECX = 1
DL = 2 DX = 2 EDX = 2
BL = 3 BX = 3 EBX = 3
AH = 4 SP = 4 ESP = 4
CH = 5 BP = 5 EBP = 5
DH = 6 SI = 6 ESI = 6
BH = 7 DI = 7 EDI = 7

回答你的问题(“啊哈。很难找到将寄存器移入寄存器的指令列表。你能解决问题吗?”):

首先是一些鱼:(对于8位注册表)

8a c0        mov     al, al
8a c1        mov     al, cl
8a c2        mov     al, dl
8a c3        mov     al, bl
8a c8        mov     cl, al
8a c9        mov     cl, cl
8a ca        mov     cl, dl
8a cb        mov     cl, bl
8a d0        mov     dl, al
8a d1        mov     dl, cl
8a d2        mov     dl, dl
8a d3        mov     dl, bl
8a d8        mov     bl, al
8a d9        mov     bl, cl
8a da        mov     bl, dl
8a db        mov     bl, bl

以下是如何开始钓鱼:

在intel指令集手册中,在3-402页中查找MOV指令。 您将找到一个表格,其中列出了MOV指令的各种风格,从以下开始:

88 /r MOV r/m8,r8 Move r8 to r/m8
89 /r MOV r/m16,r16 Move r16 to r/m16
89 /r MOV r/m32,r32 Move r32 to r/m32
8A /r MOV r8,r/m8 Move r/m8 to r8
8B /r MOV r16,r/m16 Move r/m16 to r16
8B /r MOV r32,r/m32 Move r/m32 to r32

注意我们上面的鱼如何使用8A操作码。 您可能猜到,r8是一个8位寄存器,r / m8可以是8位寄存器,也可以是来自存储器的字节。 另请注意,不同的MOV操作码可用于16位和32位寄存器和值(r16,r32)。 第3-2至3-5页介绍了可以在MOV指令上指定的各种类型的参数。

但是,您可能会说,这并没有告诉您如何构造指令中的后续字节。 为此,请参阅第2-1节 - 一般指令格式,从第2-1页开始。 x86指令可以由最多6个字节的序列组成:前缀,操作码,ModR / M,SIB,位移和立即值。 我们的寄存器移动指令很简单,只包括操作码(8A)和ModR / M字节。

ModR / M字节的细分记录在2.4节,以及第2-5到2-6页的无所不包的表格中。 您会发现ModR / M字节可以编码源寄存器和目标寄存器。 例如,要从AL移动到DL,您将使用D0 ModR / M值,给出8A D0指令。

阅读“英特尔®64和IA-32架构软件开发人员手册第2A卷:指令集参考,AM”

您可以在http://www.sandpile.org上找到x86的一些很好的表中的所有操作码

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM