10得票2回答
如何根据十六进制机器码确定x86指令的操作数大小?

例如,给定一个十六进制数:83 E4 F0 通过查看Intel开发者手册,我可以得出 83 表示 and ,F0表示-16。观察E4,可以解码源/目的地寄存器是SP或ESP。 因此,我可以得出结论,该十六进制数表示and $-16,% ESP 或and $-16,% SP 。但是,在手册中...

35得票3回答
如何阅读英特尔操作码符号表示法

我正在阅读一些材料,引用了Intel的vol.2 SDM x86手册关于操作码和汇编指令的机器代码编码,但我不明白像cw、cd、/2、cp或/3这样的内容跟随操作码字节后面是什么意思。 这是一些x86汇编语言中的CALL指令的不同形式。它们允许程序跳转到一个子程序(或函数)并在完成后返回到调...

9得票1回答
指令解码器如何区分前缀和主操作码?

我正试图理解x86指令编码格式。我读过的所有来源仍然让这个主题很困惑。我开始有点明白了,但我遇到了一个难以理解的问题,那就是CPU指令解码器如何区分操作码前缀和操作码。 我知道指令的整个格式基本上取决于操作码(当然,在操作码中定义了额外的位字段)。有时指令没有前缀,而操作码是第一个字节。解码...

13得票3回答
x86-64的jmpq指令为什么只需要32位长度地址?

当我使用objdump -D来反汇编一个二进制文件时,典型的jmpq代码如e9 7f fe ff ff,用于表示负偏移量。但是,x86-64的地址是64(48)位(据我所知),那么这个32位的地址7f fe ff ff如何表示64位绝对地址的负偏移量? 此外,是否有其他像jmp和jmpq一样...

12得票7回答
如何确定x86指令的长度?

我在研究汇编语言中的不同指令,但对于如何确定不同操作数和操作码的长度感到困惑。 这是一些需要通过经验来了解的东西吗?还是有办法找出哪种操作数/运算符组合占用了多少字节? 例如:push %ebp ; takes up one byte mov %esp, %ebp ; takes up t...

8得票1回答
x86的XOR操作码差异

查看http://ref.x86asm.net/coder32.html,我发现有两个与语句 xor eax,eax 匹配的操作码: 1) 操作码31 XOR r/m16/32 r16/32 2) 操作码33 XOR r16/32 r/m16/32 这两...

13得票1回答
CPU如何区分'CALL rel16' (E8 cw)和'CALL rel32' (E8 cd)?

CPU如何区分CALL rel16(E8 cw)和CALL rel32(E8 cd)? 根据this site所述,参照英特尔架构手册,CALL rel16和CALL rel32的操作码分别为E8 cw和E8 cd。 这让我想知道,CPU如何区分这些操作码,因为E8 cw可能是E8 cw的...

20得票3回答
如何在x86中编码相对较短的jmp

假设我想要使用EB操作码进行短跳转,jmp rel8表示短跳转Intel手册中的相关条目: EB CB 或 JMP rel8 "短跳转,RIP = RIP + 8位位移符号扩展到64位" (其中CB是一个有符号的字节,表示与EIP寄存器中方向相关的相对偏移量) 在这个短...

7得票1回答
x86多字节NOP和指令前缀

作为一个小回顾,x86架构将0x0F 0x1F [mod R/M]定义为多字节NOP。 现在我正在研究一个8字节的NOP特定情况:我已经得到了 0x0F 0x1F 0x84 0x__ 0x__ 0x__ 0x__ 0x__ 最后5个字节具有任意值。 第三个字节[mod R/M]的拆分...

36得票4回答
如何计算跳转目标地址和分支目标地址?

我对汇编语言还很陌生。我正在阅读关于MIPS架构的资料,但是我对跳转目标地址和分支目标地址以及如何计算它们感到困惑。