X86

Thuật ngữ **x86** dùng để chỉ tới kiến trúc tập lệnh của dòng vi xử lý 8086 của Intel. 8086 được Intel đưa ra năm 1978.

Intel xem dòng phát triển 8086 là IA-32. Kiến trúc x86 này rất phổ biến cho các thế hệ máy tính cá nhân đang hiện hữu trong nhiều gia đình. Kiến trúc x86 gần như chiếm toàn bộ thị phần máy tính cá nhân,máy workstation và cả server thậm chí siêu máy tính. Vì tính phổ biến của nó và hỗ trợ tài liệu rất tốt từ Intel nên x86 được rất nhiều lập trình phần mềm viết chương trình chạy trên nó. Phần mềm được viết cho x86 bao gồm các nền OS: MS DOS, Window, Linux, BSD và các biến thể Unix.

Kiến trúc x86 không phổ biến hoặc phù hợp lắm với hệ thống nhúng. Nếu kiến trúc x86 được Intel gọi là IA-32 thì Intel còn có thế hệ không cùng kiến trúc là IA-64 hay Itanium. Itanium có sự tiến bộ hơn so với x86 với thiết kế ban đầu là 64 bit. Ngoài Intel sản xuất chip kiến trúc x86 còn có: AMD, VIA

## Lịch sử
Kiến trúc x86 xuất hiện khi bộ vi xử lý Intel 8086 ra đời 1978, một thiết kế 16 bit đầy đủ dựa trên 8 bit trước đó.
Sau đó là Intel 80386, bộ vi xử lý mở rộng 8086 từ 16->32 bit được giới thiệu vào 1985.
Intel 80486 vào 1989, tích hợp bộ xử lý dấu chấm động. 50 Mhz 80486 tốc độ trung bình 40 Mips.
Kế tiếp là Pentium, đời thứ năm vi kiến trúc, lần đầu tiên ra đời vào 22 tháng 3 năm 1993.
Dòng Pentium kết thúc vào năm 2006.
### 8086
Kiến trúc x86 lần đầu tiên xuất hiện là Intel 8086 vào năm 1978, một bộ vi xử lý đầy đủ 16 bit dựa trên 8008,8080. Mặc dù nhị phân không tương thích, nó được thiết kế để lập trình hợp ngữ
### 80386
Bộ vi xử lý này ra đời vào năm 1985, bắt đầu một thế hệ 32 bit hỗ trợ cho hệ điều hành đa tác vụ. Các thế hệ giống Unix bắt đầu được viết cho kiến trúc này bao gồm Linux, BSD và cả Windows
Các thế hệ tiếp theo mở rộng bộ chỉ lệnh như 80486, Pentium, Core 2 Duo,...
### Thời [[x86-64]]
Hiện tại x86-64 được phổ biến do nhu cầu không gian địa chỉ 32 bit hạn hẹp không phù hợp cho máy tính.
Đây là phần mở rộng của kiến trúc 80386 trở đi, bộ vi xử lý có thể tính toán với toán tử 64 bit, thanh ghi mở rộng ra 64 bit, 
và số lượng thanh ghi đa dụng từ 8 lên 16 thanh ghi, modRM byte thêm 4 bit modify.
tên thanh ghi trong hợp ngữ:
 rax, rcx, rdx, rbx, rbp, rsp, r9, r10, r11, r12, r13, 14, r15
số thanh ghi vector của SSE cũng được mở rộng từ 8 lên 16:xmm0->xmm15

## Kiến trúc x86
Thuật ngữ x86 chỉ đến họ kiến trúc tập lệnh dựa trên bộ vi xử lý 8086. Thuật ngữ x86 lấy từ hai số cuối của họ 8086. Rất nhiều thay đổi và mở rộng được thêm vào kiến trúc x86 qua nhiều năm. Kiến trúc này được hiện thực trong bộ vi xử lý từ Intel, AMD, VIA và nhiều tổ chức khác.

Như thuật ngữ trở thành phổ biến sau sự giới thiệu của 80386, nó thường hàm ý nhị phân tương đương với bộ tập lệnh 32 bit của 80386. Điều này đôi khi khẳng định x86-32 tách biệt với gốc 16 bit x86-16 hoặc từ 64 bit x86-64. Mặc dù bộ vi xử lý x86 sử dụng trong máy tính cá nhân mới và máy chủ.

Mặc dù 8086 chủ yếu phát triển cho hệ thống nhúng và máy tính nhỏ, dòng x86 sớm phát triển tính năng và sức mạnh xử lý. Ngày nay x86 phổ biến cả máy tính cá nhân trạm và di động và thay thế máy tính tầm trung và máy chủ,trạm dựa trên RISC. Một lượng lớn phần mềm bao gồm hệ điều hành như MS DOS, Windows, Linux, BSD, Solaris và Mac OS X hỗ trợ phần cứng x86.

8086 thực tế là chế độ thực của bộ vi xử lý ngày nay.

## Tổng quan
### Tính chất cơ bản của kiến trúc
Kiến trúc x86 có độ dài chỉ lệnh không cố định, chủ yếu hai mục đích của thiết kế CISC khẳng định tương thích ngược. Bộ tập lệnh không phải thuộc loại CISC đặc trưng nào tuy nhiên, cơ bản mở rộng có tính vị nhân hóa của phiên bản đơn giản 8 bit 8008,8080. Một byte có thể đánh địa chỉ được và hỗ trợ 2 byte được lưu trong bộ nhớ với trật tự nhỏ về cuối. Được truy xuất bộ nhớ đến địa chỉ không thẳng hàng với kích thước từ. Các phép toán có thể thực hiện với 8, 16, 32, 64 bit tùy theo thế hệ kiến trúc. Thực tế bộ tập chỉ lệnh không được cải thiện tốt hơn cho việc lập trình. Opcode chính của x86 có thể lên đến 3 byte mang lại khá linh động.

### Dấu chấm động và vector
Mang tới xử lý số chấm động với 80 bit thanh ghi, 8087 được phát triển cho 8086. Bộ vi xử lý x86 hiện đại, được tích hợp xử lý vector. Độ rộng của thanh ghi SIMD là 128 bit. Kế hoạch sắp tới là 256 bit SIMD
### Sự mở rộng hiện tại
Hiện tại kiến trúc x86 mở rộng 40 bit không gian địa chỉ cho Xeon và 48 bit cho K10, cho phép đến 1 tera byte bộ nhớ RAM.

## Phân đoạn
Mục này giới thiệu về phân đoạn
Máy tính mini trong cuối thập kỷ 1970 bị giới hạn 64 KB giới hạn địa chỉ, trong khi bộ nhớ ngày càng rẻ hơn. Một số máy tính mini như PDP-11 sử dụng các dãy hay khoang phức tạp, hoặc trong trường hợp VAX, thiết kế lại bvxl phức tạp hơn mà có thể xử lý địa chỉ 32 bit và dữ liệu. Gốc 8086, được phát triển từ bvxl 8085 và mục tiêu chủ yếu máy tính nhỏ, rẻ thì ngược lại sử dụng thanh ghi đoạn mà tăng độ rộng địa chỉ bộ nhớ lên chỉ 4 bit. Bằng cách nhân một địa chỉ 64KB (16 bit) bởi 16 (thêm 4 bit), địa chỉ 20 bit có thể đánh tổng công 1 megabyte (1,048,576 bytes), một con số khá lớn cho máy tính nhỏ vào thời bấy giờ. Cách địa chỉ này vẫn còn cho tới hiện tại, khi mà bộ vi xử lý khởi động thì vào chế độ thực trước (để tương thích hay sự duy trì hơi khó hiểu).Dữ liệu và mã có thể được quản lý một đoạn 16 bit với không gian 1MB địa chỉ, hoặc trình biên dịch có thể mở chế độ xa sử dụng 32 bit đoạn:offset. Điều này khá thú vị cho việc lập trình trong 8086. Vào 1985, mô hình đoạn 16 bit là một nhân tố hiệu quả bởi sự giới thiệu thanh ghi 32 bits offset, trong thiết kế 386. Tại chế độ thực, đoạn có thể đạt được bởi dịch địa chỉ đoạn qua trái 4 bit và thêm offset theo thứ tự để nhận được 20 bit địa chỉ. Ví dụ, nếu DS là A000h và SI là 5677h, DS:SI sẽ chỉ tại địa chỉ DSx10h+SI=A5677h. Tổng địa chỉ trong chế độ thực là 2^20 bytes, tương đối ấn tượng vào thời 1978.

## Bộ tập lệnh
Ước lượng khoảng hơn 100 tên lệnh trong hợp ngữ cho bộ vi xử lý 8086. Ví dụ:
 add [eax],ebx
 sub eax,5
 adc ecx,0
 xor eax,eax
 mov eax,0xabcd

Ví dụ này theo cú pháp Intel. Ngoài bộ tập lệnh phục vụ hệ điều hành và phần mềm,còn có tập lệnh vector giúp tăng tốc các ứng dụng đa truyền thông. Bộ tập lệnh mở rộng bao gồm x87,MMX, SSE,SSE2,SSE3,SSSE3,SSE4, AVX
### Danh sách chỉ lệnh
Đây là danh sách chỉ lệnh của 8086, phần chú ý cho biết tương thích với bvxl hiện tại chỉ lệnh nào chạy được trong x86-64:

## Tham khảo

## Liên kết ngoài
* 25 Years of Intel Architecture
* x86 CPUs guide