x86 Architecture Overview
x86 Architecture Overview
x86 Architecture
Overview
The IA-32 is the instruction set architecture (ISA) of Intel’s most successful line of 32-bit processors, and the
Intel 64 ISA is its extension into 64-bit processors. (Actually Intel 64 was invented by AMD, who called it x86-64).
These notes summarize a few items of interest about these two ISAs. They in no way serve as a substitute for
reading Intel’s manuals.
CONTENTS
IA-32 and x86-64 • x86-64 Architecture Diagram • Registers • Instruction Set • Addressing Memory • Flags Register • The System Developer’s
Manual
https://cs.lmu.edu/~ray/notes/x86overview/ 1/9
6/28/22, 10:26 AM x86 Architecture Overview
https://cs.lmu.edu/~ray/notes/x86overview/ 2/9
6/28/22, 10:26 AM x86 Architecture Overview
Registers
Application Programmers generally use only the general purpose registers, floating point registers, XMM, and YMM
registers.
You can access the lower order 32-bits of each register using the names R0D...R15D. The “D” stands for
“doubleword” because strangely, the word “word” on this platform refers to a 16-bit quantity. Why?
Backward compatibilty! The x86-64 grew out of a 16-bit processor family created in the 1970s.
You can access the lower order 16-bits of each register using the names R0W...R15W.
You can access the lower order 8-bits of each register using the names R0B...R15B.
R0...R7 have aliases RAX, RCX, RBX, RDX, RSP, RBP, RSI, RDI, respectively.
R0D...R7D have aliases EAX, ECX, EBX, EDX, ESP, EBP, ESI, EDI, respectively.
R0W...R7W have aliases AX, CX, BX, DX, SP, BP, SI, DI, respectively.
R0B...R7B have aliases AL, CL, BL, DL, SPL, BPL, SIL, DIL, respectively.
Segment Registers
These are CS, DS, SS, ES, FS, and GS. I haven’t used them in 64-bit programming.
XMM Registers
These are 128-bits wide. They are named XMM0...XMM15. Use them for floating-point and integer arithmetic. You
can do operations on 128-bit integers, but you can also take advantage of their ability to do operations in parallel:
YMM Registers
These are 256-bits wide. They are named YMM0...YMM15. Use them for floating-point arithmetic. You can do:
FPU Registers
There are eight registers used for computing with 80-bit floating point values. The registers don’t have names
because they are used in a stack-like fashion.
Other Registers
Application programmers can remain oblivious of the rest of the registers:
The 8 32-bit processor control registers: CR0, CR1, CR2, CR3, CR4, CR5, CR6, CR7. The lower 16 bits of CR0 is
called the Machine Status Word (MSW).
The 4 16-bit table registers: GDTR, IDTR, LDTR and TR.
The 8 32-bit debug registers: DR0, DR1, DR2, DR3, DR4, DR5, DR6 and DR7.
The 5 test registers: TR3, TR4, TR5, TR6 and TR7.
The memory type range registers
The machine specific registers
The machine check registers
Instruction Set
See the SDM Volume 1, Chapter 5 for a nice overview of all of the processor instructions and Volume 2 for
complete information.
The following table shows most of the available instructions, using the instruction names as specified in the Intel
syntax. Not every processor supports every instruction, of course.
The vertical bar means OR, the square brackets mean OPTIONAL, and parentheses are used for grouping. For
example:
https://cs.lmu.edu/~ray/notes/x86overview/ 4/9
6/28/22, 10:26 AM x86 Architecture Overview
EMMS PTEST
PCMPEQQ
PACKUSDW
PCMP(E|I)STR(I|M)
PCMPGTQ
CRC32
POPCNT
Addressing Memory
In protected mode, applications can choose a flat or segmented memory model (see the SDM Volume 1, Chapter
3 for details); in real mode only a 16-bit segmented model is available. Most programmers will only use protected
mode and a flat-memory model, so that’s all we’ll discuss here.
The selector is one of the six segment registers; the base is one of the eight general purpose registers; the index is
any of the general purpose registers except ESP; the scale is 1, 2, 4, or 8; and the offset is any 32-bit number.
(Example: [fs:ecx+esi*8+93221] .) The minimal reference consists of only a base register or only an offset; a
scale can only appear if there is an index present.
selector
offset(base,index,scale)
https://cs.lmu.edu/~ray/notes/x86overview/ 6/9
6/28/22, 10:26 AM x86 Architecture Overview
Data Types
The data types are
Byte 8 7..0
Word 16 15..0
Doubleword 32 32..0
Quadword 64 63..0
Doublequadword 128 127..0
Little Endianness
The IA-32 is little endian, meaning the least significant bytes come first in memory. For example:
0 12
1 31 byte @ 9 = 1F
2 CB word @ B = FE06
3 74 word @ 6 = 230B
4 67 word @ 1 = CB31
5 45 dword @ A = 7AFE0636
6 0B qword @ 6 = 7AFE06361FA4230B
7 23 word @ 2 = 74CB
8 A4 qword @ 3 = 361FA4230B456774
9 1F dword @ 9 = FE06361F
A 36
B 06
C FE
D 7A
E 12
Note that if you draw memory with the lowest bytes at the bottom, then it is easier to read these values!
Flags Register
https://cs.lmu.edu/~ray/notes/x86overview/ 7/9
6/28/22, 10:26 AM x86 Architecture Overview
Many instructions cause the flags register to be updated. For example if you execute an add instruction and the
sum is too big to fit into the destination register, the Overflow flag is set.
3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0
1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
+---------------------------------------------------------------+
| | | | | | | | | | |I|V|V|A|V|R| |N| I |O|D|I|T|S|Z| |A| |P| |C|
| | | | | | | | | | |D|I|I|C|M|F| |T| P |F|F|F|F|F|F| |F| |F| |F|
| | | | | | | | | | | |P|F| | | | | | L | | | | | | | | | | | | |
+---------------------------------------------------------------+
The flags are described in Section 3.4.3 of Volume 1 of the SDM. To determine how each instruction affects the
flags, see Appendix A of Volume 1 of the SDM.
Volume 1:
Chapter 1 - About this manual
Chapter 2 - History of the IA-32 and Intel 64 architectures, a description of many of the
microarchitectures and processors and technologies
Chapter 3 - Basic execution environment
Chapter 4 - Data types
Chapter 5 - Instruction set summary. Lists all instructions and a brief (but not precise) description of
each. Instructions are grouped into convenient categories.
Chapter 6 - Details on calls and returns, and exceptions
Chapter 7 - All about general purpose instructions
Chapter 8 - All about FPU instructions
Chapter 9 - All about MMX instructions
Chapter 10 - All about SSE instructions
Chapter 11 - All about SSE2 instructions
Chapter 12 - All about SSE3, SSSE3, SSE4 and AESNI instructions
Chapter 13 - XSAVE
Chapter 14 - All about AVX, FMA, and AVX2 instructions
Chapter 15 - AVX-512
Chapter 16 - All about transactional synchronization instructions
Chapter 17 - Memory protection extensions
Chapter 18 - All about I/O instructions
Chapter 19 - How to determine what processor you have, and what its features are
https://cs.lmu.edu/~ray/notes/x86overview/ 8/9
6/28/22, 10:26 AM x86 Architecture Overview
https://cs.lmu.edu/~ray/notes/x86overview/ 9/9