同一指令有多个版本:
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)两者之间的区别?
'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