Intel 80386 (ban đầu là 80386 và sau này còn gọi là i386) là bộ vi xử lý 32-bit được giới thiệu năm 1985. Nó có 275 000 transistor[2] và được sử dụng trong nhiều máy tính cá nhân cao cấp và máy trạm vào thời đó. 80386 là một mở rộng 32 bit của kiến trúc 80286. Tập lệnh, mô hình lập trình và các mã của nó vẫn là yêu cầu đối với các vi xử lý x86 32-bit, và chúng được gọi là kiến trúc i386, hay còn gọi là IA-32.

i386
Một chip Intel i386DX 16 MHz với bộ tản nhiệt gốm
Thông tin chung
Ngày bắt đầu sản xuấtTháng 10, 1985
Ngày ngừng sản xuất28 tháng 9, 2007[1]
Nhà sản xuất phổ biến
  • Intel
  • AMD
  • IBM
Hiệu năng
Xung nhịp tối đa của CPU12 MHz đến 40 MHz
Độ rộng dữ liệu32 bits (386SX: 16 bits)
Độ rộng địa chỉ32 bits (386SX: 24 bits)
Kiến trúc và phân loại
Công nghệ node1.5µm đến 1µm
Tập lệnhx86-32
Thông số vật lý
Bóng bán dẫn
  • 275,000–855,000[2]
Đồng vi xử lý
Đóng gói
  • PGA 132-pin, PQFP 132-pin; biến thể SX: PGA 88-pin, BQFP 100-pin với pitch 0.635mm
(Các) chân cắm
Lịch sử
Tiền nhiệmIntel 80286
Kế nhiệmi486
Trạng thái hỗ trợ
Không được hỗ trợ
Intel A80386DX-20 CPU die image

i386 có thể thực thi chính xác các chương trình cho các vi xử lý 16-bit trước đó là 808680286. Qua thời gian, các phiên bản cải tiến trên cùng một kiến trúc i386 nhanh gấp hàng trăm lần phiên bản gốc (và nhanh gấp hàng nghìn lần so với 8086). Một phiên bản 20 MHz có tốc độ thực thi lên tới 4-5 triệu dòng lệnh mỗi giây. Phiên bản nhanh nhất của Intel có xung 33 MHz và thực thi được khoảng 11,4 triệu dòng lệnh mỗi giây.[3]

Quá trình phát triển i386 bắt đầu vào năm 1982 với tên gọi nội bộ là P3.[4] Bản vẽ cuối của nó được hoàn thiện vào tháng 7 năm 1985.[4] 80386 được ra mắt dưới dạng các bản mẫu tiền sản xuất dành cho các nhà phát triển phần mềm vào tháng 10, 1985.[5] Quá trình sản xuất ở quy mô lớn bắt đầu vào tháng 6, 1986.[6][7] Các bo mạch chủ và hệ thống đầu tiên sử dụng 80386 không ổn định và có giá thành cao. Máy tính cá nhân đầu tiên sử dụng một vi xử lí 80386 là Compaq Deskpro 386.[8] Nó cũng đi vào lịch sử như là máy tính cá nhân tương thích IBM đầu tiên thiết lập một tiêu chuẩn không phải do IBM.

Vào tháng 5 2006, Intel thông bố rằng sẽ dừng việc sản xuất các chip i386 vào cuối tháng 9 năm 2007.[9] Mặc dù từ lâu nó đã không còn xuất hiện trong các máy tính cá nhân, Intel và một số công ty vẫn sản xuất các chip 386 dành cho hệ thống nhúng. Các hệ thống như vậy xuất hiện nhiều trong các công nghệ hàng không và các thiết bị âm nhạc. Linux ngưng hỗ trợ các vi xử lý 386 vào ngày 11 tháng 12 năm 2012, trong phiên bản 3.8.[10]

Kiến trúc

sửa
 
Sơ đồ khối của thiết kế i386
Các thanh ghi của i386
31 ... 15 ... 07 ... 00 (vị trí bit)
Thanh ghi chính (8/16/32 bits)
EAX AX AL Accumulator
ECX CX CL Count
EDX DX DL Data
EBX BX BL Base
Thanh ghi trỏ (16/32 bits)
ESP SP Stack Pointer
EBP BP Base Pointer
ESI SI Source Index
EDI DI Destination Index
Bộ đếm chuơng trình (16/32 bits)
EIP IP Instruction Pointer
Đoạn (16 bits)
  CS Code Segment
  DS Data Segment
  ES Extra Segment
  FS F Segment
  GS G Segment
  SS Stack Segment
Thanh ghi trạng thái
  17 16 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 (vị trí bit)
  V R 0 N IOPL O D I T S Z 0 A 0 P 1 C EFlags

Bộ xử lý 80386 là một bước tiến đáng kể của dòng vi xử lý x86. Các vi xử lý trước đó chỉ có các thanh ghi 16-bit và sử dụng cơ chế bảo vệ và quản lý bộ nhớ thông qua đoạn (segment). 80386 được thiết kế với đường ống lệnh (pipeline) sáu giai đoạn, mở rộng kiến trúc 16 bit lên thành 32 bit và tích hợp một bộ quản lý bộ nhớ sử dụng trang (paging).[11] Nhờ đó việc thiết kế các hệ điều hành với bộ nhớ ảo trở cho kiến trúc nên dễ dàng hơn nhiều. Ngoài ra 80386 còn hỗ trợ các thanh ghi gỡ lỗi.

80386 có ba chế độ vận hành: chế độ thực (real mode), chế độ bảo vệ (protected mode) và chế độ 8086 ảo (virtual 8086 mode). Chế độ bảo vệ xuất hiện trong 80286, nay được mở rộng để hỗ trợ lên tới 4 GB. Chế độ ảo 8086 là chế độ mới, cho phép chạy đồng thời nhiều chương trình viết cho chế độ thực trong một môi trường bảo vệ.

Khả năng thiết lập một mô hình bộ nhớ phẳng trong chế độ bảo vệ của 386, mặc dù nó sử dụng mô hình phân đoạn trong mọi chế độ, được xem là thay đổi quan trọng nhất của dòng vi xử lý x86, cho đến khi AMD giới thiệu kiến trúc x86-64 vào năm 2003.

Một số lệnh mới được thêm vào 386: BSF, BSR, BT, BTS, BTR, BTC, CDQ, CWDE, LFS, LGS, LSS, MOVSX, MOVZX, SETcc, SHLD, SHRD.

Hai thanh ghi mới được thêm vào dành cho mục đính sự dụng thông thường (FS và GS). Các thanh ghi gỡ lỗi DR0-DR7 được thêm vào cho các điểm dừng (breakpoint) sử dụng phần cứng.

Kiến trúc sư trưởng của dự án 80386 là John H.Crawford,[12] người có trách nghiệm mở rộng kiến trúc và tập lệnh của 80286 lên 32-bit, và phát triển vi mã cho 80386.

Các bộ xử lý i486Pentium P5 là các thiết kế kế thừa i386.

Các kiểu dữ liệu

sửa

Các các kiểu dữ liệu sau đây được hỗ trợ trực tiếp và xuất hiện trong ít nhất một phiên bản của mã i386. Chúng bao gồm:

[13]

  • Bit (giá trị boolean), bit field (nhóm lên tới 32 bit) và bit string (có độ dài lên tới 4 GBit).
  • 8-bit integer (byte), bao gồm dạng có dấu (khoảng −128..127) hay không dấu (khoảng 0..255).
  • 16-bit integer, bao gồm dạng có dấu (khoảng −32,768..32,767) hay không dấu (khoảng 0..65,535).
  • 32-bit integer, bao gồm dạng có dấu (khoảng −231..231−1) hay không dấu (khoảng 0..232−1).
  • Offset, một độ lệch 16 bit hoặc 32-bit trỏ tới một ô nhớ (sử dụng bất kỳ chế độ bộ nhớ nào).
  • Pointer, bao gồm phần gốc 16-bit và độ lệch 16 bit hoặc 32 bit.
  • Character (mã ký tự 8 bit).
  • String, một xâu các word 8 bit, 16 bit hoặc 32 bit (có độ dài lên tới 4 GBit).
  • BCD, các chữ số thập phân (0..9) mô tả bởi các byte chưa đóng gói.
  • Packed BCD, hai chữ số BCD trong một byte (khoảng 0..99)

Chương trình ví dụ

sửa

Đoạn mã dưới đây sử dụng các lệnh hợp ngữ i386 cho một chuơng trình con có tên là _strtolower. Chương trình này sao chép một xâu ký tự ASCIIZ được kết thúc bởi một ký tự null, sang một địa chỉ khác và biến cả các ký tự chữ hoa thành chữ thường. Quá trình sao chép diễn ra theo từng byte (mỗi ký tự).

                         
                         
                         
                         
                         
                         
                         
                         
                         
00000000                     
00000000  55
00000001  89 E5
00000003  8B 75 0C
00000006  8B 7D 08
00000009  8A 06
0000000B  46
0000000C  3C 41
0000000E  7C 06
00000010  3C 5A
00000012  7F 02
00000014  04 20
00000016  88 07
00000018  47
00000019  3C 00
0000001B  75 EC
0000001D  5D
0000001E  C3          
0000001F          
; _strtolower:
; Copy a null-terminated ASCII string, converting
; all alphabetic characters to lower case.
;
; Entry stack parameters
;      [ESP+8] = src, Address of source string
;      [ESP+4] = dst, Address of target string
;      [ESP+0] = Return address
;
_strtolower proc
            push    ebp             ;Set up the call frame
            mov     ebp,esp
            mov     esi,[ebp+12]    ;Set ESI = src
            mov     edi,[ebp+8]     ;Set EDI = dst
loop        mov     al,[esi]        ;Load AL from [src]
            inc     esi             ;Increment src
            cmp     al,'A'          ;If AL < 'A',
            jl      copy            ; Skip conversion
            cmp     al,'Z'          ;If AL > 'Z',
            jg      copy            ; Skip conversion
            add     al,'a'-'A'      ;Convert AL to lowercase
copy        mov     [edi],al        ;Store AL to [dst]
            inc     edi             ;Increment dst
            cmp     al,0            ;If AL <> 0,
            jne     loop            ; Repeat the loop
done        pop     ebp             ;Restore the prev call frame
            ret                     ;Return to caller
            end     proc

Ví dụ trên sử dụng con trỏ gốc, hay thanh ghi EBP, để tạo một khung lời gọi (call frame), một vùng trên stack chứa tất cả các tham số và biến cục bộ của hàm. Kiểu quy tắc lời gọi này hỗ trợ các mã đệ quy và reentrant, và được sử dụng trong các ngôn ngữ tương tự Algol kể từ thập niên 1950. Nó ngầm định một mô hình bộ nhớ phẳng, tức là các đoạn DS và ES cùng trỏ tới một vị trí trong bộ nhớ.

Tầm quan trọng kinh doanh

sửa

Máy tính cá nhân đầu tiên sử dụng i386 là Compaq Deskpro 386. Bằng cách mở rộng kiến trúc 16/24 bit của IBM PC/AT lên thành 32 bit, Compaq trở thành công ty đầu tiên thiết kế và sản xuất một bước cải tiến lớn trong nền tảng PC. IBM được liên hệ để trở thành khách hàng của 80386, tuy nhiên họ vẫn còn nắm giữ quyền sản xuất 80286. IBM chọn cách tiếp tục đầu tư cho 80286 thêm một vài năm nữa. Sự thành công của Compaq Deskpro 386 đóng vai trò quan trọng trong việc hợp pháp hóa nền công nghiệp PC và làm giảm tầm ảnh hưởng của IBM trong đó.

Trước 386, các khó khăn trong việc sản xuất chip và do nguồn cung không được đảm bảo dẫn tới việc yêu cầu các bộ phận bán dẫn phải được sản xuất bởi nhiều hãng khác nhau (multi-sourced). Tuy nhiên, trong suốt một thời gian dài (4,7 năm) chỉ có duy nhất Intel sản xuất 80386, do CEO của Intel lúc đó là Andy Groove quyết định không cấp phép vi xử lý cho bất kỳ hãng sản xuất nào khác. Quyết định này mang tới thành công lớn cho Intel trên thị trường. Việc độc quyền sản xuất 386 cũng giúp cho Intel có nhiều sự kiểm soát lên quá trình phát triển cũng như lợi nhuận trong những năm sau này.

AMD giới thiệu dòng vi xử lý tương thích của mình, Am386, vào tháng 3 năm 1991, sau khi vượt qua nhiều rào cản pháp lý. Nó chấm dứt giai đoạn độc quyền gần 5 năm của Intel đối với kiến trúc i386. Trong cùng năm IBM cũng được cấp phép để sản xuất các chip 386 dành riêng cho các máy tính và bo mạch chủ của hãng.

Sự lỗi thời

sửa

Windows 95 là phiên bản Windows 9x duy nhất chính thức hỗ trợ i386. Nó yêu cầu một chip 386DX, và khuyến nghị các vi xử lý i486 và tốt hơn.[14] Windows 98 yêu cầu 486DX hoặc cao hơn.[15] Trong các hệ điều hành Windows NT, phiên bản cuối cùng hỗ trợ i386 là 3.51.[16][17]

Debian gỡ bỏ hộ trợ 386 trong phiên bản 3.1 (Sarge) vào năm 2005.[18] Các nhà phát triển Linux kernel dừng hỗ trợ 386 kể từ tháng 12 năm 2011, với lý do các cản trở liên quan tới SMP, trong phiên bản 3.8.[10]

Chú thích

sửa
  1. ^ Product Change Notification.
  2. ^ a b mit.edu—The Future of FPGAs (Cornell) ngày 11 tháng 10 năm 2012
  3. ^ “Intel Architecure Programming and Information”. intel80386.com. Truy cập ngày 15 tháng 3 năm 2018.
  4. ^ a b Gomes, Lee (November–December 1985). Rant, Jon (biên tập). “Behind The Scenes: The Making Of The 386. Special 32-Bit Issue: 'A Well-Bred Classic The 80386'”. Solutions. Intel Corporation: 19.
  5. ^ Goering, Richard (tháng 12 năm 1985). “Development Tools Support 80386 Applications”. Computer Design. PennWell. 24 (17): 33–34. Truy cập ngày 14 tháng 10 năm 2021 – qua Gale OneFile.
  6. ^ Forbes, Jim (ngày 27 tháng 1 năm 1986). “Development of 386 Accelerating”. InfoWorld. InfoWorld Media Group. 8 (4): 5. ISSN 0199-6649. Introduced October 1985, production chip in June 1986.
  7. ^ Ranney, Elizabeth (ngày 1 tháng 9 năm 1986). “ALR Hopes to Beat Completion With Fall Release of 386 Line”. InfoWorld. InfoWorld Media Group. 8 (35): 5. ISSN 0199-6649. The first 80386 computers were released around October 1986.
  8. ^ “CRN”. ngày 27 tháng 6 năm 2009. Bản gốc lưu trữ ngày 27 tháng 6 năm 2009. Truy cập ngày 15 tháng 3 năm 2018 – qua archive.org.
  9. ^ “Intel cashes in ancient chips”. Bản gốc lưu trữ ngày 13 tháng 8 năm 2011. Truy cập ngày 18 tháng 5 năm 2006.
  10. ^ a b Larabel, Michael (ngày 12 tháng 12 năm 2012). “Linux Kernel Drops Support For Old Intel 386 CPUs”. Phoronix. Truy cập ngày 14 tháng 10 năm 2019.
  11. ^ Intel Corporation, "Extending the Legacy of Leadership: The 80386 Arrives", Special 32-Bit Issue Solutions, November/December 1985, page 2
  12. ^ “Intel Fellow—John H. Crawford”. Intel.com. ngày 16 tháng 8 năm 2010. Truy cập ngày 17 tháng 9 năm 2010.
  13. ^ A. K. Ray, K. M. Bhurchandi, “Advanced microprocessors and peripherals”.
  14. ^ “Windows 95 Installation Requirements”. Microsoft Support. Microsoft. ngày 17 tháng 12 năm 2000. Bản gốc lưu trữ ngày 19 tháng 10 năm 2004. Truy cập ngày 1 tháng 9 năm 2020.
  15. ^ “Windows 98 Product Guide: System Requirements”. microsoft.com. Microsoft. ngày 4 tháng 12 năm 1998. Lưu trữ bản gốc ngày 20 tháng 4 năm 1999. Truy cập ngày 31 tháng 8 năm 2020.
  16. ^ “Windows NT 3.5x Setup Troubleshooting Guide”. Microsoft Support. Microsoft. Bản gốc lưu trữ ngày 23 tháng 2 năm 2007. Truy cập ngày 31 tháng 8 năm 2020.
  17. ^ “Windows NT Workstation 4.0 - Requirements”. microsoft.com. Microsoft. ngày 29 tháng 1 năm 1999. Bản gốc lưu trữ ngày 2 tháng 2 năm 1999. Truy cập ngày 31 tháng 8 năm 2020.
  18. ^ “Release Notes for Debian GNU/Linux 3.1 ('sarge'), Intel x86 - Upgrades from previous releases”. debian.org. The Debian Project. tháng 6 năm 2005. Bản gốc lưu trữ ngày 3 tháng 5 năm 2023. Truy cập ngày 1 tháng 9 năm 2020.

Liên kết ngoài

sửa