What are the standard data sizes in x86-64 and their assembly suffixes?
Assembly instructions carry a one-letter suffix — b, w, l, q — that says how many bytes the operation works on (1, 2, 4, 8).
* AT&T tags operand width with b(1)/w(2)/l(4)/q(8) bytes, mirroring C's char/short/int/long; the q suffix is x86-64 only. *
Because a register like %rax can be touched at several widths, the assembler needs to know the operand size, and it gets it from a suffix on the mnemonic. The names are historical fossils: a "word" was 16 bits on the 8086, so a 32-bit value became a "long word" and a 64-bit value a "quad word."
| Suffix | Name | Size | C type |
|---|---|---|---|
| b | byte | 1 byte | char |
| w | word | 2 bytes | short |
| l | long | 4 bytes | int |
| q | quad | 8 bytes | long, pointer |
movb $0x41, %al # 1 byte
movw $0x1234, %ax # 2 bytes
movl $0x12345678, %eax # 4 bytes
movq $0x123456789, %rax # 8 bytes
Tip: remember "word = 16-bit" and the rest follows — long is two words, quad is four. The q suffix exists only on x86-64; IA-32 stops at l.
Go deeper:
Word (Wikipedia) — why 'word' stays 16-bit on x86, giving long and quad their names.