如何从 asm 列表中确定使用哪个 x86 内存操作数宽度和类型?

问题描述 投票:0回答:1

同一指令有多个版本:

IDIV M32
IDIV R32
IDIV M64
IDIV R64
(https://www.felixcloutier.com/x86/idiv)

如何了解使用的是哪一个?来说说吧

vdiv(std::vector<int, std::allocator<int> >&):
        mov     rcx, QWORD PTR [rdi]
        mov     eax, DWORD PTR [rcx+4]
        cdq
        idiv    DWORD PTR [rcx+8]
        mov     DWORD PTR [rcx], eax
        ret

因为使用int所以是32位的吗?它使用 64 位 rcx 寄存器,所以它是 64 位吗?可能是32位,但是是M还是R?如何找出(M/R)两者之间的区别?

c++ assembly x86 x86-64 gnu-assembler
1个回答
0
投票

'R' 是 '注册 ,如 ah/al/ax/eax/bx/cx/dx... 等。

'M'是'Memory',你的内存地址

R8 = 8 位寄存器,如 ah/al/bx/bl/ch/cl/dh/dl

R16 = 16 位一,ax/bx/cx/dx/si/di/bp/sp

R32 = 32 位,EAX、ECX、EDX、EBX、ESP、EBP、ESI、EDI

R64 = RAX, RBX, RCX, RDX, RDI, RSI, RBP, RSP, R8~R15

M8 = 8 位(1Byte)内存,字节 ptr [si] ,字节 ptr [edx] ,

mov byte ptr [rdx], 255

M16 = 16 位(1Word),字 ptr [dl],字 ptr [esi],

mov WORD ptr [dh], 65535

M32 = 32 位(1Dword - 双字),DWord ptr [si],

mov DWORD ptr [bx], 10

M64 = 64 位(1qword)...

所以,

idiv DWORD PTR [xxx]
是M32

idiv QWORD PTR [xxx]
是M64

© www.soinside.com 2019 - 2024. All rights reserved.