x86
x86 은 프로세서가 알아듣는 명령의 규격입니다. 어떤 바이트가 어떤 동작을 뜻하는지, 값을 담아 두는 레지스터가 무엇인지를 문서가 정해 둡니다. 이 글은 인텔이 내는 매뉴얼을 정본으로 삼습니다.
쉽고 빠른 이해
x86 은 프로세서가 어떤 바이트를 받으면 어떤 동작을 할지 정해 둔 규격입니다. 예를 들어 특정 바이트 값이 "레지스터 값을 메모리로 옮겨라"처럼 특정 동작을 뜻하도록 정해 둡니다.
인텔 같은 제조사가 여러 세대에 걸쳐 프로세서를 내놓아도, 예전에 짠 프로그램이 새 칩에서도 그대로 돌아야 합니다. 바이트와 동작의 대응이 세대마다 바뀌면 그게 깨집니다. 그래서 문서 하나가 값을 못박아 두고, 세대가 바뀌어도 계속 그 값을 지킵니다.
정하는 것은 이렇게 나뉩니다.
- 어떤 바이트가 어떤 명령을 뜻하는지
- 값을 담아 두는 레지스터가 무엇인지, 이름과 크기가 무엇인지
- 프로세서가 놓일 수 있는 동작 모드가 무엇이고, 모드마다 어떤 명령을 쓸 수 있는지
대가는 쌓임입니다. 옛 이름과 옛 모드를 지우지 않고 계속 얹기만 해서, 지금 프로세서는 레지스터 이름이 세대별로 겹쳐 있고 동작 모드도 넷을 한꺼번에 가지고 있습니다.
상세
규격의 정본은 「Intel 64 and IA-32 Architectures Software Developer's Manual」입니다. 이 문서 묶음은 Intel 64 와 IA-32 아키텍처 프로세서의 아키텍처와 프로그래밍 환경을 서술한다고 스스로 적습니다. 인텔 문서가 이 규격을 부르는 이름은 IA-32 와 Intel 64 입니다. IA-32 는 32비트 쪽을 가리키고, Intel 64 는 거기에 64비트 확장(IA-32e 모드)을 더한 쪽입니다 — Intel 64 프로세서도 IA-32 가 지원하던 비64비트 모드를 그대로 돌립니다.
무엇을 정하는 문서인지는 권 구성이 보여줍니다. Volume 1 은 Intel 64 와 IA-32 프로세서의 기본 아키텍처와 프로그래밍 환경을 서술합니다. Volumes 2A · 2B · 2C · 2D 는 프로세서의 명령어 집합과 opcode(어떤 바이트가 어떤 동작을 뜻하는지 정하는 값) 구조를 서술합니다. 이 두 묶음이 대상으로 삼는 독자는 둘입니다. 응용 프로그래머, 그리고 운영체제나 시스템 소프트웨어를 작성하는 프로그래머입니다. Volumes 3A · 3B · 3C · 3D 는 프로세서의 운영체제 지원 환경을 서술합니다. 이 묶음이 대상으로 삼는 독자는 운영체제와 BIOS(Basic Input/Output System, 기본 입출력 시스템) 설계자입니다.
규격이 프로그램에게 보이는 얼굴은 실행 환경입니다. Chapter 3 은 어셈블리 언어 프로그래머에게 보이는 Intel 64·IA-32 프로세서의 기본 실행 환경을 서술한다고 밝힙니다. 프로세서가 명령을 어떻게 실행하고 데이터를 어떻게 저장하고 다루는지를 적는 자리입니다. 여기서 말하는 실행 환경에는 메모리(주소 공간), 범용 데이터 레지스터, 세그먼트 레지스터, 플래그 레지스터, 명령 포인터 레지스터가 들어갑니다.
한 칩의 문서가 아닙니다. §1.1 은 이 매뉴얼 묶음이 다루는 프로세서로 Pentium 프로세서, P6 제품군 프로세서, Pentium 4 프로세서를 먼저 댑니다. 이어 Intel Core i7 과 Xeon 을 비롯한 세대별 프로세서를 목록으로 늘어놓습니다. 칩이 세대를 넘어가도 같은 문서가 계속 값을 정합니다.
출처 문서
정본은 열 권으로 이루어져 있습니다. Volume 1 표지의 주석이 그 열 권을 Order Number 와 함께 나열합니다.
| 권 | Order Number |
|---|---|
| Basic Architecture | 253665 |
| Instruction Set Reference, A-L | 253666 |
| Instruction Set Reference, M-U | 253667 |
| Instruction Set Reference, V | 326018 |
| Instruction Set Reference, W-Z | 334569 |
| System Programming Guide, Part 1 | 253668 |
| System Programming Guide, Part 2 | 253669 |
| System Programming Guide, Part 3 | 326019 |
| System Programming Guide, Part 4 | 332831 |
| Model-Specific Registers | 335592 |
같은 주석이 설계 요구를 검토할 때는 열 권을 전부 참조하라고 적습니다.
판을 대는 자리는 표지입니다. 이 글이 근거로 삼은 Volume 1 표지에는 Order Number: 253665-087US 와 March 2025 가 적혀 있습니다. 인용할 때 이 번호와 날짜를 함께 대야
어느 판을 말하는지가 정해집니다.
권 번호가 두 이름으로 적힌다
표지 주석은 명령어 집합 레퍼런스를 A-L · M-U · V · W-Z 네 권으로 셉니다. Chapter 1 은 같은 것을 Volumes 2A · 2B · 2C · 2D 로 묶어 부릅니다. Order Number 는 253666 · 253667 · 326018 · 334569 로 양쪽이 같습니다. 시스템 프로그래밍 가이드도 마찬가지여서 Part 1 부터 Part 4 라는 이름과 Volumes 3A 부터 3D 라는 이름이 같은 번호를 가리킵니다. Model-Specific Registers 는 표지 주석에서는 이름으로만 불리고 Chapter 1 에서는 Volume 4 로 불립니다. 문서를 검색으로 찾을 때 이름이 갈리는 자리입니다.
요구 강도가 적히는 자리
명령마다 어느 모드에서 쓸 수 있는지는 문장이 아니라 표의 칸으로 적힙니다. Instruction
Set Reference 의 명령 페이지에는 니모닉(MOV 처럼 같은 동작을 가리키는 이름) 한 줄마다
인코딩(그 동작을 실제 바이트로 옮기는 방식 하나하나)이 여러 줄 붙고, 인코딩 줄마다
64-Bit Mode 칸과 Compat/Leg Mode 칸이 붙습니다. 뒤엣것은 호환 모드와 레거시 모드를
묶어 가리키는 칸입니다. 호환 모드는 IA-32e 모드의 하위 모드로, 대부분의 레거시 16비트·
32비트 애플리케이션을 다시 컴파일하지 않고 돌립니다. 레거시 모드 쪽에 정확히 어느
모드가 묶이는지는 이 표 자체가 밝히지 않습니다. 각 모드가 무엇인지 자세한 것은 뒤
갈래 절에서 다룹니다. 그 칸에는 그 인코딩을 그 모드에서 쓸 수 있다는 Valid 또는
쓸 수 없다는 N.E. 가 들어갑니다.
같은 니모닉이라도 인코딩에 따라 두 칸의 값이 다릅니다. REX(Register Extension,
레지스터 확장을 뜻하는 관용적 풀이) 프리픽스(opcode 앞에 붙어 그 인코딩의 뜻을 바꾸는
바이트)가 붙은 REX.W + 89 /r 는 64-Bit Mode 칸이 Valid 이고 Compat/Leg Mode
칸이 N.E. 입니다. 어느 모드를 대상으로 코드를 만드는지가 정해져야 그 인코딩을 써도
되는지가 정해집니다.
명세가 구현에 넘긴 자리
규격이 값을 못박지 않고 구현에 넘긴 자리가 있습니다. 그 가운데 명세가 정하지 않고 비워 둔 네 자리만 봅니다.
| 자리 | 문서가 적은 것 |
|---|---|
| 호환 모드를 켜는 일 | 운영체제가 코드 세그먼트(실행할 명령이 담긴 세그먼트) 단위로 켠다 |
| 64비트 모드를 켜는 일 | 운영체제가 코드 세그먼트 단위로 켠다 |
| 선형 주소를 물리 주소에 대응시키는 방식 | 선형 주소(소프트웨어가 쓰는 주소)를 물리 주소(메모리 칩의 실제 주소)에 직접 대응시키거나 페이징을 거쳐 대응시킨다 |
| 시스템 관리 모드가 하는 일 | 전원 관리·시스템 보안 같은 플랫폼 고유 기능. 운영체제나 시스템 소프트웨어가 구현한다 |
예시
MOV 명령의 인코딩 표
Instruction Set Reference 의 「MOV—Move」 페이지에 실린 표입니다. 왼쪽 칸이 실제로 메모리에 놓이는 바이트입니다. 오른쪽으로 갈수록 그 바이트가 무엇을 뜻하는지가 적힙니다.
Opcode Instruction Op/En 64-Bit Mode Compat/Leg Mode Description
88 /r MOV r/m8, r8 MR Valid Valid Move r8 to r/m8.
89 /r MOV r/m16, r16 MR Valid Valid Move r16 to r/m16.
89 /r MOV r/m32, r32 MR Valid Valid Move r32 to r/m32.
REX.W + 89 /r MOV r/m64, r64 MR Valid N.E. Move r64 to r/m64.
8A /r MOV r8, r/m8 RM Valid Valid Move r/m8 to r8.
8B /r MOV r16, r/m16 RM Valid Valid Move r/m16 to r16.
8B /r MOV r32, r/m32 RM Valid Valid Move r/m32 to r32.
REX.W + 8B /r MOV r64, r/m64 RM Valid N.E. Move r/m64 to r64.
B0+ rb ib MOV r8, imm8 OI Valid Valid Move imm8 to r8.
B8+ rd id MOV r32, imm32 OI Valid Valid Move imm32 to r32.
REX.W + B8+ rd io MOV r64, imm64 OI Valid N.E. Move imm64 to r64.
C7 /0 id MOV r/m32, imm32 MI Valid Valid Move imm32 to r/m32.
한 니모닉에 인코딩이 여러 줄 붙습니다. 88 과 8A 는 둘 다 MOV 이지만 레지스터와
메모리 가운데 어느 쪽이 목적지인지가 다릅니다. 89 /r 는 MOV r/m16, r16 행과
MOV r/m32, r32 행에 같은 값으로 나옵니다. B0+ rb ib 나 B8+ rd id 처럼 opcode 에
더하기와 뒤따르는 표기가 붙은 줄도 있습니다. REX.W 가 앞에 붙은 세 줄은
64-Bit Mode 칸만 Valid 입니다. 즉 opcode 바이트 하나만으로는 인코딩이 정해지지
않고, 함께 붙는 표기(레지스터냐 메모리냐, 크기가 몇 비트냐, REX.W 가 붙었냐)가
그 값을 마저 정합니다.
범용 레지스터 이름
Volume 1 의 §3.4.1 이 앞서 실행 환경에서 말한 범용 데이터 레지스터를 자세히 다룹니다 — 32비트 범용 레지스터 여덟 개와 각각의 쓰임을 적습니다.
| 레지스터 | 문서가 적은 쓰임 |
|---|---|
| EAX(extended accumulator) | 피연산자와 결과 데이터를 담는 누산기 |
| EBX(extended base) | DS(data segment) 세그먼트 안 데이터를 가리키는 포인터 |
| ECX(extended counter) | 문자열 연산과 루프 연산의 카운터 |
| EDX(extended data) | 입출력 포인터 |
| ESI(extended source index) | DS 레지스터가 가리키는 세그먼트 안 데이터 포인터. 문자열 연산의 출발지 포인터 |
| EDI(extended destination index) | ES(extra segment) 레지스터가 가리키는 세그먼트 안 데이터 포인터. 문자열 연산의 목적지 포인터 |
| ESP(extended stack pointer) | 스택 포인터. SS(stack segment) 세그먼트 안 |
| EBP(extended base pointer) | 스택 위 데이터 포인터. SS 세그먼트 안 |
이름이 계층으로 겹칩니다. 범용 레지스터의 하위 16비트는 8086 과 Intel 286 프로세서에 있던 레지스터 집합에 그대로 대응하고, AX(accumulator)·BX(base)·CX(counter)· DX(data)·BP(base pointer)·SI(source index)·DI(destination index)·SP(stack pointer) 라는 이름으로 부를 수 있습니다. EAX · EBX · ECX · EDX 의 하위 두 바이트는 각각 AH(high byte)·BH(high byte)·CH(high byte)·DH(high byte)(상위 바이트)와 AL(low byte)·BL(low byte)·CL(low byte)·DL(low byte)(하위 바이트)라는 이름으로 부를 수 있습니다.
원문의 Figure 3-5 가 EAX 를 예로 이 겹침을 그림으로 보입니다. 8비트 이름 둘이 먼저 16비트 이름 하나로 묶이고, 그 16비트 이름이 다시 32비트 레지스터 하나로 묶이는 것을 두 단계로 보입니다.
packet-beta 0-7: "AL" 8-15: "AH"
0~7번 비트가 AL 이고 8~15번 비트가 AH 입니다. 이 둘을 합친 0~15번 비트를 AX 라고 부릅니다.
packet-beta 0-15: "AX" 16-31: "이름 없음"
여기에 16~31번 비트(원문에 따로 이름이 없는 자리입니다)를 더한 0~31번 비트 전체가 EAX 입니다. 같은 겹침이 BX·CX·DX 에도 그대로 반복됩니다. 64비트 모드에서는 EAX 를 다시 0~63번 비트로 넓힌 것이 RAX(64-bit) 인데, 이 확장은 Figure 3-5 가 아니라 Table 3-2 가 보입니다.
64비트 모드에서는 부를 수 있는 이름이 한 벌 더 늘어납니다. §3.4.1.1 은 64비트 모드에 범용 레지스터가 열여섯 개 있고 기본 피연산자 크기가 32비트라고 적습니다. REX 프리픽스가 붙는지에 따라 갈리는 이름을 Table 3-2 가 정리합니다.
REX 프리픽스가 붙으면 8비트 쪽에 DIL(DI 의 low byte)·SIL(SI 의 low byte)· BPL(BP 의 low byte)·SPL(SP 의 low byte)이 새로 생깁니다. 64비트 쪽에는 EAX부터 EBP까지를 다시 넓힌 RAX·RBX(64-bit)·RCX(64-bit)·RDX(64-bit)·RDI(64-bit)· RSI(64-bit)·RBP(64-bit)·RSP(64-bit) 와, 아예 새로 생긴 R8(64-bit register 8번)부터 R15(64-bit register 15번)까지 여덟 개가 늘어납니다. R8 부터 R15 까지도 폭에 따라 이름이 갈려서 byte 폭이면 R8B(byte)부터 R15B(byte)까지, word 폭이면 R8W(word)부터 R15W(word)까지, doubleword 폭이면 R8D(doubleword)부터 R15D(doubleword)까지로 부릅니다.
| 레지스터 종류 | REX 없이 | REX 와 함께 |
|---|---|---|
| Byte | AL, BL, CL, DL, AH, BH, CH, DH | AL, BL, CL, DL, DIL, SIL, BPL, SPL, R8B - R15B |
| Word | AX, BX, CX, DX, DI, SI, BP, SP | AX, BX, CX, DX, DI, SI, BP, SP, R8W - R15W |
| Doubleword | EAX, EBX, ECX, EDX, EDI, ESI, EBP, ESP | EAX, EBX, ECX, EDX, EDI, ESI, EBP, ESP, R8D - R15D |
| Quadword | N.A. | RAX, RBX, RCX, RDX, RDI, RSI, RBP, RSP, R8 - R15 |
R8D 부터 R15D 까지와 R8 부터 R15 까지가 새로 생긴 범용 레지스터 여덟 개입니다.
Quadword 칸이 REX 없이는 N.A. 인 것이 64비트 레지스터를 부르려면 REX 가 필요하다는
표시입니다. 이 N.A. 는 위 MOV 인코딩 표의 N.E. 와는 다른 표에 적힌 값입니다 —
N.E. 는 그 모드에서 그 인코딩을 쓸 수 없다는 표시이고, N.A. 는 REX 없이는 그 폭의
레지스터 자체가 없다는 표시입니다.
갈래
프로세서가 어느 동작 모드에 있느냐가 갈리는 축입니다. §3.1 은 동작 모드가 어떤 명령과 어떤 아키텍처 기능에 접근할 수 있는지를 정한다고 적습니다. IA-32 아키텍처가 지원하는 기본 동작 모드는 보호 모드, 리얼 어드레스 모드, 시스템 관리 모드 셋입니다. 여기에 Intel 64 아키텍처가 IA-32e 모드를 더합니다.
리얼 어드레스 모드와 보호 모드는 초기 세대의 프로세서가 그대로 들여온 모드고, IA-32 아키텍처 자체도 그 세대를 거치며 32비트로 넓어졌습니다. 연도가 남아 있는 세 대목만 추리면 이렇게 이어집니다.
timeline
title IA-32 아키텍처가 넓혀 온 순서
1978 : 8086 · 8088 (16비트 레지스터, 20비트 주소 지정) : 리얼 어드레스 모드의 뿌리
1982 : Intel 286 (24비트 베이스 주소) : 보호 모드 도입
1985 : Intel386 (IA-32 최초의 32비트 프로세서) : 32비트 레지스터·32비트 주소 버스 도입
Intel386 은 모드를 새로 더하지는 않았지만 IA-32 아키텍처 최초의 32비트 프로세서로 32비트 레지스터와 32비트 주소 버스를 더했습니다. 시스템 관리 모드와 IA-32e 모드는 이 연표에 연도가 남아 있지 않습니다.
리얼 어드레스 모드·보호 모드·시스템 관리 모드 사이에서 문서가 실제로 밝히는 전환 조건을 모으면 이렇게 그려집니다. IA-32e 모드로 들어가는 조건은 문서에 없어 화살표로 못 그렸습니다.
stateDiagram-v2
state "리얼 어드레스 모드" as real
state "보호 모드" as prot
state "시스템 관리 모드" as smm
state "IA-32e 모드" as ia32e
state "호환 모드" as compat
state "64비트 모드" as m64
[*] --> real : 전원 켜짐 · 리셋
real --> prot : 전환
real --> smm : SMI 신호
prot --> smm : SMI 신호
ia32e --> smm : SMI 신호
state ia32e {
compat --> m64 : 코드 세그먼트 단위
m64 --> compat : 코드 세그먼트 단위
}
프로세서는 전원이 켜지거나 리셋되면 리얼 어드레스 모드에 놓이고, 거기서 보호 모드로 전환하는 능력을 갖습니다. 시스템 관리 모드로는 뒤 절이 다루는 인터럽트 신호가 오면 들어가는데, 문서는 이 신호가 어느 모드에서 오든 가리지 않습니다. IA-32e 모드에 들어간 뒤에는 운영체제가 코드 세그먼트 단위로 호환 모드와 64비트 모드를 오갑니다. 아래 절이 넷을 하나씩 짚습니다.
리얼 어드레스 모드
Intel 8086 프로세서의 프로그래밍 환경을 확장과 함께 구현한 모드입니다. 그 확장에는 보호 모드나 시스템 관리 모드로 전환하는 능력이 들어갑니다. 프로세서는 전원이 켜지거나 리셋된 뒤에 이 모드에 놓입니다.
이 환경의 뿌리는 1978년의 16비트 프로세서입니다. §2.1.1 은 IA-32 아키텍처 제품군에 앞서 8086 과 8088 이 있었다고 적습니다. 8086 은 16비트 레지스터와 16비트 외부 데이터 버스를 가졌습니다. 20비트 주소 지정으로 1MByte 주소 공간을 냈습니다. 세그멘테이션을 IA-32 아키텍처에 들여온 것도 8086 과 8088 입니다. 16비트 세그먼트 레지스터가 최대 64KByte 짜리 메모리 세그먼트를 가리키는 방식입니다.
보호 모드
프로세서의 기본 상태입니다. 보호되고 멀티태스킹되는 환경에서 리얼 어드레스 모드용 8086 소프트웨어를 직접 실행하는 능력이 이 모드가 가진 능력 가운데 하나입니다. 그 기능을 virtual-8086 모드라고 부르지만 실제로 프로세서의 모드는 아니라고 문서가 덧붙입니다.
이 모드를 들여온 것은 1982년의 Intel 286 프로세서입니다. 세그먼트 레지스터의 내용을 디스크립터 테이블을 가리키는 셀렉터나 포인터로 씁니다. 디스크립터는 24비트 베이스 주소를 줍니다. 그래서 물리 메모리를 최대 16MByte 까지 씁니다. 세그먼트 교체 단위의 가상 메모리 관리와 여러 보호 장치도 이 모드가 줍니다. 세그먼트 한계 검사, 읽기 전용·실행 전용 세그먼트 옵션, 네 개의 특권 레벨이 그 장치입니다.
시스템 관리 모드
시스템 관리 모드는 SMM(system management mode, 시스템 관리 모드)이라고도 부릅니다. 운영체제나 시스템 소프트웨어에게 전원 관리나 시스템 보안 같은 플랫폼 고유 기능을 구현할 투명한 메커니즘을 주는 모드입니다. 외부 SMI(system management interrupt) 핀(문서 표기로 SMI#)이 활성화되거나 APIC(advanced programmable interrupt controller, 고급 프로그래머블 인터럽트 컨트롤러)로부터 SMI 신호를 받으면 프로세서가 이 모드로 들어갑니다.
이 모드는 SL(Intel 문서가 뜻을 풀지 않고 쓰는 접미사)이 붙은 Intel386 SL 과 Intel486 SL 프로세서와 함께 도입되었습니다. Pentium 프로세서 제품군에 와서 IA-32 의 표준 기능이 되었습니다.
flowchart TD
A["Intel386 SL · Intel486 SL 프로세서"] -->|도입| B["Pentium 프로세서 제품군"]
B -->|IA-32 의 표준 기능이 됨| C["IA-32 표준 기능"]
IA-32e 모드
Intel 64 아키텍처가 더한 모드입니다. Intel 64 아키텍처는 소프트웨어가 쓰는 선형 주소 공간을 64비트로 늘리고 물리 주소 공간을 최대 52비트까지 지원합니다. IA-32e 모드에는 하위 모드가 둘 있습니다.
호환 모드는 대부분의 레거시 16비트·32비트 애플리케이션을 64비트 운영체제 아래에서 다시 컴파일하지 않고 돌게 합니다. 그래서 64비트 운영체제 하나가 두 종류를 함께 받습니다. 64비트 모드로 도는 64비트 애플리케이션, 호환 모드로 도는 레거시 32비트 애플리케이션입니다.
64비트 모드는 64비트 선형 주소 공간에 접근하도록 작성된 애플리케이션을 64비트 운영체제가 돌리게 합니다. 범용 레지스터와 SIMD(Single Instruction Multiple Data, 단일 명령 다중 데이터) 확장 레지스터는 여덟 개에서 열여섯 개로 늘어납니다. 범용 레지스터는 64비트로 넓어집니다. 늘어난 레지스터에 접근하려고 REX 라는 새 opcode 프리픽스를 들여왔습니다. 두 하위 모드 모두 운영체제가 코드 세그먼트 단위로 켭니다. 64비트 모드의 기본 주소 크기는 64비트입니다. 기본 피연산자 크기는 32비트입니다. Intel 64 아키텍처 프로세서는 IA-32 아키텍처가 지원하던 비64비트 레거시 모드를 전부 돌릴 수 있어서 기존 IA-32 소프트웨어를 지원합니다.
관련 항목
규격이 값을 정하는 요소
opcode · 명령어 집합 · 니모닉 · 범용 레지스터 · 세그먼트 레지스터 · 플래그 레지스터 · 명령 포인터 · REX 프리픽스 · 피연산자 크기 · 주소 공간 · 세그멘테이션 · 메모리 모델 · 플랫 메모리 모델
규격이 시스템 소프트웨어에 주는 장치
페이징 · 가상 메모리 · PAE(Physical Address Extensions, 물리 주소 확장) · PSE(Page Size Extensions, 페이지 크기 확장) · 특권 레벨 · 보호 링 · 게이트 · 디스크립터 테이블 · 인터럽트 · 예외 · 프로시저 호출 · CALL · RET · ENTER · LEAVE · 섀도 스택 · SYSENTER · SYSEXIT · Model-Specific Registers
확장 명령군
MMX · SSE(Streaming SIMD Extensions) · SSE2(Streaming SIMD Extensions 2) · SSE3(Streaming SIMD Extensions 3) · SSSE3(Supplemental Streaming SIMD Extensions 3) · SSE4(Streaming SIMD Extensions 4) · AES-NI(Advanced Encryption Standard New Instructions) · AVX(Advanced Vector Extensions) · AVX2(Advanced Vector Extensions 2) · AVX-512 · AVX10(Advanced Vector Extensions 10) · FMA(Fused Multiply Add) · XSAVE(eXtended state SAVE) · TSX(Transactional Synchronization Extensions) · CET(Control-Flow Enforcement Technology) · AMX(Advanced Matrix Extensions)
규격과 맞세워지는 대립 개념
CISC(Complex Instruction Set Computer) · RISC(Reduced Instruction Set Computer) · ARM
이것에 관여하는 역할·참여자
어셈블리 · ABI(Application Binary Interface) · 엔디언 · 마이크로코드 · CPU(Central Processing Unit) · CPUID(CPU IDentification 명령)
다른 이름: IA-32 · Intel 64