Quiz Entry - updated: 2026.07.14
How can you tell whether code was compiled for IA-32 or x86-64?
Read the register names and argument passing: %r8–%r15 or arguments arriving in %rdi/%rsi means x86-64; everything via the stack with %eXX registers means IA-32.
A few quick visual tells separate the two:
| Feature | IA-32 (32-bit) | x86-64 (64-bit) |
|---|---|---|
| Registers | %eax, %ebx, %ecx… | %rax…, plus %r8–%r15 |
| Arguments | all on the stack | first 6 in registers |
| Frame pointer | almost always %ebp | often omitted |
| Pointer size | 4 bytes | 8 bytes |
| Stack ops | pushl, popl | pushq, popq |
IA-32 signature — arguments fetched as offsets from %ebp:
movl 8(%ebp), %eax
movl 12(%ebp), %edx
pushl %ebx
x86-64 signature — arguments already in registers, plus the new R-registers:
movq %rdi, %rax
movq %rsi, %rdx
movq %r12, -8(%rsp)
Quickest check: spotting any %r8–%r15, or argument use of %rdi/%rsi, is a dead giveaway that you're looking at 64-bit code.
Go deeper:
x86-64 (Wikipedia) — contrasts the 8 IA-32 vs 16 x86-64 registers.