x86

จากวิกิพีเดีย สารานุกรมเสรี
ข้ามไปที่การนำทาง ข้ามไปที่การค้นหา

x86
ดีไซเนอร์Intel , AMD
บิต16 บิต , 32 บิตและ64 บิต
แนะนำ1978 (16 บิต), 1985 (32 บิต), 2003 (64 บิต)
ออกแบบCISC
พิมพ์ลงทะเบียน-หน่วยความจำ
การเข้ารหัสตัวแปร (1 ถึง 15 ไบต์)
สาขารหัสเงื่อนไข
Endiannessเล็กน้อย
ขนาดหน้า8086i286 : ไม่มี
i386 , i486 : 4 KB หน้า
P5 Pentium : เพิ่มหน้า 4 MB
(Legacy PAE : 4 KB→2 MB)
x86-64 : เพิ่มหน้า 1 GB
ส่วนขยายx87 , IA-32 , x86-64 , MMX , 3DNow! , SSE , เอ็ม , ACPI , SSE2 , NX บิต , SSE3 , SSSE3 , SSE4 , SSE4.2 , AES-NI , CLMUL , RDRAND , SHA , MPX , SME , SGX , XOP , F16C , ADX , BMI , FMA , AVX, AVX2 , AVX512 , VT-x , VT-d , AMD-V , AMD-Vi , TSX , ASF , TXT
เปิดส่วนหนึ่ง สำหรับคุณสมบัติขั้นสูงบางอย่าง x86 อาจต้องมีใบอนุญาตจาก Intel; x86-64 อาจต้องการใบอนุญาตเพิ่มเติมจาก AMD โปรเซสเซอร์ 80486 ออกสู่ตลาดมานานกว่า 30 ปี[1]ดังนั้นจึงไม่สามารถอ้างสิทธิ์ในสิทธิบัตรได้ ดังนั้นชุดย่อยก่อน-586ของสถาปัตยกรรม x86 จึงเปิดอย่างสมบูรณ์
ทะเบียน
จุดประสงค์ทั่วไป
  • 16 บิต: 6 รีจิสเตอร์กึ่งเฉพาะ BP และ SP ไม่ใช่วัตถุประสงค์ทั่วไป
  • 32 บิต: 8 GPR รวมถึง EBP และ ESP
  • 64 บิต: 16 GPR รวมถึง RBP และ RSP
จุดลอยตัว
  • 16 บิต: ตัวเลือกแยกx87 FPU
  • 32 บิต: x87 FPU แบบแยกหรือแบบรวมเสริมหน่วยSSEในตัวในโปรเซสเซอร์รุ่นใหม่กว่า
  • 64 บิต: ยูนิต x87และSSE2ในตัว การใช้งานในภายหลังขยายไปถึงAVX2และAVX512
สถาปัตยกรรม x86 ใช้ชิปไมโครโปรเซสเซอร์ Intel 8086 ซึ่งเปิดตัวครั้งแรกในปี 2521
Intel Core 2 Duo ตัวอย่างของโปรเซสเซอร์มัลติคอร์ 64 บิตที่รองรับ x86
AMD Athlon (เวอร์ชันก่อนหน้า) ซึ่งเป็นการใช้งาน x86 ที่แตกต่างทางเทคนิคแต่เข้ากันได้อย่างสมบูรณ์

x86เป็นตระกูลของสถาปัตยกรรมชุดคำสั่ง[a] ที่เริ่มแรกพัฒนาโดยIntelโดยใช้ไมโครโปรเซสเซอร์Intel 8086 และตัวแปร8088 8086 เปิดตัวในปี 1978 เป็นส่วนขยาย16 บิตเต็มรูปแบบของไมโครโปรเซสเซอร์8 บิต8080ของ Intel โดยมีการแบ่งส่วนหน่วยความจำเป็นโซลูชันสำหรับระบุหน่วยความจำมากกว่าที่อยู่ 16 บิตธรรมดาจะครอบคลุมได้ คำว่า "x86" เกิดขึ้นเนื่องจากชื่อของผู้สืบทอดหลายรายจากโปรเซสเซอร์ 8086 ของ Intel ลงท้ายด้วย "86" รวมถึง80186 , 80286 , 80386และ80486 โปรเซสเซอร์

เพิ่มเติมและส่วนขยายจำนวนมากได้รับการเพิ่มชุดคำสั่ง x86 ปีที่ผ่านมาเกือบเต็มอย่างต่อเนื่องกับความเข้ากันได้ย้อนหลัง [b]สถาปัตยกรรมถูกนำมาใช้ในโปรเซสเซอร์จาก Intel, Cyrix , AMD , VIA Technologiesและบริษัทอื่น ๆ อีกมากมาย นอกจากนี้ยังมีการใช้งานแบบเปิด เช่นแพลตฟอร์มZet SoC (ปัจจุบันไม่ได้ใช้งาน) [2]อย่างไรก็ตาม ในจำนวนนี้ มีเพียง Intel, AMD, VIA Technologies และDM&P Electronics เท่านั้นที่มีใบอนุญาตสถาปัตยกรรม x86 และจากนี้ มีเพียงสองคนแรกเท่านั้นที่ผลิตการออกแบบ 64 บิตที่ทันสมัย

คำนี้ไม่ตรงกันกับความเข้ากันได้ของพีซีของ IBMเนื่องจากหมายถึงฮาร์ดแวร์คอมพิวเตอร์อื่นๆมากมายระบบฝังตัวและคอมพิวเตอร์วัตถุประสงค์ทั่วไป x86 ชิปที่ใช้ก่อนที่ตลาดพีซีได้เริ่ม , [C]บางส่วนของพวกเขาก่อนที่ไอบีเอ็มพีซี (1981) เปิดตัว

ในฐานะของ 2021 ส่วนใหญ่คอมพิวเตอร์ส่วนบุคคล , แล็ปท็อปและเกมคอนโซลที่ขายอยู่บนพื้นฐานของสถาปัตยกรรม x86 ในขณะที่ประเภทมือถือเช่นมาร์ทโฟนหรือแท็บเล็ตจะถูกครอบงำโดยARM ; ที่ปลายสูง x86 ยังคงคำนวณมากครองเวิร์กสเตชันและcloud computingส่วน[3]ในขณะที่เร็วที่สุดในซูเปอร์คอมพิวเตอร์เป็น ARM-based และด้านบน 4 จะไม่ใช้ x86

ภาพรวม

ในทศวรรษ 1980 และต้นทศวรรษ 1990 เมื่อ8088และ80286ยังคงใช้กันทั่วไป คำว่า x86 มักจะหมายถึง CPU ที่เข้ากันได้กับ 8086 อย่างไรก็ตาม ทุกวันนี้ x86 มักจะหมายถึงความเข้ากันได้แบบไบนารีกับชุดคำสั่งแบบ 32 บิต ของ 80386 เนื่องจากชุดคำสั่งนี้ได้กลายเป็นส่วนร่วมที่ต่ำที่สุดสำหรับระบบปฏิบัติการสมัยใหม่จำนวนมาก และอาจเป็นเพราะ คำศัพท์กลายเป็นเรื่องธรรมดาหลังจากการเปิดตัว80386ในปี 1985

ไม่กี่ปีหลังจากการเปิดตัว 8086 และ 8088 Intel ได้เพิ่มความซับซ้อนให้กับรูปแบบการตั้งชื่อและคำศัพท์ในฐานะ "iAPX" ของโปรเซสเซอร์ Intel iAPX 432 ที่มีความทะเยอทะยานแต่โชคไม่ดีได้ทดลองใช้กับชิปตระกูล 8086 ที่ประสบความสำเร็จมากกว่า[ d]ใช้เป็นคำนำหน้าระดับระบบ 8086 ระบบรวมทั้งcoprocessorsเช่น8087และ8089และง่ายชิป Intel ระบบเฉพาะ[อี]ได้รับการอธิบายจึงเป็น iAPX 86 ระบบ [4] [f]นอกจากนี้ยังมีเงื่อนไขiRMX (สำหรับระบบปฏิบัติการ), iSBC (สำหรับคอมพิวเตอร์บอร์ดเดี่ยว) และISBX (สำหรับบอร์ด multimodule อยู่บนพื้นฐานของ 8086 สถาปัตยกรรม) รวมกันทั้งหมดภายใต้หัวข้อไมโคร 80 [5] [6] อย่างไรก็ตาม รูปแบบการตั้งชื่อนี้ค่อนข้างชั่วคราว กินเวลาไม่กี่ปีในช่วงต้นทศวรรษ 1980 [NS]

แม้ว่า 8086 ได้รับการพัฒนาเป็นหลักสำหรับระบบฝังตัวและหลายผู้ใช้หรือผู้เดียวคอมพิวเตอร์ขนาดเล็กส่วนใหญ่จะเป็นคำตอบที่ประสบความสำเร็จ 8080-รองรับZilog Z80 , [7]บรรทัด x 86 เร็ว ๆ นี้เติบโตขึ้นในคุณสมบัติและพลังการประมวลผล วันนี้ x86 เป็นที่แพร่หลายในคอมพิวเตอร์ส่วนบุคคลทั้งนิ่งและแบบพกพาและยังใช้ในคอมพิวเตอร์ระดับกลาง , เวิร์คสเตชั่เซิร์ฟเวอร์และส่วนใหญ่ใหม่ซูเปอร์ คลัสเตอร์ของTOP500รายการซอฟต์แวร์จำนวนมากรวมถึงระบบปฏิบัติการ x86จำนวนมากกำลังใช้ฮาร์ดแวร์ที่ใช้ x86

x86 สมัยใหม่นั้นค่อนข้างผิดปกติในระบบฝังตัวอย่างไรก็ตามแอปพลิเคชันขนาดเล็กที่ใช้พลังงานต่ำ (โดยใช้แบตเตอรี่ขนาดเล็ก) และตลาดไมโครโปรเซสเซอร์ราคาประหยัด เช่นเครื่องใช้ในบ้านและของเล่น ขาดการมีอยู่ของ x86 อย่างมีนัยสำคัญ[h]สถาปัตยกรรมแบบ 8 และ 16 บิตแบบธรรมดานั้นพบได้ทั่วไปที่นี่ แม้ว่าVIA C7 ที่เข้ากันได้กับ x86 , VIA Nano , GeodeของAMD , Athlon NeoและIntel Atomเป็นตัวอย่างของการออกแบบ 32- และ64- บิตที่ใช้ในบางรุ่นส่วนที่ค่อนข้างใช้พลังงานต่ำและต้นทุนต่ำ

มีการพยายามหลายครั้ง รวมทั้งโดย Intel เพื่อยุติการครอบงำตลาดของสถาปัตยกรรม x86 ที่ "ไม่เรียบร้อย" ที่ออกแบบโดยตรงจากไมโครโปรเซสเซอร์ 8 บิตอย่างง่ายตัวแรก ตัวอย่างของสิ่งนี้คือiAPX 432 (โครงการเดิมชื่อIntel 8800 [8] ), Intel 960 , Intel 860และสถาปัตยกรรมIntel/Hewlett-Packard Itaniumอย่างไรก็ตามการปรับแต่งอย่างต่อเนื่องของ x86 microarchitectures , วงจรและผลิตเซมิคอนดักเตอร์จะทำให้มันยากที่จะเปลี่ยน x86 ในหลายกลุ่ม ส่วนขยาย 64 บิตของ AMD ของ x86 (ซึ่งในที่สุด Intel ก็ตอบสนองด้วยการออกแบบที่เข้ากันได้) [9]และความสามารถในการปรับขยายของชิป x86 ในรูปแบบของซีพียูแบบ multi-core ที่ทันสมัย ​​ได้เน้นย้ำ x86 เป็นตัวอย่างว่าการปรับแต่งมาตรฐานอุตสาหกรรมที่เป็นที่ยอมรับอย่างต่อเนื่องสามารถต้านทานการแข่งขันจากสถาปัตยกรรมใหม่ทั้งหมดได้อย่างไร [10]

ลำดับเหตุการณ์

ตารางด้านล่างแสดงรายการรุ่นโปรเซสเซอร์และซีรีส์รุ่นที่ใช้รูปแบบต่างๆ ของชุดคำสั่ง x86 ตามลำดับเวลา แต่ละรายการมีลักษณะเฉพาะด้วยการออกแบบ ไมโครโปรเซสเซอร์ที่ประสบความสำเร็จในเชิงพาณิชย์ที่ดีขึ้นอย่างมากหรือประสบความสำเร็จในเชิงพาณิชย์

ลำดับเหตุการณ์ของโปรเซสเซอร์ x86
รุ่น บทนำ รุ่น CPU ที่โดดเด่น พื้นที่ที่อยู่ คุณสมบัติเด่น
เชิงเส้น เสมือน ทางกายภาพ
x86 ที่ 1 พ.ศ. 2521 อินเทล 8086 , อินเทล 8088 (1979) 16 บิต NA 20 บิต ISA 16 บิต , IBM PC (8088), IBM PC/XT (8088)
พ.ศ. 2525 อินเทล 80186 , อินเทล 80188
NEC V20 /V30 (1983)
8086-2 ISA ฝังตัว (80186/80188)
ครั้งที่ 2 Intel 80286และโคลน 30 บิต 24 บิต โหมดป้องกัน , IBM PC/XT 286 , IBM PC/AT
ที่ 3 ( IA-32 ) พ.ศ. 2528 อินเทล 80386 , เอเอ็มดี Am386 (1991) 32 บิต 46 บิต 32 บิต ISA 32 บิตเพจจิ้งIBM PS/2
4th (การวางท่อ, แคช) 1989 Intel 80486
Cyrix Cx486S , DLC (1992)
AMD Am486 (1993), Am5x86 (1995)
การวางท่อ , on-die x87 FPU (486DX), on-die cache
ที่ 5
( ซุปเปอร์สเกลาร์ )
2536 อินเทลเพนเทียม , เพนเทียม เอ็มเอ็มเอ็กซ์ (1996) superscalar , 64 บิต databusเร็วขึ้น FPU, MMX (Pentium MMX) APIC , SMP
1994 NexGen Nx586
เอเอ็มดี5k86 / K5 (1996)
สถาปัตยกรรมแบบแยกส่วน (การแปล µ-op)
1995 Cyrix Cx5x86
Cyrix 6x86 /MX (1997)/ MII (1998)
การดำเนินการแบบไดนามิก
อันดับที่ 6
( PAE , การแปล µ-op)
1995 Intel Pentium Pro 36 บิต ( PAE ) การแปล µ-op, คำแนะนำการย้ายตามเงื่อนไข, การดำเนินการแบบไดนามิก , การดำเนินการเก็งกำไร , 3-way x86 superscalar, superscalar FPU, PAE , แคช L2บนชิป
1997 Intel Pentium II , Pentium III (1999)
Celeron (1998), Xeon (1998)
บนแพ็คเกจ (Pentium II) หรือ on-die (Celeron) L2 Cache, SSE (Pentium III), SLOT 1 , Socket 370หรือSLOT 2 (Xeon)
1997 เอเอ็มดี K6 / K6-2 (1998) / K6-III (1999) 32 บิต 3Dตอนนี้! , ระบบแคช 3 ระดับ (K6-III)
แพลตฟอร์มที่ปรับปรุงแล้ว 1999 AMD Athlon
Athlon XP / MP (2001)
Duron (2000)
Sempron (2004)
36 บิต MMX+, 3DNow!+, ดับเบิ้ลปั๊มบัส, สล็อต AหรือSocket A
2000 ทรานส์เมตา ครูโซ 32 บิต โปรเซสเซอร์แพลตฟอร์ม x86 ที่ขับเคลื่อนด้วยCMS , VLIW -128 คอร์, คอนโทรลเลอร์หน่วยความจำ on-die, ลอจิกบริดจ์ PCI on-die
Intel Pentium 4 36 บิต SSE2 , HTT (Northwood), NetBurst, บัสสี่สูบ, Trace Cache, ซ็อกเก็ต 478
พ.ศ. 2546 Intel Pentium M
Intel Core (2006)
Pentium Dual-Core (2007)
ฟิวชั่น µ-op , XD บิต (Dothan) (Intel Core "Yonah")
Transmeta Efficeon CMS 6.0.4, VLIW -256, บิต NX , HT
IA-64 การเปลี่ยนผ่าน 64 บิต
1999-2005
2001 อินเทล อิทาเนียม (2544-2560) 52 บิต สถาปัตยกรรมEPIC 64 บิตชุดคำสั่ง VLIW 128 บิต ฮาร์ดแวร์ on-die IA-32 H/W ที่เปิดใช้งาน x86 OS และแอปพลิเคชัน x86 (รุ่นแรก) ซอฟต์แวร์ IA-32 EL ที่เปิดใช้งานแอปพลิเคชัน x86 (Itanium 2) ไฟล์รีจิสเตอร์ Itanium ถูกรีแมปไปที่รีจิสเตอร์ x86
x86-64 ขยาย 64 บิต
ตั้งแต่ 2001
x86-64 เป็นสถาปัตยกรรมขยาย 64 บิตของ x86 โหมดดั้งเดิมจะรักษาสถาปัตยกรรม x86 ทั้งหมดและไม่เปลี่ยนแปลง สถาปัตยกรรมดั้งเดิมของโปรเซสเซอร์ x86-64: อยู่ในโหมด 64 บิต ไม่มีโหมดการเข้าถึงในการแบ่งส่วน แสดงพื้นที่แอดเดรสเชิงเส้นแบบอนุญาตสถาปัตยกรรม 64 บิต สถาปัตยกรรม IA-32 ที่ได้รับการดัดแปลงซึ่งอยู่ในโหมดความเข้ากันได้ควบคู่ไปกับโหมด 64 บิตมีไว้เพื่อรองรับแอปพลิเคชัน x86 ส่วนใหญ่
พ.ศ. 2546 Athlon 64 / FX / X2 (2005) Opteron
Sempron (2004) / X2 (2008)
Turion 64 (2005) / X2 (2006)
40 บิต AMD64 (ยกเว้นโปรเซสเซอร์ Sempron บางตัวที่แสดงเป็นโปรเซสเซอร์ x86 ล้วนๆ), คอนโทรลเลอร์หน่วยความจำ on-die, HyperTransport , on-die dual-core (X2), AMD-V (Athlon 64 Orleans), Socket 754 / 939 / 940หรือAM2
2004 เพนเทียม 4 (เพรสคอตต์)
เซเลรอน ดี , เพนเทียม ดี (2005)
36 บิต EM64T (เปิดใช้งานใน Pentium 4 และ Celeron D บางรุ่น), SSE3 , 2nd gen. การวางท่อ NetBurst, ดูอัลคอร์ (on-die: Pentium D 8xx, บนชิป: Pentium D 9xx), Intel VT (Pentium 4 6x2), ซ็อกเก็ตLGA 775
ปี 2549 Intel Core 2
Pentium ดูอัลคอร์ (2007)
Celeron Dual-Core (2008)
Intel 64 (<<== EM64T), SSSE3 (65 nm), การประมวลผลไดนามิกกว้าง, µ-op fusion, macro-op fusion ในโหมด 16 บิตและ 32 บิต[11] [12]บนชิป quad- คอร์ (Core 2 Quad), Smart Shared L2 Cache (Intel Core 2 "Merom")
2550 AMD Phenom / II (2008)
Athlon II (2009)
ทูเรียน II (2009)
48 บิต เสาหินควอดคอร์ (X4)/ทริปเปิ้ลคอร์ (X3), SSE4a , Rapid Virtualization Indexing (RVI), HyperTransport 3, AM2+หรือAM3
2008 อินเทล คอร์ 2 (45 นาโนเมตร) 40 บิต SSE4.1
Intel Atom เน็ตบุ๊กหรือโปรเซสเซอร์อุปกรณ์สมาร์ทที่ใช้พลังงานต่ำ แกน P54C นำกลับมาใช้ใหม่
อินเทลคอร์ i7
คอร์ i5 (2009)
คอร์ i3 (2010)
QuickPath, GMCH บนชิป ( Clarkdale ), SSE4.2 , Extended Page Tables (EPT) สำหรับการจำลองเสมือน, มาโครออปฟิวชั่นในโหมด 64 บิต[11] [12] (Intel Xeon "Bloomfield" พร้อม Nehalem microarchitecture)
ผ่านนาโน การเข้ารหัสด้วยฮาร์ดแวร์ ; การจัดการพลังงานแบบปรับตัว
2010 AMD FX 48 บิต octa-core, CMT (คลัสเตอร์มัลติเธรด), FMA, OpenCL, AM3+
2011 AMD APU A และ E Series ( ลาโน ) 40 บิต GPGPU บนได, PCI Express 2.0, ซ็อกเก็ต FM1
AMD APU C, E และ Z Series ( Bobcat ) 36 บิต อุปกรณ์อัจฉริยะพลังงานต่ำ APU
Intel Core i3 , Core i5และCore i7
( แซนดี้บริดจ์ / ไอวี่บริดจ์ )
การเชื่อมต่อวงแหวนภายใน, ถอดรหัส µ-op cache, LGA 1155 socket
2012 AMD APU A Series ( Bulldozer, Trinityและใหม่กว่า) 48 บิต AVX , APU ที่ใช้ Bulldozer, Socket FM2หรือSocket FM2+
Intel Xeon Phi (มุมอัศวิน) ตัวประมวลผลร่วมของการ์ดเสริม PCI-E สำหรับระบบที่ใช้ XEON, Manycore Chip, In-order P54C , VPU ที่กว้างมาก (512-bit SSE), คำแนะนำ LRBni (8 × 64-bit)
2013 AMD Jaguar
(แอธลอน, เซมพรอน)
SoCคอนโซลเกมและโปรเซสเซอร์อุปกรณ์อัจฉริยะที่ใช้พลังงานต่ำ
Intel Silvermont
(Atom, Celeron, Pentium)
36 บิต SoCโปรเซสเซอร์อุปกรณ์อัจฉริยะที่ใช้พลังงานต่ำ/ต่ำมาก
Intel Core i3 , Core i5และCore i7 ( Haswell / Broadwell ) 39 บิต AVX2 , FMA3 , TSX , BMI1 และ BMI2คำแนะนำLGA 1150ซ็อกเก็ต
2015 Intel Broadwell-U
( Intel Core i3 , Core i5 , Core i7 , Core M , Pentium , Celeron )
SoC, Broadwell-U PCH-LP บนชิป (โมดูลหลายชิป)
2015-2020 Intel Skylake / Kaby Lake / Cannon Lake / Coffee Lake / Rocket Lake
(Intel Pentium/Celeron Gold, Core i3 , Core i5 , Core i7 , Core i9 )
46 บิต AVX-512 (จำกัดเฉพาะ Cannon Lake-U และเวิร์กสเตชัน/เซิร์ฟเวอร์รุ่นต่างๆ ของ Skylake)
2016 Intel Xeon Phi (อัศวินแลนดิ้ง) 48 บิต Manycore CPU และตัวประมวลผลร่วมสำหรับระบบ Xeon, คอร์ที่ใช้ Airmont (Atom)
2016 AMD บริสตอลริดจ์
(AMD (Pro) A6/A8/A10/A12)
FCH ในตัวบนดาย, SoC, ซ็อกเก็ต AM4
2017 AMD Ryzen Series/AMD Epyc Series การนำ SMT ของ AMD ไปใช้บนชิปหลายตัว
2017 จ้าวซิน หวู่เต้าโข่ว (KX-5000, KH-20000) สถาปัตยกรรม x86-64 ใหม่ล่าสุดของ Zhaoxin
2018-2021 Intel Sunny Cove (Ice Lake-U และ Y), Cypress Cove (Rocket Lake) 57 บิต การปรับใช้ AVX-512 ครั้งแรกของ Intel สำหรับกลุ่มผู้บริโภค การเพิ่มคำสั่ง Vector Neural Network (VNNI)
2020 Intel Willow Cove (เสือทะเลสาบ-Y/U/H) สถาปัตยกรรมการเชื่อมต่อแบบวงแหวนคู่, Gaussian Neural Accelerator (GNA2) ที่อัปเดตแล้ว, คำแนะนำ AVX-512 Vector Intersection ใหม่, เพิ่มเทคโนโลยีการบังคับใช้การควบคุมการไหล (CET)
ยุค ปล่อย รุ่นซีพียู พื้นที่ที่อยู่ทางกายภาพ คุณสมบัติใหม่

ประวัติ

ผู้ผลิตรายอื่น

Am386เผยแพร่โดย AMD ในปี 1991

ในช่วงเวลาต่างๆ บริษัทต่างๆ เช่นIBM , NEC , [i] AMD , TI , STM , Fujitsu , OKI , Siemens , Cyrix , Intersil , C&T , NexGen , UMCและDM&Pเริ่มออกแบบหรือผลิต[j] x86 processors (CPUs) ) มีไว้สำหรับคอมพิวเตอร์ส่วนบุคคลและระบบฝังตัว การใช้งาน x86 ดังกล่าวแทบจะไม่มีการคัดลอกง่ายๆ แต่มักใช้microarchitecturesภายในที่แตกต่างกันและการแก้ปัญหาต่างๆ ในระดับอิเล็กทรอนิกส์และกายภาพ ค่อนข้างเป็นธรรมชาติไมโครโปรเซสเซอร์ที่เข้ากันได้ในยุคแรกคือ 16 บิตในขณะที่การออกแบบ 32 บิตได้รับการพัฒนาในภายหลังมาก สำหรับตลาดคอมพิวเตอร์ส่วนบุคคลปริมาณที่แท้จริงเริ่มปรากฏขึ้นราวปี 1990 โดยมีโปรเซสเซอร์ที่รองรับi386และi486ซึ่งมักมีชื่อคล้ายกับชิปดั้งเดิมของ Intel บริษัท อื่น ๆ ซึ่งได้รับการออกแบบหรือผลิต x86 หรือx87โปรเซสเซอร์ ได้แก่ITT คอร์ปอเรชั่น , เซมิคอนดักเตอร์แห่งชาติ , เทคโนโลยีระบบ ULSIและWeitek

ต่อไปนี้อย่างเต็มที่ไปป์ไลน์ i486 , IntelแนะนำPentiumชื่อแบรนด์ (ซึ่งแตกต่างจากตัวเลขอาจจะเป็นเครื่องหมายการค้า ) สำหรับชุดใหม่ของพวกเขาsuperscalarออกแบบ x86 ด้วยรูปแบบการตั้งชื่อ x86 ที่ตอนนี้ถูกกฎหมายแล้ว ผู้จำหน่าย x86 รายอื่นต้องเลือกชื่อที่แตกต่างกันสำหรับผลิตภัณฑ์ที่เข้ากันได้กับ x86 ของตน และในขั้นต้นบางคนเลือกที่จะดำเนินการกับรูปแบบการกำหนดหมายเลขต่อไป: IBMร่วมมือกับCyrixเพื่อผลิต5x86แล้วจึงมีประสิทธิภาพมาก6x86 (M1) และ6x86 MX ( MII) สายของการออกแบบ Cyrix ซึ่งเป็นไมโครโปรเซสเซอร์ x86 แรกการดำเนินการลงทะเบียนเปลี่ยนชื่อเพื่อเปิดใช้งานการดำเนินการเก็งกำไรในขณะเดียวกัน AMD ได้ออกแบบและผลิต5k86 ( K5 ) ขั้นสูง แต่ล่าช้าซึ่งภายในนั้นอิงจากการออกแบบ29K RISCก่อนหน้าของ AMD อย่างใกล้ชิดคล้ายกับNx586ของNexGenโดยใช้กลยุทธ์ที่ขั้นตอนไปป์ไลน์เฉพาะจะถอดรหัสคำสั่ง x86 ให้เป็นชุดเดียวกันและจัดการการทำงานระดับไมโครได้อย่างง่ายดายซึ่งเป็นวิธีการที่ยังคงเป็นพื้นฐานสำหรับการออกแบบ x86 ส่วนใหญ่มาจนถึงทุกวันนี้

ไมโครโปรเซสเซอร์รุ่นแรกบางรุ่นมีปัญหาการกระจายความร้อน 6x86 ได้รับผลกระทบจากปัญหาความเข้ากันได้เล็กน้อยเช่นกันNx586ขาดหน่วยจุดลอยตัว (FPU) และความเข้ากันได้ของพิน (ที่สำคัญในขณะนั้น) ในขณะที่K5มีประสิทธิภาพค่อนข้างน่าผิดหวังเมื่อเปิดตัว (ในที่สุด) การเพิกเฉยต่อทางเลือกอื่น ๆ ของลูกค้าในซีรีส์ Pentium ส่งผลให้การออกแบบเหล่านี้ค่อนข้างไม่ประสบความสำเร็จ แม้ว่าK5จะเข้ากันได้ดีมากกับ Pentium และ6x86นั้นเร็วกว่า Pentium ในโค้ดจำนวนเต็มอย่างมาก[k] หลังจากนั้นAMDก็สามารถเติบโตเป็นคู่แข่งสำคัญกับK6การตั้งค่าของโปรเซสเซอร์ซึ่งวิธีที่จะทำให้ประสบความสำเร็จมากAthlonและOpteronนอกจากนั้นยังมีลุ้นอื่น ๆ เช่นเซนทอร์เทคโนโลยี (เดิมไอดีที ) เพิ่มขึ้นเทคโนโลยีและTransmetaโปรเซสเซอร์C3และC7 ที่ประหยัดพลังงานของVIA Technologiesซึ่งออกแบบโดยบริษัทCentaurมีจำหน่ายมาหลายปีแล้ว การออกแบบใหม่ล่าสุดของ Centaur คือVIA Nanoเป็นโปรเซสเซอร์ตัวแรกที่มีการประมวลผลแบบsuperscalarและเก็งกำไร. มันได้รับการแนะนำที่เกี่ยวกับเวลาเช่นเดียวกับครั้งแรกของการประมวลผลของ Intel "ในการสั่งซื้อ" ตั้งแต่P5 Pentiumที่Intel Atom

นามสกุลของขนาดคำ

สถาปัตยกรรมชุดคำสั่งที่ได้รับเป็นครั้งที่สองที่จะขยายขนาดใหญ่คำขนาด ในปี 1985 Intel ได้เปิดตัว 80386 แบบ 32 บิต (ภายหลังรู้จักกันในชื่อ i386) ซึ่งค่อยๆ แทนที่ชิป 16 บิตรุ่นก่อนหน้าในคอมพิวเตอร์ (แม้ว่าโดยทั่วไปจะไม่อยู่ในระบบฝังตัว ) ในช่วงปีถัดมา โมเดลการเขียนโปรแกรมแบบขยายนี้เดิมเรียกว่าสถาปัตยกรรม i386 (เช่นการใช้งานครั้งแรก) แต่ Intel เรียกในภายหลังว่าIA-32เมื่อแนะนำสถาปัตยกรรม IA-64 (ที่ไม่เกี่ยวข้อง)

ใน 1999-2003, เอเอ็มดีขยายนี้สถาปัตยกรรม 32 บิตเป็น 64 บิตและเรียกมันว่าx86-64ในเอกสารต้นและต่อมาเป็นAMD64ในไม่ช้า Intel ก็นำส่วนขยายสถาปัตยกรรมของ AMD มาใช้ภายใต้ชื่อ IA-32e ต่อมาใช้ชื่อ EM64T และสุดท้ายใช้ Intel 64 MicrosoftและSun Microsystems / Oracleยังใช้คำว่า "x64" ในขณะที่ลีนุกซ์รุ่นต่างๆ และBSDก็ใช้ "amd64" ด้วย " ภาคเรียน. ตัวอย่างเช่น Microsoft Windows กำหนดให้เวอร์ชัน 32 บิตเป็น "x86" และเวอร์ชัน 64 บิตเป็น "x64" ในขณะที่ไฟล์การติดตั้งเวอร์ชัน 64 บิตของ Windows จะต้องอยู่ในไดเร็กทอรีชื่อ "AMD64"[13]

คุณสมบัติพื้นฐานของสถาปัตยกรรม

สถาปัตยกรรม x86 เป็นระยะเวลาในการเรียนการสอนตัวแปรหลัก " CISC " การออกแบบโดยเน้นความเข้ากันได้ย้อนหลัง ชุดคำสั่งไม่ใช่ CISC ทั่วไป แต่โดยพื้นฐานแล้วเป็นเวอร์ชันขยายของสถาปัตยกรรมแบบ8 บิต8008และ8080แบบง่าย เปิดใช้งานการกำหนดที่อยู่ไบต์และคำจะถูกเก็บไว้ในหน่วยความจำด้วยลำดับไบต์แบบendianน้อย อนุญาตให้เข้าถึงหน่วยความจำไปยังที่อยู่ที่ไม่ได้จัดตำแหน่งสำหรับขนาดคำที่ถูกต้องทั้งหมด ขนาดดั้งเดิมที่ใหญ่ที่สุดสำหรับแอดเดรสเลขคณิตจำนวนเต็ม และหน่วยความจำ (หรือออฟเซ็ต) คือ 16, 32 หรือ 64 บิตขึ้นอยู่กับรุ่นสถาปัตยกรรม (โปรเซสเซอร์ที่ใหม่กว่านั้นรวมถึงการสนับสนุนโดยตรงสำหรับจำนวนเต็มที่น้อยกว่าด้วย) ค่าสเกลาร์หลายค่าสามารถจัดการได้พร้อมกันผ่านหน่วย SIMD ที่มีอยู่ในรุ่นต่อๆ ไป ดังที่อธิบายไว้ด้านล่าง[l]ออฟเซ็ตที่อยู่ทันทีและข้อมูลในทันทีอาจแสดงเป็นปริมาณ 8 บิตสำหรับกรณีหรือบริบทที่เกิดขึ้นบ่อยครั้งซึ่งช่วง -128..127 ก็เพียงพอแล้ว ดังนั้นคำสั่งทั่วไปจึงมีความยาว 2 หรือ 3 ไบต์ (แม้ว่าบางคำสั่งจะยาวกว่ามาก และบางส่วนเป็นแบบไบต์เดี่ยว)

เพื่อเป็นการประหยัดพื้นที่ในการเข้ารหัส รีจิสเตอร์ส่วนใหญ่จะแสดงเป็นopcodesโดยใช้สามหรือสี่บิต หลังผ่านคำนำหน้า opcode ในโหมด 64 บิต ในขณะที่ตัวถูกดำเนินการมากที่สุดหนึ่งตัวในคำสั่งสามารถเป็นตำแหน่งหน่วยความจำได้[m]อย่างไรก็ตาม ตัวถูกดำเนินการหน่วยความจำนี้อาจเป็นปลายทาง (หรือรวมต้นทางและปลายทาง) ในขณะที่ตัวถูกดำเนินการอื่นต้นทางสามารถลงทะเบียนหรือทันที. ท่ามกลางปัจจัยอื่นๆ สิ่งนี้มีส่วนทำให้มีขนาดโค้ดที่แข่งขันกับเครื่องแปดบิต และทำให้สามารถใช้หน่วยความจำแคชคำสั่งได้อย่างมีประสิทธิภาพ จำนวนรีจิสเตอร์ทั่วไปที่มีจำนวนค่อนข้างน้อย (ซึ่งสืบทอดมาจากบรรพบุรุษ 8 บิตด้วย) ทำให้รีจิสเตอร์สัมพันธ์กับแอดเดรส (โดยใช้ออฟเซ็ตเล็ก ๆ ในทันที) เป็นวิธีการสำคัญในการเข้าถึงตัวถูกดำเนินการ โดยเฉพาะอย่างยิ่งบนสแต็ก จึงมีการลงทุนมากมายในการเข้าถึงข้อมูลดังกล่าวให้เร็วเท่ากับการเข้าถึงการลงทะเบียน—เช่น ทรูพุตของคำสั่งหนึ่งรอบ ในสถานการณ์ส่วนใหญ่ที่ข้อมูลที่เข้าถึงมีอยู่ในแคชระดับบนสุด

จุดลอยตัวและ SIMD

ทุ่มเทโปรเซสเซอร์จุดลอยตัวที่มีการลงทะเบียนภายใน 80 บิต8087ได้รับการพัฒนาสำหรับต้นฉบับ8086 ไมโครโปรเซสเซอร์นี้ได้พัฒนาเป็น80387แบบขยายในเวลาต่อมา และตัวประมวลผลที่ใหม่กว่าได้รวมเวอร์ชันที่เข้ากันได้ของฟังก์ชันการทำงานนี้ไว้ในไมโครโปรเซสเซอร์เดียวกันกับโปรเซสเซอร์หลัก นอกจากนี้ การออกแบบ x86 ที่ทันสมัยยังมีหน่วยSIMD (ดูSSEด้านล่าง) ซึ่งคำแนะนำสามารถทำงานควบคู่ไปกับ (หนึ่งหรือสอง) คำ 128 บิต โดยแต่ละคำมีตัวเลขทศนิยมสองหรือสี่ตัว (แต่ละความกว้าง 64 หรือ 32 บิตตามลำดับ) หรืออีกทางหนึ่งคือ 2, 4, 8 หรือ 16 จำนวนเต็ม (แต่ละ 64, 32, 16 หรือ 8 บิตกว้างตามลำดับ)

การมีอยู่ของการลงทะเบียน SIMD แบบกว้างหมายความว่าโปรเซสเซอร์ x86 ที่มีอยู่สามารถโหลดหรือจัดเก็บข้อมูลหน่วยความจำได้มากถึง 128 บิตในคำสั่งเดียว และยังดำเนินการระดับบิต (แม้ว่าจะไม่ใช่เลขคณิตจำนวนเต็ม[n] ) ในปริมาณ 128 บิตแบบเต็มขนานกัน โปรเซสเซอร์Sandy Bridgeของ Intel ได้เพิ่มคำสั่งAdvanced Vector Extensions (AVX) ซึ่งขยายการลงทะเบียน SIMD เป็น 256 บิต คำแนะนำ Intel Initial Many Core ที่นำมาใช้โดยโปรเซสเซอร์ Knights Corner Xeon Phiและคำสั่งAVX-512 ที่นำมาใช้โดยโปรเซสเซอร์ Knights Landing Xeon Phi และโดยโปรเซสเซอร์Skylake-Xใช้การลงทะเบียน SIMD กว้าง 512 บิต

การใช้งานปัจจุบัน

ระหว่างการดำเนินการโปรเซสเซอร์ x86 ปัจจุบันใช้ขั้นตอนการถอดรหัสพิเศษสองสามขั้นตอนเพื่อแยกคำสั่งส่วนใหญ่ออกเป็นชิ้นเล็ก ๆ ที่เรียกว่าการดำเนินการขนาดเล็ก เหล่านี้จะถูกส่งไปแล้วชุดควบคุมที่บัฟเฟอร์และตารางเวลาพวกเขาในการปฏิบัติตาม 86-ความหมายเพื่อให้พวกเขาสามารถดำเนินการส่วนหนึ่งในแบบคู่ขนานโดยหนึ่งในหลาย ๆ (มากหรือน้อยเชี่ยวชาญ) หน่วยปฏิบัติเหล่านี้การออกแบบที่ทันสมัย x86 จึงไปป์ไลน์ , superscalarและยังมีความสามารถในการออกคำสั่งและการดำเนินการเก็งกำไร (ผ่านการทำนายสาขา , ลงทะเบียนเปลี่ยนชื่อและการคาดการณ์ของหน่วยความจำการพึ่งพาอาศัยกัน) ซึ่งหมายความว่าอาจดำเนินการคำสั่ง x86 หลายรายการ (บางส่วนหรือทั้งหมด) พร้อมกัน และไม่จำเป็นต้องอยู่ในลำดับเดียวกับที่ให้ไว้ในสตรีมคำสั่ง[14] ซีพียู Intel บางตัว ( Xeon Foster MP , Pentium 4บางตัว และNehalemและโปรเซสเซอร์ Intel Core ที่ใหม่กว่าบางตัว) และซีพียู AMD (เริ่มจากZen ) ยังสามารถทำมัลติเธรดพร้อมกันได้สองเธรดต่อคอร์ ( Xeon Phiมีสี่เธรดต่อ แกนกลาง) ซีพียู Intel บางตัวรองรับหน่วยความจำธุรกรรม ( TSX )

เมื่อนำมาใช้ในช่วงกลางทศวรรษ 1990 วิธีนี้บางครั้งเรียกว่า "แกน RISC" หรือ "การแปล RISC" ส่วนหนึ่งเป็นเพราะเหตุผลทางการตลาด แต่ยังเป็นเพราะการดำเนินการขนาดเล็กเหล่านี้ใช้คุณสมบัติบางอย่างร่วมกับคำสั่ง RISC บางประเภท อย่างไรก็ตามไมโครโค้ดแบบเดิม (ใช้ตั้งแต่ช่วงทศวรรษ 1950) ยังใช้คุณสมบัติเดียวกันหลายอย่างร่วมกัน วิธีการใหม่นี้มีความแตกต่างกันตรงที่การแปลเป็นการดำเนินการขนาดเล็กในขณะนี้เกิดขึ้นแบบอะซิงโครนัส โดยไม่ต้องซิงโครไนซ์หน่วยดำเนินการกับขั้นตอนการถอดรหัสเปิดโอกาสสำหรับการวิเคราะห์สตรีมโค้ด (บัฟเฟอร์) เพิ่มเติม ดังนั้นจึงอนุญาตให้ตรวจพบการดำเนินการที่สามารถทำได้แบบขนาน โดยป้อนหน่วยดำเนินการมากกว่าหนึ่งหน่วยพร้อมกัน

โปรเซสเซอร์รุ่นล่าสุดยังทำสิ่งที่ตรงกันข้ามเมื่อเหมาะสม พวกเขารวมลำดับ x86 บางอย่าง (เช่น การเปรียบเทียบตามด้วยการกระโดดแบบมีเงื่อนไข) ลงใน micro-op ที่ซับซ้อนมากขึ้น ซึ่งเหมาะกับรูปแบบการดำเนินการที่ดีกว่า และสามารถดำเนินการได้เร็วกว่าหรือด้วยทรัพยากรเครื่องที่เกี่ยวข้องน้อยลง

อีกวิธีหนึ่งในการพยายามปรับปรุงประสิทธิภาพคือการแคชการดำเนินการไมโครที่ถอดรหัสแล้ว ดังนั้นโปรเซสเซอร์จึงสามารถเข้าถึงการดำเนินการไมโครที่ถอดรหัสได้โดยตรงจากแคชพิเศษ แทนที่จะถอดรหัสอีกครั้ง Intel ปฏิบัติตามแนวทางนี้ด้วยคุณลักษณะ Execution Trace Cache ในสถาปัตยกรรมไมโครNetBurst (สำหรับโปรเซสเซอร์ Pentium 4) และต่อมาใน Decoded Stream Buffer (สำหรับโปรเซสเซอร์แบรนด์ Core ตั้งแต่ Sandy Bridge) [15]

Transmetaใช้วิธีการที่แตกต่างไปจากเดิมอย่างสิ้นเชิงในซีพียูที่เข้ากันได้กับCrusoe x86 พวกเขาใช้การแปลแบบทันเวลาเพื่อแปลงคำสั่ง x86 เป็นชุดคำสั่งVLIWดั้งเดิมของ CPU Transmeta แย้งว่าแนวทางของพวกเขาช่วยให้มีการออกแบบที่มีประสิทธิภาพด้านพลังงานมากขึ้น เนื่องจาก CPU สามารถละทิ้งขั้นตอนการถอดรหัสที่ซับซ้อนของการใช้งาน x86 แบบเดิมได้

การแบ่งส่วน

มินิคอมพิวเตอร์ในช่วงปลายทศวรรษ 1970 ทำงานโดยเทียบกับขีด จำกัด ที่อยู่16 บิต 64- KBเนื่องจากหน่วยความจำมีราคาถูกลง มินิคอมพิวเตอร์บางรุ่น เช่นPDP-11ใช้รูปแบบการสลับธนาคารที่ซับซ้อน หรือในกรณีของVAXของ Digital ได้ออกแบบโปรเซสเซอร์ใหม่ที่มีราคาแพงกว่ามาก ซึ่งสามารถจัดการที่อยู่และข้อมูลแบบ 32 บิตได้โดยตรง 8086 รุ่นดั้งเดิม พัฒนาจากไมโครโปรเซสเซอร์8080ธรรมดาและมุ่งเป้าไปที่คอมพิวเตอร์ขนาดเล็กและราคาไม่แพง และอุปกรณ์พิเศษอื่นๆ เป็นหลัก แทนที่จะใช้การลงทะเบียนเซกเมนต์อย่างง่าย ซึ่งเพิ่มความกว้างที่อยู่หน่วยความจำเพียง 4 บิต โดยการคูณที่อยู่ 64-KB ด้วย 16 ที่อยู่ 20 บิตสามารถระบุได้ทั้งหมดหนึ่งเมกะไบต์(1,048,576 ไบต์) ซึ่งค่อนข้างมากสำหรับคอมพิวเตอร์ขนาดเล็กในขณะนั้น แนวคิดของการลงทะเบียนเซกเมนต์ไม่ใช่เรื่องใหม่สำหรับเมนเฟรมจำนวนมากซึ่งใช้การลงทะเบียนเซกเมนต์เพื่อสลับไปยังงานต่างๆ อย่างรวดเร็ว ในทางปฏิบัติ บน x86 เป็นการใช้งานที่มีการวิพากษ์วิจารณ์มากซึ่งทำให้งานเขียนโปรแกรมและคอมไพเลอร์ทั่วไปซับซ้อนมาก อย่างไรก็ตาม สถาปัตยกรรมอนุญาตให้กำหนดแอดเดรสเชิงเส้นแบบ 32 บิตได้ในไม่ช้า(เริ่มด้วย 80386 ในปลายปี 1985) แต่ตัวแสดงหลัก (เช่นMicrosoft ) ใช้เวลาหลายปีในการแปลงระบบที่ใช้ 16 บิต ดังนั้น 80386 (และ 80486) จึงถูกใช้เป็นส่วนใหญ่อย่างรวดเร็ว (แต่ยังคงใช้ 16 บิต) 8086 เป็นเวลาหลายปี

ข้อมูลและรหัสสามารถจัดการได้ภายในเซ็กเมนต์ 16 บิต "ใกล้" ภายในส่วน 64 KB ของพื้นที่ที่อยู่ทั้งหมด 1  MBหรือคอมไพเลอร์สามารถทำงานในโหมด "ไกล" โดยใช้segment:offsetคู่32 บิตถึง (เท่านั้น) 1 MB แม้ว่าสิ่งนี้จะพิสูจน์ได้ว่าค่อนข้างจำกัดในช่วงกลางทศวรรษ 1980 แต่ก็ใช้งานได้สำหรับตลาดพีซีเกิดใหม่ และทำให้ง่ายต่อการแปลซอฟต์แวร์จาก8008 , 8080 , 8085และZ80ที่เก่ากว่าไปเป็นโปรเซสเซอร์รุ่นใหม่ ระหว่างปี 1985 โมเดลการกำหนดแอดเดรสเซ็กเมนต์ 16 บิตได้รับการแยกตัวประกอบอย่างมีประสิทธิภาพโดยการเปิดตัวรีจิสเตอร์ออฟเซ็ต 32 บิต ในการออกแบบ 386

ในโหมดจริงการแบ่งเซ็กเมนต์ทำได้โดยเลื่อนที่อยู่เซ็กเมนต์ไปทางซ้าย 4 บิต และเพิ่มออฟเซ็ตเพื่อรับแอดเดรส 20 บิตสุดท้าย ตัวอย่างเช่น ถ้า DS คือ A000h และ SI คือ 5677h DS:SI จะชี้ไปที่ที่อยู่ที่แน่นอน DS × 10h + SI = A5677h ดังนั้นพื้นที่ที่อยู่ทั้งหมดในโหมดจริงคือ 2 20ไบต์หรือ 1 MBซึ่งค่อนข้างน่าประทับใจสำหรับปี 1978 ที่อยู่หน่วยความจำทั้งหมดประกอบด้วยทั้งเซ็กเมนต์และออฟเซ็ต การเข้าถึงทุกประเภท (รหัส ข้อมูล หรือสแต็ก) มีการลงทะเบียนเซ็กเมนต์เริ่มต้นที่เชื่อมโยงอยู่ (สำหรับข้อมูล การลงทะเบียนมักจะเป็น DS สำหรับรหัสคือ CS และสำหรับสแต็กคือ SS) สำหรับการเข้าถึงข้อมูล สามารถระบุการลงทะเบียนเซ็กเมนต์ได้อย่างชัดเจน (โดยใช้คำนำหน้าการแทนที่เซ็กเมนต์) เพื่อใช้การลงทะเบียนเซ็กเมนต์ใดๆ จากสี่ส่วน

ในรูปแบบนี้ คู่เซ็กเมนต์/ออฟเซ็ตที่แตกต่างกันสองคู่สามารถชี้ไปที่ตำแหน่งที่แน่นอนเพียงแห่งเดียว ดังนั้น หาก DS คือ A111h และ SI คือ 4567h DS:SI จะชี้ไปที่ A5677h เดียวกันกับด้านบน แบบแผนนี้ทำให้ไม่สามารถใช้มากกว่าสี่ส่วนพร้อมกันได้ CS และ SS มีความสำคัญต่อการทำงานที่ถูกต้องของโปรแกรม ดังนั้นเฉพาะ DS และ ES เท่านั้นที่สามารถใช้ชี้ไปยังกลุ่มข้อมูลภายนอกโปรแกรม (หรือให้ชัดเจนกว่านั้นคือ นอกเซ็กเมนต์ที่รันอยู่ของโปรแกรม) หรือสแต็ก

ในโหมดการป้องกัน , การแนะนำใน 80286, ส่วนที่ลงทะเบียนไม่ได้มีที่อยู่ทางกายภาพของจุดเริ่มต้นของกลุ่ม แต่มี "ตัวเลือก" ที่ชี้ไปยังโครงสร้างระดับระบบที่เรียกว่าบ่งส่วนตัวอธิบายเซ็กเมนต์ประกอบด้วยที่อยู่จริงของจุดเริ่มต้นของเซ็กเมนต์ ความยาวของเซ็กเมนต์ และสิทธิ์การเข้าถึงเซ็กเมนต์นั้น ออฟเซ็ตจะถูกตรวจสอบกับความยาวของเซ็กเมนต์ โดยออฟเซ็ตหมายถึงตำแหน่งนอกเซ็กเมนต์ทำให้เกิดข้อยกเว้น ออฟเซ็ตที่อ้างถึงตำแหน่งภายในเซ็กเมนต์จะรวมกับที่อยู่จริงของจุดเริ่มต้นของเซ็กเมนต์เพื่อรับที่อยู่จริงที่สอดคล้องกับออฟเซ็ตนั้น

ลักษณะการแบ่งส่วนสามารถทำให้การเขียนโปรแกรมและการออกแบบคอมไพเลอร์ทำได้ยาก เนื่องจากการใช้พอยน์เตอร์ใกล้และไกลส่งผลต่อประสิทธิภาพการทำงาน

โหมดการกำหนดที่อยู่

โหมดการกำหนดแอดเดรสสำหรับโปรเซสเซอร์ 16 บิต x86 สามารถสรุปได้โดยสูตร: [16] [17]

โหมดการกำหนดแอดเดรสสำหรับโปรเซสเซอร์ x86 แบบ 32 บิต[18]และสำหรับโค้ด 32 บิตบนโปรเซสเซอร์ 64 บิต x86 สามารถสรุปได้โดยสูตร: [19]

โหมดการกำหนดแอดเดรสสำหรับโค้ด 64 บิตบนโปรเซสเซอร์ 64 บิต x86 สามารถสรุปได้โดยสูตร: [19]

การกำหนดแอดเดรสสัมพัทธ์ของคำสั่งในโค้ด 64 บิต (RIP + displacement โดยที่ RIP คือการลงทะเบียนตัวชี้คำสั่ง ) ช่วยลดความยุ่งยากในการปรับใช้โค้ดที่ไม่ขึ้นกับตำแหน่ง (ตามที่ใช้ในไลบรารีที่ใช้ร่วมกันในระบบปฏิบัติการบางระบบ) (20)

8086 มี 64 KBของแปดบิต (หรืออีกวิธีหนึ่งคือ32 K-word ของ 16-bit ) พื้นที่I/Oและ a64 กิโลไบต์ (ส่วนหนึ่ง) สแต็คในหน่วยความจำการสนับสนุนจากฮาร์ดแวร์คอมพิวเตอร์ เฉพาะคำ (สองไบต์) เท่านั้นที่สามารถพุชไปยังสแต็กได้ สแต็กจะขยายไปสู่ที่อยู่ที่ต่ำกว่าเป็นตัวเลข โดยSS:SPชี้ไปที่รายการที่พุชล่าสุด มีการขัดจังหวะ 256 ครั้ง ซึ่งสามารถเรียกใช้ได้ทั้งจากฮาร์ดแวร์และซอฟต์แวร์ ขัดจังหวะสามารถน้ำตกโดยใช้สแต็คในการจัดเก็บที่อยู่ผู้ส่ง

x86 ลงทะเบียน

16 บิต

Intel 8086และ8088ดั้งเดิมมีการลงทะเบียน16 บิตสิบสี่รายการ สี่รายการ (AX, BX, CX, DX) เป็นทะเบียนทั่วไป (GPR) แม้ว่าแต่ละรายการอาจมีจุดประสงค์เพิ่มเติม ตัวอย่างเช่น CX เท่านั้นที่สามารถใช้เป็นตัวนับด้วยคำสั่งวนซ้ำ แต่ละไบต์สามารถเข้าถึงได้เป็นสองไบต์แยกกัน (ดังนั้น ไบต์สูงของ BX สามารถเข้าถึงได้เป็น BH และไบต์ต่ำเป็น BL) การลงทะเบียนตัวชี้สองตัวมีบทบาทพิเศษ: SP (ตัวชี้สแต็ก) ชี้ไปที่ "ด้านบน" ของสแต็ก และ BP (ตัวชี้ฐาน) มักใช้เพื่อชี้ไปที่ตำแหน่งอื่นในสแต็ก โดยทั่วไปแล้วจะอยู่เหนือตัวแปรในเครื่อง (ดูตัวชี้เฟรม ). การลงทะเบียน SI, DI, BX และ BP เป็นการลงทะเบียนที่อยู่และอาจใช้สำหรับการจัดทำดัชนีอาร์เรย์

การลงทะเบียนสี่ส่วน (CS, DS, SS และ ES) ใช้เพื่อสร้างที่อยู่หน่วยความจำ ทะเบียนธงมีธงเช่นธงพก , ธงล้นและธงเป็นศูนย์ สุดท้าย ตัวชี้คำสั่ง (IP) ชี้ไปที่คำสั่งถัดไปที่จะถูกดึงจากหน่วยความจำแล้วดำเนินการ โปรแกรมไม่สามารถเข้าถึงการลงทะเบียนนี้โดยตรง (อ่านหรือเขียน) [21]

Intel 80186และ80188เป็นหลักรุ่นที่ 8086 หรือ 8088 CPU ตามลำดับโดยมีบนชิปอุปกรณ์ต่อพ่วงเพิ่มและพวกเขามีการลงทะเบียนของ CPU เช่นเดียวกับ 8086 และ 8088 (นอกเหนือจากการลงทะเบียนอินเตอร์เฟซสำหรับอุปกรณ์ต่อพ่วง)

8086, 8088, 80186, 80188 และสามารถใช้ตัวประมวลผลร่วมจุดลอยตัวที่8087 8087 ปรากฏต่อโปรแกรมเมอร์โดยเป็นส่วนหนึ่งของ CPU และเพิ่มรีจิสเตอร์กว้าง 80 บิตแปดตัว st(0) ถึง st(7) ซึ่งแต่ละอันสามารถเก็บข้อมูลตัวเลขในรูปแบบใดรูปแบบหนึ่งจากเจ็ดรูปแบบ: 32-, 64- หรือ จำนวนเต็มทศนิยม 80 บิต, จำนวนเต็ม 16-, 32- หรือ 64 บิต (ไบนารี) และจำนวนเต็มทศนิยม 80 บิต[6] : S-6, S-13..S-15​ นอกจากนี้ยังมีการลงทะเบียนสถานะ 16 บิตของตัวเองที่สามารถเข้าถึงได้ผ่านคำสั่งfntswและเป็นเรื่องปกติที่จะใช้บิตบางส่วนสำหรับการแตกสาขาโดยการคัดลอกลงในธงปกติ[22]

ในIntel 80286เพื่อรองรับโหมดที่ได้รับการป้องกัน การลงทะเบียนพิเศษสามรายการจะมีที่อยู่ตารางอธิบาย (GDTR, LDTR, IDTR ) และการลงทะเบียนงานที่สี่ (TR) ใช้สำหรับการเปลี่ยนงาน 80287เป็นตัวประมวลผลร่วมจุดลอยตัวสำหรับ 80286 และมีการลงทะเบียนเช่นเดียวกับ 8087 ด้วยรูปแบบข้อมูลเดียวกัน

32 บิต

รีจิสเตอร์ที่มีอยู่ในชุดคำสั่ง x86-64

ด้วยการถือกำเนิดของโปรเซสเซอร์80386แบบ 32 บิตรีจิสเตอร์เอนกประสงค์ 16 บิต รีจิสเตอร์พื้นฐาน รีจิสเตอร์ดัชนี ตัวชี้คำสั่ง และการลงทะเบียน FLAGSแต่ไม่ใช่รีจิสเตอร์เซ็กเมนต์ ถูกขยายเป็น 32 บิต ระบบการตั้งชื่อเป็นตัวแทนนี้โดย prefixing เป็น " E " (สำหรับ "ขยาย") เพื่อลงทะเบียนชื่อในภาษาประกอบ x86ดังนั้นการลงทะเบียน AX จึงสอดคล้องกับ 16 บิตต่ำสุดของการลงทะเบียน EAX 32 บิตใหม่ SI สอดคล้องกับ 16 บิตต่ำสุดของ ESI เป็นต้น รีจิสเตอร์เอนกประสงค์ เบสรีจิสเตอร์ และอินเด็กซ์รีจิสเตอร์สามารถใช้เป็นฐานในโหมดการกำหนดแอดเดรส และรีจิสเตอร์ทั้งหมดยกเว้นตัวชี้สแต็กสามารถใช้เป็นดัชนีในโหมดการกำหนดแอดเดรสได้

เพิ่มการลงทะเบียนเซ็กเมนต์ใหม่สองรายการ (FS และ GS) ด้วยจำนวนรีจิสเตอร์ คำแนะนำ และตัวถูกดำเนินการจำนวนมากขึ้นรูปแบบรหัสเครื่องจึงถูกขยาย เพื่อให้เข้ากันได้แบบย้อนหลัง คุณสามารถทำเครื่องหมายเซ็กเมนต์ที่มีโค้ดสั่งการได้ว่ามีคำสั่งแบบ 16 บิตหรือ 32 บิต คำนำหน้าพิเศษช่วยให้คำแนะนำรวมของ 32 บิตในส่วน 16 บิตหรือในทางกลับกัน

80386 มีตัวประมวลผลร่วมจุดลอยตัวที่เป็นตัวเลือก80387 ; มันมีรีจิสเตอร์กว้าง 80 บิตแปดตัว: st(0) ถึง st(7), [23]เช่น 8087 และ 80287 80386 ยังสามารถใช้ตัวประมวลผลร่วม 80287 ได้อีกด้วย [24]ด้วย80486และรุ่น x86 ที่ตามมาทั้งหมด หน่วยประมวลผลจุดลอยตัว (FPU) จะรวมอยู่ในชิป

Pentium MMXเพิ่มแปด 64 บิต MMX จำนวนเต็มลงทะเบียน (MMX0 เพื่อ MMX7 ซึ่งแบ่งปันบิตที่ต่ำกว่าด้วยกอง FPU 80 บิตกว้าง) [25]ด้วยPentium III Intel ได้เพิ่มตัวควบคุม/สถานะการลงทะเบียนSIMD Extensions (SSE) 32 บิต(MXCSR) และการลงทะเบียนจุดทศนิยม SSE 128 บิต (XMM0 ถึง XMM7) แปดรายการ (26)

64 บิต

เริ่มต้นด้วยโปรเซสเซอร์ AMD Opteronสถาปัตยกรรม x86 ขยายการลงทะเบียน 32 บิตเป็นการลงทะเบียน 64 บิตในลักษณะที่คล้ายกับส่วนขยาย 16 ถึง 32 บิตที่เกิดขึ้นR -prefix (สำหรับ "ลงทะเบียน") ระบุลงทะเบียน 64 บิต (Rax, RBX, RCX, RDX, RSI, RDI, RBP, RSP, RFLAGS, RIP) และเพิ่มเติม 64 บิตลงทะเบียนทั่วไปแปด (R8-R15 ) ถูกนำมาใช้ในการสร้างx86-64ด้วย อย่างไรก็ตาม ส่วนขยายเหล่านี้ใช้ได้เฉพาะในโหมด 64 บิต ซึ่งเป็นหนึ่งในสองโหมดที่มีเฉพาะในโหมดยาวเท่านั้น. โหมดการกำหนดแอดเดรสไม่ได้เปลี่ยนแปลงไปอย่างมากจากโหมด 32 บิต ยกเว้นว่าแอดเดรสถูกขยายเป็น 64 บิต ขณะนี้แอดเดรสเสมือนได้รับการขยายเป็น 64 บิต (เพื่อไม่ให้บิตโหมดในที่อยู่เสมือน) และรายละเอียดตัวเลือกอื่นๆ ลดลงอย่างมาก . นอกจากนี้ยังมีการเพิ่มโหมดการกำหนดแอดเดรสเพื่อให้สามารถอ้างอิงหน่วยความจำที่สัมพันธ์กับ RIP ( ตัวชี้คำสั่ง ) เพื่อทำให้การใช้งานโค้ดที่ไม่ขึ้นกับตำแหน่งง่ายขึ้นซึ่งใช้ในไลบรารีที่แบ่งใช้ในระบบปฏิบัติการบางระบบ

128 บิต

SIMD ลงทะเบียน XMM0–XMM15

256 บิต

SIMD ลงทะเบียน YMM0–YMM15

512 บิต

SIMD ลงทะเบียน ZMM0–ZMM31

เบ็ดเตล็ด/วัตถุประสงค์พิเศษ

โปรเซสเซอร์ x86 ที่มีโหมดป้องกันเช่น โปรเซสเซอร์ 80286 และใหม่กว่า มีการลงทะเบียน descriptor สามรายการ (GDTR, LDTR, IDTR ) และการลงทะเบียนงาน (TR)

โปรเซสเซอร์ x86 แบบ 32 บิต (เริ่มต้นด้วย 80386) ยังรวมรีจิสเตอร์พิเศษ/เบ็ดเตล็ดต่างๆ เช่น รีจิสเตอร์ควบคุม (CR0 ถึง 4, CR8 สำหรับ 64 บิตเท่านั้น) รีจิสเตอร์ดีบัก (DR0 ถึง 3 บวก 6 และ 7) รีจิสเตอร์ทดสอบ (TR3 ถึง 7; 80486 เท่านั้น) และรีจิสเตอร์เฉพาะรุ่น (MSR ปรากฏพร้อมกับ Pentium [o] )

AVX-512 มีรีจิสเตอร์มาสก์ 64 บิตพิเศษแปดรายการสำหรับการเลือกองค์ประกอบใน ZMM

วัตถุประสงค์

แม้ว่าการลงทะเบียนหลัก (ยกเว้นตัวชี้คำสั่ง) เป็น "วัตถุประสงค์ทั่วไป" ในชุดคำสั่งรุ่น 32 บิตและ 64 บิตและสามารถใช้สำหรับอะไรก็ได้ แต่เดิมมีจินตนาการว่าจะใช้สำหรับ วัตถุประสงค์ดังต่อไปนี้:

  • AL/AH/AX/EAX/RAX: ตัวสะสม
  • BL/BH/BX/EBX/RBX: ดัชนีฐาน (สำหรับใช้กับอาร์เรย์)
  • CL/CH/CX/ECX/RCX: ตัวนับ (สำหรับใช้กับลูปและสตริง)
  • DL/DH/DX/EDX/RDX: ขยายความแม่นยำของตัวสะสม (เช่น รวม EAX 32 บิตและ EDX สำหรับการดำเนินการจำนวนเต็ม 64 บิตในโค้ด 32 บิต)
  • SI/ESI/RSI: ดัชนีต้นทางสำหรับการดำเนินการสตริง
  • DI/EDI/RDI: ดัชนีปลายทางสำหรับการดำเนินการสตริง
  • SP/ESP/RSP: ตัวชี้สแต็กสำหรับที่อยู่ด้านบนของสแต็ก
  • BP / EBP / RBP: ตัวชี้ฐาน Stack สำหรับการถือครองที่อยู่ของปัจจุบันกองกรอบ
  • IP/EIP/RIP: ตัวชี้คำสั่ง ถือโปรแกรมตัวนับที่อยู่ของคำสั่งถัดไป

การลงทะเบียนเซ็กเมนต์:

  • CS: รหัส
  • DS: ดาต้า
  • SS: กอง
  • ES: ข้อมูลเสริม
  • FS: ข้อมูลเสริม #2
  • GS: ข้อมูลเสริม #3

ไม่มีวัตถุประสงค์เฉพาะสำหรับการลงทะเบียนอีก 8 รายการที่มีเฉพาะในโหมด 64 บิตเท่านั้น

คำแนะนำบางคำสั่งรวบรวมและดำเนินการอย่างมีประสิทธิภาพมากขึ้นเมื่อใช้รีจิสเตอร์เหล่านี้เพื่อจุดประสงค์ที่ออกแบบไว้ ตัวอย่างเช่น การใช้ AL เป็นตัวสะสมและการเพิ่มค่าไบต์ทันทีเพื่อสร้างการเพิ่มที่ มีประสิทธิภาพให้กับ AL opcodeของ 04h ในขณะที่การใช้การลงทะเบียน BL จะสร้างการเพิ่มทั่วไปและยาวขึ้นเพื่อลงทะเบียน opcode ของ 80C3h อีกตัวอย่างหนึ่งคือการหารและการคูณด้วยความแม่นยำสองเท่าที่ทำงานเฉพาะกับการลงทะเบียน AX และ DX

คอมไพเลอร์สมัยใหม่ได้รับประโยชน์จากการแนะนำของsib byte ( scale-index-base byte ) ที่อนุญาตให้รีจิสเตอร์ได้รับการปฏิบัติอย่างสม่ำเสมอ ( เหมือนมินิคอมพิวเตอร์ ) อย่างไรก็ตาม การใช้ sib byte ในระดับสากลนั้นไม่เหมาะสม เนื่องจากมันสร้างการเข้ารหัสที่ยาวกว่าการใช้เฉพาะเมื่อจำเป็นเท่านั้น (ประโยชน์หลักของ sib byte คือมุมฉากและโหมดการกำหนดแอดเดรสที่มีประสิทธิภาพมากขึ้น ซึ่งทำให้สามารถบันทึกคำแนะนำและการใช้รีจิสเตอร์สำหรับการคำนวณที่อยู่ เช่น การปรับขนาดดัชนี) คำแนะนำพิเศษบางอย่างสูญเสียลำดับความสำคัญในการออกแบบฮาร์ดแวร์ และช้ากว่าลำดับโค้ดขนาดเล็กที่เทียบเท่ากัน ตัวอย่างที่น่าสังเกตคือคำสั่ง LODSW

โครงสร้าง

ทะเบียนวัตถุประสงค์ทั่วไป (A, B, C และ D)
64 56 48 40 32 24 16 8
R?X
อดีต
?NS
?ชม ?หลี่
รีจิสเตอร์สำหรับวัตถุประสงค์ทั่วไปในโหมด 64 บิตเท่านั้น (R8, R9, R10, R11, R12, R13, R14, R15)
64 56 48 40 32 24 16 8
?
?NS
?W
?NS
เซ็กเมนต์รีจิสเตอร์ (C, D, S, E, F และ G)
16 8
?NS
การลงทะเบียนตัวชี้ (S และ B)
64 56 48 40 32 24 16 8
R?P
อีหยัง?
?NS
?PL

หมายเหตุ: การลงทะเบียน ?PL ใช้ได้เฉพาะในโหมด 64 บิตเท่านั้น

การลงทะเบียนดัชนี (S และ D)
64 56 48 40 32 24 16 8
R?I
อีฉัน
?ผม
?IL

หมายเหตุ: การลงทะเบียน ?IL ใช้ได้เฉพาะในโหมด 64 บิตเท่านั้น

คำแนะนำตัวชี้ลงทะเบียน (I)
64 56 48 40 32 24 16 8
ฉีก
EIP
IP

โหมดการทำงาน

โหมดจริง

โหมดที่อยู่จริง[27]โดยทั่วไปเรียกว่าโหมดจริงเป็นโหมดการทำงานของ8086และต่อมา x86 ที่รองรับซีพียูโหมดจริงมีลักษณะเฉพาะด้วยพื้นที่ที่อยู่หน่วยความจำแบบแบ่งกลุ่ม 20 บิต (หมายความว่าสามารถระบุหน่วยความจำได้มากกว่า 1 MiBเพียงเล็กน้อยเท่านั้น[p] ) การเข้าถึงซอฟต์แวร์โดยตรงไปยังฮาร์ดแวร์ต่อพ่วง และไม่มีแนวคิดในการป้องกันหน่วยความจำหรือการทำงานหลายอย่างพร้อมกันที่ฮาร์ดแวร์ ระดับ. ซีพียู x86 ทั้งหมดในซีรีส์80286และต่อมาเริ่มทำงานในโหมดจริงเมื่อเปิดเครื่อง80186CPU และรุ่นก่อนหน้ามีโหมดการทำงานเพียงโหมดเดียว ซึ่งเทียบเท่ากับโหมดจริงในชิปรุ่นต่อมา (บนแพลตฟอร์ม IBM PC ซอฟต์แวร์เข้าถึงรูทีน IBM BIOSได้โดยตรงในโหมดจริงเท่านั้น เนื่องจาก BIOS ถูกเขียนขึ้นสำหรับโหมดจริง อย่างไรก็ตาม นี่ไม่ใช่คุณสมบัติของ x86 CPU แต่เป็นการออกแบบ IBM BIOS)

ในการใช้หน่วยความจำมากกว่า 64 KB ต้องใช้เซ็กเมนต์รีจิสเตอร์ สิ่งนี้ทำให้เกิดความยุ่งยากอย่างมากสำหรับผู้ดำเนินการคอมไพเลอร์ซึ่งแนะนำโหมดพอยน์เตอร์แปลก ๆ เช่น "ใกล้" "ไกล" และ "มาก" เพื่อใช้ประโยชน์จากลักษณะโดยปริยายของสถาปัตยกรรมแบบแบ่งส่วนในระดับต่างๆ โดยพอยน์เตอร์บางตัวมีออฟเซ็ต 16 บิตภายในเซ็กเมนต์โดยนัย และอื่นๆ ตัวชี้ที่มีที่อยู่ของเซ็กเมนต์และออฟเซ็ตภายในเซ็กเมนต์ ในทางเทคนิค เป็นไปได้ที่จะใช้หน่วยความจำสูงสุด 256 KB สำหรับโค้ดและข้อมูล โดยสูงสุด 64 KB สำหรับโค้ด โดยการตั้งค่าการลงทะเบียนทั้งสี่เซ็กเมนต์เพียงครั้งเดียวแล้วใช้ออฟเซ็ต 16 บิตเท่านั้น หน่วยความจำที่อยู่ แต่สิ่งนี้ทำให้เกิดข้อจำกัดอย่างมากเกี่ยวกับวิธีการจัดการข้อมูลและตัวถูกดำเนินการของหน่วยความจำและละเมิดเจตนาทางสถาปัตยกรรมของนักออกแบบของ Intel ซึ่งมีไว้สำหรับแยกรายการข้อมูล (เช่น อาร์เรย์ โครงสร้าง หน่วยรหัส) ให้อยู่ในเซ็กเมนต์ที่แยกจากกัน และแก้ไขโดยแอดเดรสเซกเมนต์ของตนเอง ในโปรแกรมใหม่ที่ไม่ได้รับการพอร์ตจาก 8 ก่อนหน้านี้ โปรเซสเซอร์ - บิตพร้อมช่องว่างที่อยู่ 16 บิต

โหมดไม่จริง

โหมด Unreal ถูกใช้โดยระบบปฏิบัติการ 16 บิตและบูตโหลดเดอร์ 32 บิตบางตัว

โหมดการจัดการระบบ

โหมดการจัดการระบบ (SMM) จะใช้โดยเฟิร์มแวร์ระบบเท่านั้น ( BIOS / UEFI ) ไม่ใช่โดยระบบปฏิบัติการและซอฟต์แวร์แอปพลิเคชัน รหัส SMM ทำงานใน SMRAM

โหมดป้องกัน

นอกเหนือจากโหมดจริงแล้ว Intel 80286 ยังสนับสนุนโหมดที่ได้รับการป้องกัน การขยายหน่วยความจำกายภาพที่สามารถระบุแอดเดรสได้เป็น 16 MBและหน่วยความจำเสมือนที่กำหนดแอดเดรสได้เป็น 1  GBและมอบหน่วยความจำที่ได้รับการป้องกันซึ่งป้องกันไม่ให้โปรแกรมเสียหายระหว่างกัน ทำได้โดยใช้การลงทะเบียนเซ็กเมนต์สำหรับการจัดเก็บดัชนีลงในตารางตัวอธิบายที่เก็บไว้ในหน่วยความจำเท่านั้น มีตารางดังกล่าวสองตารางคือGlobal Descriptor Table (GDT) และLocal Descriptor Table (LDT) แต่ละตารางมีตัวอธิบายเซ็กเมนต์มากถึง 8192 แต่ละเซ็กเมนต์ให้การเข้าถึงหน่วยความจำ 64 KB ใน 80286 ตัวบอกเซ็กเมนต์ให้ที่อยู่ฐาน 24 บิตและที่อยู่ฐานนี้ถูกเพิ่มลงในออฟเซ็ต 16 บิตเพื่อสร้างที่อยู่ที่แน่นอน ที่อยู่ฐานจากตารางทำหน้าที่เดียวกันกับที่ค่าตามตัวอักษรของการลงทะเบียนเซกเมนต์ในโหมดจริง การลงทะเบียนเซกเมนต์ได้รับการแปลงจากการลงทะเบียนโดยตรงเป็นการลงทะเบียนทางอ้อม แต่ละส่วนสามารถกำหนดหนึ่งในสี่แหวนระดับใช้สำหรับฮาร์ดแวร์ที่ใช้รักษาความปลอดภัยคอมพิวเตอร์ตัวอธิบายเซ็กเมนต์แต่ละตัวยังมีฟิลด์ขีดจำกัดเซ็กเมนต์ซึ่งระบุออฟเซ็ตสูงสุดที่อาจใช้กับเซ็กเมนต์ เนื่องจากออฟเซ็ตเป็น 16 บิต เซ็กเมนต์จึงยังคงถูกจำกัดที่ 64 KB ในแต่ละโหมดที่มีการป้องกัน 80286 (28)

ทุกครั้งที่โหลดการลงทะเบียนเซ็กเมนต์ในโหมดที่ได้รับการป้องกัน 80286 จะต้องอ่านตัวบอกเซ็กเมนต์ขนาด 6 ไบต์จากหน่วยความจำลงในชุดของรีจิสเตอร์ภายในที่ซ่อนอยู่ ดังนั้น การลงทะเบียนเซกเมนต์การโหลดจะช้ากว่ามากในโหมดที่ได้รับการป้องกันมากกว่าในโหมดจริง และควรหลีกเลี่ยงการเปลี่ยนเซ็กเมนต์บ่อยมาก การทำงานของหน่วยความจำจริงโดยใช้เซ็กเมนต์โหมดที่ได้รับการป้องกันนั้นไม่ได้ช้าลงมากนัก เนื่องจาก 80286 และใหม่กว่ามีฮาร์ดแวร์ที่จะตรวจสอบออฟเซ็ตกับขีดจำกัดเซ็กเมนต์ควบคู่ไปกับการดำเนินการตามคำสั่ง

Intel 80386ชดเชยขยายและยังสนามวงเงินส่วนในแต่ละส่วนให้คำอธิบายที่ 32 บิตช่วยให้กลุ่มที่จะขยายพื้นที่หน่วยความจำทั้งหมด นอกจากนี้ยังแนะนำการสนับสนุนในโหมดป้องกันสำหรับการเพจซึ่งเป็นกลไกที่ทำให้สามารถใช้เพจหน่วยความจำเสมือนได้(ด้วยขนาดหน้า 4 KB) การเพจทำให้ CPU สามารถแม็พเพจใดๆ ของพื้นที่หน่วยความจำเสมือนกับเพจใดๆ ของพื้นที่หน่วยความจำฟิสิคัล เมื่อต้องการทำเช่นนี้ จะใช้ตารางการแมปเพิ่มเติมในหน่วยความจำที่เรียกว่าตารางหน้า โหมดป้องกันบน 80386 สามารถทำงานได้โดยเปิดหรือปิดการเพจ กลไกการแบ่งส่วนจะทำงานอยู่เสมอ และสร้างที่อยู่เสมือนที่แมปโดยกลไกการเพจหากมีการเปิดใช้งาน กลไกการแบ่งส่วนสามารถปิดใช้งานได้อย่างมีประสิทธิภาพด้วยการตั้งค่าเซ็กเมนต์ทั้งหมดให้มีที่อยู่ฐานเป็น 0 และจำกัดขนาดเท่ากับพื้นที่ที่อยู่ทั้งหมด สิ่งนี้ยังต้องการตารางตัวอธิบายเซ็กเมนต์ที่มีขนาดน้อยที่สุดซึ่งมีตัวอธิบายสี่ตัวเท่านั้น (เนื่องจากไม่จำเป็นต้องใช้เซ็กเมนต์ FS และ GS) [NS]

เพจจิ้งถูกใช้อย่างกว้างขวางโดยระบบปฏิบัติการมัลติทาสก์ที่ทันสมัยLinux , 386BSDและWindows NTได้รับการพัฒนาสำหรับ 386 เนื่องจากเป็น CPU สถาปัตยกรรม Intel ตัวแรกที่สนับสนุนการเพจและการชดเชยเซ็กเมนต์ 32 บิต สถาปัตยกรรม 386 กลายเป็นพื้นฐานของการพัฒนาเพิ่มเติมทั้งหมดในซีรีส์ x86

โปรเซสเซอร์ x86 ที่สนับสนุนการบูตโหมดที่ได้รับการป้องกันในโหมดจริงสำหรับความเข้ากันได้แบบย้อนหลังกับโปรเซสเซอร์คลาส 8086 ที่เก่ากว่า เมื่อเปิดเครื่อง (aka booting ) โปรเซสเซอร์จะเริ่มต้นในโหมดจริง จากนั้นจึงเริ่มดำเนินการตามคำแนะนำ รหัสบูตระบบปฏิบัติการ ซึ่งอาจจัดเก็บไว้ในROMอาจทำให้โปรเซสเซอร์อยู่ในโหมดที่ได้รับการป้องกันเพื่อเปิดใช้งานการเพจและคุณลักษณะอื่นๆ ชุดคำสั่งในโหมดป้องกันจะคล้ายกับที่ใช้ในโหมดจริง อย่างไรก็ตาม ข้อจำกัดบางประการที่ใช้กับโหมดจริง (เช่น ไม่สามารถใช้ ax,cx,dx ในการจัดการกับ[ จำเป็นต้องอ้างอิง ]) ห้ามใช้ในโหมดป้องกัน ในทางกลับกัน เลขคณิตของเซ็กเมนต์ ซึ่งเป็นวิธีปฏิบัติทั่วไปในโค้ดโหมดจริง ไม่อนุญาตในโหมดที่ได้รับการป้องกัน

โหมดเสมือน 8086

นอกจากนี้ยังมีโหมดย่อยของการดำเนินงานในโหมดการป้องกัน 32 บิต (aka 80386 โหมดป้องกัน) เรียกว่าเสมือน 8086 โหมดที่เรียกว่าเป็นโหมด V86 โดยพื้นฐานแล้วจะเป็นโหมดปฏิบัติการไฮบริดพิเศษที่อนุญาตให้โปรแกรมโหมดจริงและระบบปฏิบัติการทำงานในขณะที่อยู่ภายใต้การควบคุมของระบบปฏิบัติการผู้ควบคุมโหมดที่ได้รับการป้องกัน สิ่งนี้ทำให้มีความยืดหยุ่นอย่างมากในการรันทั้งโปรแกรมโหมดป้องกันและโปรแกรมโหมดจริงพร้อมกัน โหมดนี้มีให้สำหรับโหมดป้องกันเวอร์ชัน 32 บิตเท่านั้น ไม่มีอยู่ในโหมดป้องกันเวอร์ชัน 16 บิตหรือในโหมดยาว

โหมดยาว

ในช่วงกลางปี ​​1990 เป็นที่ชัดเจนว่าพื้นที่แอดเดรส 32 บิตของสถาปัตยกรรม x86 กำลังจำกัดประสิทธิภาพในแอปพลิเคชันที่ต้องใช้ชุดข้อมูลขนาดใหญ่ พื้นที่ที่อยู่ 32 บิตจะช่วยให้การประมวลผลโดยตรงอยู่เพียง 4 GB ของข้อมูลขนาดค้นพบโดยการใช้งานเช่นการประมวลผลวิดีโอและเครื่องมือฐานข้อมูล การใช้ที่อยู่ 64 บิตทำให้สามารถระบุข้อมูล 16 EiBได้โดยตรง  แม้ว่าสถาปัตยกรรม 64 บิตส่วนใหญ่จะไม่สนับสนุนการเข้าถึงพื้นที่ที่อยู่ 64 บิตแบบเต็ม ตัวอย่างเช่น AMD64 รองรับเฉพาะ 48 บิตจากที่อยู่ 64 บิต แบ่งออกเป็นสี่ระดับการเพจ

ในปี 2542 AMD ได้เผยแพร่ข้อกำหนดที่สมบูรณ์ (เกือบ) สมบูรณ์สำหรับส่วนขยาย64 บิตของสถาปัตยกรรม x86 ซึ่งพวกเขาเรียกว่าx86-64โดยอ้างว่ามีความตั้งใจที่จะผลิต การออกแบบที่ใช้อยู่ในปัจจุบันเกือบทุกหน่วยประมวลผล x86 มีข้อยกเว้นบางอย่างที่มีไว้สำหรับระบบฝังตัว

ชิปx86-64 ที่ผลิตจำนวนมากสำหรับตลาดทั่วไปมีวางจำหน่ายสี่ปีต่อมาในปี 2546 หลังจากใช้เวลาไปกับการทดสอบและปรับแต่งต้นแบบการทำงานต้นแบบ ในเวลาเดียวกับชื่อเริ่มต้นx86-64ก็เปลี่ยนไปAMD64ความสำเร็จของโปรเซสเซอร์ AMD64 ควบคู่ไปกับการรับสถาปัตยกรรม IA-64 ที่ไม่ค่อยอบอุ่น ส่งผลให้ Intel ต้องเปิดตัวชุดคำสั่ง AMD64 ของตัวเอง ก่อนหน้านี้ Intel ได้ใช้การสนับสนุนสำหรับ AMD64 [29]แต่เลือกที่จะไม่เปิดใช้งานโดยหวังว่า AMD จะไม่นำ AMD64 ออกสู่ตลาดก่อนที่ชุดคำสั่ง IA-64 ใหม่ของ Itanium จะถูกนำมาใช้กันอย่างแพร่หลาย มันตราการดำเนินงานของ AMD64 เป็นEM64Tและต่อมาแบรนมันIntel 64

ในชื่อวรรณกรรมและรุ่นของผลิตภัณฑ์ของไมโครซอฟท์และซันอ้างถึง AMD64 / Intel 64 รวมเป็นx64ใน Windows และSolarisระบบปฏิบัติการ ลีนุกซ์รุ่นลินุกซ์เรียกว่า "x86-64", ตัวแปร "x86_64" หรือ "amd64" ระบบBSDใช้ "amd64" ในขณะที่macOSใช้ "x86_64"

โหมดแบบยาวส่วนใหญ่เป็นส่วนขยายของชุดคำสั่งแบบ 32 บิต แต่ต่างจากการเปลี่ยนแบบ 16 เป็น 32 บิต คำสั่งจำนวนมากถูกละทิ้งในโหมด 64 บิต สิ่งนี้ไม่ส่งผลกระทบต่อความเข้ากันได้ของไบนารีย้อนหลังจริง (ซึ่งจะรันโค้ดดั้งเดิมในโหมดอื่นที่ยังคงรองรับคำสั่งเหล่านั้น) แต่จะเปลี่ยนวิธีการทำงานของแอสเซมเบลอร์และคอมไพเลอร์สำหรับโค้ดใหม่

นี่เป็นครั้งแรกที่ส่วนขยายที่สำคัญของสถาปัตยกรรม x86 เริ่มต้นและเกิดขึ้นจากผู้ผลิตรายอื่นที่ไม่ใช่ Intel นอกจากนี้ยังเป็นครั้งแรกที่ Intel ยอมรับเทคโนโลยีในลักษณะนี้จากแหล่งภายนอก

ส่วนขยาย

หน่วยจุดลอยตัว

โปรเซสเซอร์ x86 รุ่นแรกสามารถขยายได้ด้วยฮาร์ดแวร์แบบทศนิยมในรูปแบบของชุดของโปรเซสเซอร์ร่วมที่เป็นตัวเลข แบบทศนิยมที่มีชื่อเช่น8087 , 80287 และ 80387 ย่อ x87 สิ่งนี้เรียกอีกอย่างว่า NPX ( Numeric Processor eXtension ) ซึ่งเป็นชื่อที่เหมาะสมตั้งแต่ตัวประมวลผลร่วม ในขณะที่ใช้เป็นหลักสำหรับการคำนวณจุดทศนิยม ยังดำเนินการเลขจำนวนเต็มทั้งในรูปแบบไบนารีและทศนิยม มีข้อยกเว้นน้อยมาก 80486 และต่อมาประมวลผล x86 แล้วบูรณาการการทำงาน x87 นี้บนชิปซึ่งทำให้คำแนะนำ x87 ที่พฤตินัยส่วนหนึ่งของชุดคำสั่ง x86

แต่ละรีจิสเตอร์ x87 รู้จักกันในชื่อ ST(0) ถึง ST(7) มีความกว้าง 80 บิต และจัดเก็บตัวเลขในรูปแบบความแม่นยำแบบขยายสองเท่ามาตรฐาน IEEE แบบทศนิยมรีจิสเตอร์เหล่านี้จัดเป็นสแต็กโดยมี ST(0) อยู่ด้านบน สิ่งนี้ทำเพื่อประหยัดพื้นที่ opcode และรีจิสเตอร์สามารถเข้าถึงได้แบบสุ่มสำหรับตัวถูกดำเนินการอย่างใดอย่างหนึ่งในคำสั่ง register-to-register เท่านั้น ST0 ต้องเป็นหนึ่งในตัวถูกดำเนินการสองตัวเสมอ ไม่ว่าจะเป็นต้นทางหรือปลายทาง ไม่ว่าตัวถูกดำเนินการอื่นจะเป็น ST(x) หรือตัวถูกดำเนินการในหน่วยความจำ อย่างไรก็ตาม การเข้าถึงสแต็กรีจิสเตอร์แบบสุ่มสามารถรับได้ผ่านคำสั่งที่แลกเปลี่ยน ST(x) ที่ระบุกับ ST(0)

การดำเนินการรวมถึงฟังก์ชันเลขคณิตและฟังก์ชันเหนือธรรมชาติ รวมถึงฟังก์ชันตรีโกณมิติและเลขชี้กำลัง และคำสั่งที่โหลดค่าคงที่ทั่วไป (เช่น 0; 1; e ฐานของลอการิทึมธรรมชาติ log2(10) และ log10(2)) สแต็กรีจิสเตอร์ ในขณะที่ความสามารถจำนวนเต็มมักจะถูกมองข้าม x87 สามารถทำงานกับจำนวนเต็มที่มากกว่าด้วยคำสั่งเดียวมากกว่า 8086, 80286, 80386 หรือซีพียู x86 ใดๆ ที่ไม่มีส่วนขยาย 64 บิต และการคำนวณจำนวนเต็มซ้ำแม้ในค่าเล็กน้อย (เช่น 16 บิต) สามารถเร่งได้โดยการรันคำสั่งจำนวนเต็มบน x86 CPU และ x87 แบบขนาน (ซีพียู x86 ทำงานต่อไปในขณะที่ตัวประมวลผลร่วม x87 คำนวณ และ x87 ตั้งค่าสัญญาณไปที่ x86 เมื่อเสร็จแล้วหรือขัดจังหวะ x86 หากจำเป็นต้องให้ความสนใจเนื่องจากเกิดข้อผิดพลาด)

MMX

MMX คือชุดคำสั่งSIMD ที่ออกแบบโดย Intel และเปิดตัวในปี 1997 สำหรับไมโครโปรเซสเซอร์Pentium MMX ชุดคำสั่ง MMX ได้รับการพัฒนาจากแนวคิดที่คล้ายกันครั้งแรกที่ใช้ในi860 อินเทล รองรับโปรเซสเซอร์ IA-32 รุ่นต่อมาโดย Intel และผู้จำหน่ายรายอื่นๆ โดยทั่วไปแล้ว MMX จะใช้สำหรับการประมวลผลวิดีโอ (เช่น ในแอปพลิเคชันมัลติมีเดีย)

MMX เพิ่มการลงทะเบียนใหม่ 8 รายการให้กับสถาปัตยกรรม เรียกว่า MM0 ถึง MM7 (ต่อจากนี้ไปจะเรียกว่าMMn ) ในความเป็นจริง การลงทะเบียนใหม่เหล่านี้เป็นเพียงนามแฝงสำหรับการลงทะเบียนสแต็ก x87 FPU ที่มีอยู่ ดังนั้น สิ่งใดก็ตามที่ทำกับสแต็กทศนิยมก็จะส่งผลต่อการลงทะเบียน MMX ด้วย ไม่เหมือนกับสแต็ก FP การลงทะเบียน MMn เหล่านี้ได้รับการแก้ไข ไม่สัมพันธ์กัน ดังนั้นจึงสามารถเข้าถึงได้แบบสุ่ม ชุดคำสั่งไม่ได้นำความหมายที่เหมือนสแต็กมาใช้ เพื่อให้ระบบปฏิบัติการที่มีอยู่ยังคงสามารถบันทึกและกู้คืนสถานะรีจิสเตอร์ได้อย่างถูกต้องเมื่อทำงานหลายอย่างพร้อมกันโดยไม่มีการปรับเปลี่ยน

การลงทะเบียน MMn แต่ละรายการเป็นจำนวนเต็ม 64 บิต อย่างไรก็ตาม หนึ่งในแนวคิดหลักของชุดคำสั่ง MMX คือแนวคิดของชนิดข้อมูลที่บรรจุซึ่งหมายความว่าแทนที่จะใช้รีจิสเตอร์ทั้งหมดสำหรับจำนวนเต็ม 64 บิตเดียว ( quadword ) หนึ่งอาจใช้เพื่อประกอบด้วยจำนวนเต็ม 32 บิตสองตัว ( doubleword ), จำนวนเต็ม 16 บิตสี่ตัว ( word ) หรือจำนวนเต็ม 8 บิตแปดตัว ( ไบต์ ) เนื่องจากการลงทะเบียน MMn 64 บิตของ MMX นั้นใช้นามแฝงกับสแต็ก FPU และการลงทะเบียนจุดลอยตัวแต่ละตัวมีความกว้าง 80 บิต 16 บิตบนของการลงทะเบียนทศนิยมจะไม่ใช้ใน MMX บิตเหล่านี้ถูกกำหนดเป็นบิตทั้งหมดโดยคำสั่ง MMX ซึ่งสอดคล้องกับการแสดงจุดทศนิยมของNaNหรืออินฟินิตี้

3Dตอนนี้!

ในปี 1997 AMD ได้เปิดตัว 3DNow! การนำเทคโนโลยีนี้มาใช้ใกล้เคียงกับการเพิ่มขึ้นของแอปพลิเคชันความบันเทิง3 มิติและได้รับการออกแบบมาเพื่อปรับปรุงประสิทธิภาพการประมวลผลเวกเตอร์ของ CPU ของแอปพลิเคชันที่เน้นกราฟิก นักพัฒนาวิดีโอเกม 3D และผู้จำหน่ายฮาร์ดแวร์กราฟิก 3D ใช้ 3DNow! เพื่อเพิ่มประสิทธิภาพในโปรเซสเซอร์K6และAthlonของ AMD

3Dตอนนี้! ได้รับการออกแบบให้เป็นวิวัฒนาการตามธรรมชาติของ MMX จากจำนวนเต็มไปจนถึงจุดลอยตัว ด้วยเหตุนี้ มันจึงใช้หลักการตั้งชื่อการลงทะเบียนแบบเดียวกันกับ MMX นั่นคือ MM0 ถึง MM7 ข้อแตกต่างเพียงอย่างเดียวคือแทนที่จะบรรจุจำนวนเต็มลงในรีจิสเตอร์เหล่านี้จะมีการบรรจุตัวเลขทศนิยมที่มีความแม่นยำเพียงจุดเดียวสองตัวลงในรีจิสเตอร์แต่ละตัว ข้อดีของการใช้นามแฝงของการลงทะเบียน FPU คือคำสั่งและโครงสร้างข้อมูลเดียวกันที่ใช้ในการบันทึกสถานะของการลงทะเบียน FPU ยังสามารถใช้เพื่อบันทึก 3DNow! รัฐลงทะเบียน ดังนั้นจึงไม่จำเป็นต้องทำการปรับเปลี่ยนพิเศษใดๆ กับระบบปฏิบัติการซึ่งมิฉะนั้นจะไม่ทราบเกี่ยวกับระบบปฏิบัติการเหล่านั้น

SSEและ AVX

ในปี 1999 Intel ได้เปิดตัวชุดคำสั่ง Streaming SIMD Extensions (SSE) ตามมาในปี 2000 ด้วย SSE2 การเพิ่มครั้งแรกทำให้สามารถโหลดการดำเนินการจุดทศนิยมพื้นฐานจากสแต็ก x87 และครั้งที่สองทำให้ MMX เกือบจะล้าสมัยและอนุญาตให้คอมไพเลอร์ทั่วไปกำหนดเป้าหมายคำสั่งตามความเป็นจริงได้ เปิดตัวในปี 2547 พร้อมกับรุ่นPrescottของโปรเซสเซอร์ Pentium 4 SSE3 ได้เพิ่มหน่วยความจำเฉพาะและคำแนะนำในการจัดการเธรดเพื่อเพิ่มประสิทธิภาพของHyperThreadingของ Intelเทคโนโลยี. AMD อนุญาตชุดคำสั่ง SSE3 และใช้คำสั่ง SSE3 ส่วนใหญ่สำหรับรุ่น E และโปรเซสเซอร์ Athlon 64 ที่ใหม่กว่า Athlon 64 ไม่รองรับ HyperThreading และไม่มีคำสั่ง SSE3 ที่ใช้สำหรับ HyperThreading เท่านั้น

SSE ละทิ้งการเชื่อมต่อแบบเดิมทั้งหมดไปยังกอง FPU นอกจากนี้ยังหมายความว่าชุดคำสั่งนี้ยกเลิกการเชื่อมต่อแบบเดิมทั้งหมดไปยังชุดคำสั่ง SIMD รุ่นก่อนหน้า เช่น MMX แต่มันทำให้นักออกแบบมีอิสระขึ้น ทำให้พวกเขาสามารถใช้รีจิสเตอร์ที่ใหญ่ขึ้น ไม่จำกัดโดยขนาดของรีจิสเตอร์ FPU ผู้ออกแบบได้สร้างรีจิสเตอร์ 128 บิตจำนวนแปดรายการ ชื่อว่า XMM0 ถึง XMM7 ( หมายเหตุ : ในAMD64, จำนวนการลงทะเบียน SSE XMM ได้เพิ่มขึ้นจาก 8 เป็น 16) อย่างไรก็ตาม ข้อเสียคือระบบปฏิบัติการต้องมีการรับรู้ถึงชุดคำสั่งใหม่นี้ เพื่อให้สามารถบันทึกสถานะการลงทะเบียนได้ ดังนั้น Intel จึงได้สร้างโหมดป้องกันเวอร์ชันแก้ไขเล็กน้อย ซึ่งเรียกว่าโหมดขั้นสูง ซึ่งช่วยให้สามารถใช้คำสั่ง SSE ได้ ในขณะที่ยังคงปิดใช้งานในโหมดที่ได้รับการป้องกันตามปกติ ระบบปฏิบัติการที่รับรู้ SSE จะเปิดใช้งานโหมดที่ปรับปรุงแล้ว ในขณะที่ระบบปฏิบัติการที่ไม่รู้จักจะเข้าสู่โหมดที่ได้รับการป้องกันแบบเดิมเท่านั้น

SSE เป็นชุดคำสั่ง SIMD ที่ทำงานเฉพาะกับค่าทศนิยม เช่น 3DNow! อย่างไรก็ตาม ไม่เหมือนกับ 3DNow! มันตัดการเชื่อมต่อแบบเดิมทั้งหมดไปยังกอง FPU เนื่องจากมีรีจิสเตอร์ที่ใหญ่กว่า 3DNow! SSE จึงสามารถบรรจุโฟลตความแม่นยำเดี่ยวจำนวนสองเท่าลงในรีจิสเตอร์ของมันได้ SSE ดั้งเดิมถูกจำกัดให้มีเพียงตัวเลขที่มีความแม่นยำเดียวเท่านั้น เช่น 3DNow! SSE2 นำเสนอความสามารถในการบรรจุความแม่นยำสองเท่าตัวเลขด้วย ซึ่ง 3DNow! ไม่มีความเป็นไปได้ที่จะทำเพราะตัวเลขความแม่นยำสองเท่าคือขนาด 64 บิตซึ่งจะเป็นขนาดเต็มของ 3DNow เดียว! MMn ลงทะเบียน ที่ 128 บิต การลงทะเบียน SSE XMMn สามารถแพ็คสองทุ่นความแม่นยำสองเท่าในการลงทะเบียนเดียว ดังนั้น SSE2 จึงเหมาะสมสำหรับการคำนวณทางวิทยาศาสตร์มากกว่า SSE1 หรือ 3DNow! ซึ่งถูกจำกัดให้มีเพียงความแม่นยำเดียวเท่านั้น SSE3 ไม่ได้แนะนำการลงทะเบียนเพิ่มเติมใดๆ

Advanced Vector Extensions (AVX) เพิ่มขนาดการลงทะเบียน SSE เป็นสองเท่าเป็นการลงทะเบียน YMM 256 บิต นอกจากนี้ยังแนะนำรูปแบบการเข้ารหัส VEX เพื่อรองรับรีจิสเตอร์ขนาดใหญ่ พร้อมคำแนะนำเล็กน้อยในการเปลี่ยนองค์ประกอบ AVX2 ไม่ได้แนะนำการลงทะเบียนเพิ่มเติม แต่มีความโดดเด่นสำหรับการเพิ่มเติมสำหรับการกำบังรวบรวมและสับเปลี่ยนคำสั่ง

คุณสมบัติ AVX-512 ยังมีการขยายอีก 32 การลงทะเบียน ZMM 512 บิตและรูปแบบ EVEX ใหม่ ต่างจากรุ่นก่อนที่มีส่วนขยายแบบเสาหิน มันถูกแบ่งออกเป็นส่วนย่อยจำนวนมากที่ซีพียูเฉพาะรุ่นสามารถเลือกนำไปใช้ได้

ส่วนขยายที่อยู่ทางกายภาพ (PAE)

ส่วนขยายที่อยู่ทางกายภาพหรือ PAE ถูกเพิ่มใน Intel Pentium Proเป็นครั้งแรกและต่อมาโดยAMDในโปรเซสเซอร์ Athlon [30]เพื่อให้สามารถระบุ RAM ได้สูงสุด 64 GB โดยไม่ต้อง PAE, RAM ที่มีอยู่จริงในโหมด 32 บิตการป้องกันมักจะ จำกัด ถึง 4  GB PAE กำหนดโครงสร้างตารางหน้าที่แตกต่างกันโดยมีรายการตารางหน้ากว้างขึ้นและตารางหน้าระดับที่สาม อนุญาตให้มีที่อยู่ทางกายภาพเพิ่มเติมบิต แม้ว่าการใช้งานเบื้องต้นบนโปรเซสเซอร์ 32 บิตในทางทฤษฎีจะรองรับ RAM สูงสุด 64 GB แต่ชิปเซ็ตและข้อจำกัดอื่นๆ ของแพลตฟอร์มมักจำกัดสิ่งที่สามารถใช้ได้จริงx86-64โปรเซสเซอร์กำหนดโครงสร้างตารางหน้าที่ในทางทฤษฎีอนุญาตให้มีที่อยู่ทางกายภาพได้ถึง 52 บิต แม้ว่าอีกครั้ง ปัญหาของชิปเซ็ตและแพลตฟอร์มอื่นๆ (เช่น จำนวนสล็อต DIMM ที่พร้อมใช้งาน และ RAM สูงสุดที่เป็นไปได้ต่อ DIMM) จะป้องกันไม่ให้พื้นที่ที่อยู่ทางกายภาพขนาดใหญ่ ที่ตระหนักรู้. บนโปรเซสเซอร์ x86-64 โหมด PAE จะต้องเปิดใช้งานก่อนที่จะเปลี่ยนเป็นโหมดยาวและจะต้องยังคงทำงานอยู่ในขณะที่โหมดยาวทำงาน ดังนั้นในโหมดยาวจะไม่มีโหมด "ไม่ใช่ PAE" โหมด PAE ไม่มีผลกับความกว้างของแอดเดรสเชิงเส้นหรือเสมือน

x86-64

ในกลุ่มซูเปอร์คอมพิวเตอร์ (ตามที่ติดตามโดยข้อมูล500 อันดับแรกและแสดงในแผนภาพด้านบน อัปเดตล่าสุด 2013) การปรากฏตัวของส่วนขยาย 64 บิตสำหรับสถาปัตยกรรม x86 เปิดใช้งานโปรเซสเซอร์ x86 64 บิตโดย AMD และ Intel (นกเป็ดน้ำและฟักสีน้ำเงิน ในไดอะแกรมตามลำดับ) เพื่อแทนที่สถาปัตยกรรมโปรเซสเซอร์ RISC ส่วนใหญ่ที่ใช้ก่อนหน้านี้ในระบบดังกล่าว (รวมถึงPA-RISC , SPARC , Alphaและอื่น ๆ ) และ 32 บิต x86 (สีเขียวบนไดอะแกรม) แม้ว่าในตอนแรก Intel จะพยายามไม่สำเร็จ แทนที่ x86 ด้วยสถาปัตยกรรม 64 บิตใหม่ที่เข้ากันไม่ได้ในโปรเซสเซอร์Itaniumสถาปัตยกรรมหลักที่ไม่ใช่ x86 ซึ่งยังคงใช้อยู่ ณ ปี 2014 ในกลุ่มซูเปอร์คอมพิวเตอร์คือPower ISAใช้โดยไมโครโปรเซสเซอร์ IBM POWER (สีน้ำเงินที่มีการปูกระเบื้องเพชรในไดอะแกรม) โดยมี SPARC เป็นวินาทีที่อยู่ห่างไกล

ในช่วงปี 2000 ขีดจำกัดของโปรเซสเซอร์ x86 แบบ 32 บิตในการกำหนดที่อยู่หน่วยความจำเป็นอุปสรรคต่อการใช้งานในกลุ่มการประมวลผลประสิทธิภาพสูงและเวิร์กสเตชันเดสก์ท็อปที่ทรงพลัง x86 รุ่นเก่าแบบ 32 บิตกำลังแข่งขันกับสถาปัตยกรรม RISC 64 บิตที่ล้ำหน้ากว่ามาก ซึ่งสามารถระบุหน่วยความจำได้มากขึ้น Intel และระบบนิเวศ x86 ทั้งหมดจำเป็นต้องมีการกำหนดที่อยู่หน่วยความจำ 64 บิต หาก x86 อยู่รอดในยุคการประมวลผลแบบ 64 บิต เนื่องจากแอปพลิเคชันซอฟต์แวร์สำหรับเวิร์กสเตชันและเดสก์ท็อปกำลังจะถึงขีดจำกัดของการกำหนดที่อยู่หน่วยความจำแบบ 32 บิตในไม่ช้า อย่างไรก็ตาม Intel รู้สึกว่าเป็นเวลาที่เหมาะสมในการสร้างขั้นตอนที่กล้าหาญและใช้การเปลี่ยนไปใช้คอมพิวเตอร์เดสก์ท็อป 64 บิตเพื่อเปลี่ยนจากสถาปัตยกรรม x86 โดยทั่วไป ซึ่งเป็นการทดลองที่ล้มเหลวในท้ายที่สุด

ในปี 2544 Intel พยายามแนะนำสถาปัตยกรรม 64 บิตที่ไม่ใช่ x86 ชื่อIA-64ในตัวประมวลผลItaniumโดยเริ่มแรกมุ่งเป้าไปที่ตลาดการประมวลผลประสิทธิภาพสูงโดยหวังว่าในที่สุดมันจะมาแทนที่ x86 แบบ 32 บิต[31]ในขณะที่ IA-64 เข้ากันไม่ได้กับ x86 โปรเซสเซอร์ Itanium ให้ความสามารถในการจำลองสำหรับการแปลคำสั่ง x86 เป็น IA-64 แต่สิ่งนี้ส่งผลกระทบต่อประสิทธิภาพของโปรแกรม x86 อย่างมากจนแทบไม่มีประโยชน์จริง ๆ กับ ผู้ใช้: โปรแกรมเมอร์ควรเขียนโปรแกรม x86 ใหม่สำหรับสถาปัตยกรรม IA-64 มิฉะนั้นประสิทธิภาพใน Itanium จะเป็นลำดับความสำคัญที่แย่กว่าโปรเซสเซอร์ x86 จริง ตลาดปฏิเสธโปรเซสเซอร์ Itanium เนื่องจากมันพังความเข้ากันได้แบบย้อนหลังและต้องการใช้ชิป x86 ต่อไป และมีโปรแกรมเขียนใหม่น้อยมากสำหรับ IA-64

AMD ตัดสินใจที่จะใช้เส้นทางอื่นไปยังการกำหนดที่อยู่หน่วยความจำ 64 บิต เพื่อให้แน่ใจว่าความเข้ากันได้แบบย้อนหลังจะไม่ได้รับผลกระทบ ในเดือนเมษายน พ.ศ. 2546 AMD ได้เปิดตัวโปรเซสเซอร์ x86 ตัวแรกที่มีการลงทะเบียนใช้งานทั่วไปแบบ 64 บิตคือOpteronซึ่งสามารถระบุหน่วยความจำเสมือนได้มากกว่า 4  GBโดยใช้ส่วนขยายx86-64ใหม่(หรือที่เรียกว่า AMD64 หรือ x64) ส่วนขยาย 64 บิตสำหรับสถาปัตยกรรม x86 เปิดใช้งานเฉพาะในโหมดยาวที่เพิ่งเปิดตัวดังนั้นแอปพลิเคชันและระบบปฏิบัติการแบบ 32 บิตและ 16 บิตจึงสามารถใช้โปรเซสเซอร์ AMD64 ต่อในโหมดป้องกันหรือโหมดอื่นๆ ได้ โดยไม่ต้องเสียสละแม้แต่น้อย ประสิทธิภาพ[32]และกลับไปสู่คำสั่งเดิมของ Intel 8086 แบบ 16 บิตได้อย่างสมบูรณ์[33] : 13–14ตลาดตอบรับในเชิงบวก โดยใช้โปรเซสเซอร์ AMD 64 บิตสำหรับทั้งแอพพลิเคชั่นประสิทธิภาพสูงและคอมพิวเตอร์สำหรับธุรกิจหรือที่บ้าน

เมื่อเห็นตลาดปฏิเสธโปรเซสเซอร์ Itanium ที่เข้ากันไม่ได้และ Microsoft ที่สนับสนุน AMD64 Intel จึงต้องตอบสนองและเปิดตัวโปรเซสเซอร์ x86-64 ของตัวเอง นั่นคือPrescott Pentium 4 ในเดือนกรกฎาคม 2547 [34]ด้วยเหตุนี้ โปรเซสเซอร์ Itanium ที่มี IA-64 ชุดคำสั่งนั้นไม่ค่อยได้ใช้ และ x86 ผ่านการจุติของ x86-64 ยังคงเป็นสถาปัตยกรรม CPU ที่โดดเด่นในคอมพิวเตอร์ที่ไม่ได้ฝังตัว

x86-64 ยังแนะนำบิต NXซึ่งข้อเสนอการป้องกันการรักษาความปลอดภัยข้อบกพร่องที่เกิดจากการรุกบัฟเฟอร์

อันเป็นผลมาจากการสนับสนุน 64 บิตของ AMD ในสายผลิตภัณฑ์ x86 และการยอมรับในภายหลังโดย Intel สถาปัตยกรรม RISC 64 บิตจึงหยุดที่จะเป็นภัยคุกคามต่อระบบนิเวศ x86 และเกือบจะหายไปจากตลาดเวิร์กสเตชัน x86-64 เริ่มถูกนำมาใช้ในซูเปอร์คอมพิวเตอร์ที่ทรงพลัง(ในรูปแบบAMD OpteronและIntel Xeon ) ซึ่งเป็นตลาดที่เคยเป็นที่อยู่อาศัยตามธรรมชาติสำหรับการออกแบบ RISC แบบ 64 บิต (เช่นไมโครโปรเซสเซอร์ IBM POWERหรือSPARC processors). The great leap toward 64-bit computing and the maintenance of backward compatibility with 32-bit and 16-bit software enabled the x86 architecture to become an extremely flexible platform today, with x86 chips being utilized from small low-power systems (for example, Intel Quark and Intel Atom) to fast gaming desktop computers (for example, Intel Core i7 and AMD FX/Ryzen), and even dominate large supercomputing clusters, effectively leaving only the ARM 32-bit and 64-bit RISC architecture as a competitor in the smartphone and tablet market.

Virtualization

Prior to 2005, x86 architecture processors were unable to meet the Popek and Goldberg requirements - a specification for virtualization created in 1974 by Gerald J. Popek and Robert P. Goldberg. However, both proprietary and open-source x86 virtualization hypervisor products were developed using software-based virtualization. Proprietary systems include Hyper-V, Parallels Workstation, VMware ESX, VMware Workstation, VMware Workstation Player and Windows Virtual PC, while free and open-source systems include QEMU, Kernel-based Virtual Machine, VirtualBox, and Xen.

The introduction of the AMD-V and Intel VT-x instruction sets in 2005 allowed x86 processors to meet the Popek and Goldberg virtualization requirements.[35]

AES

See also

Notes

  1. ^ Unlike the microarchitecture (and specific electronic and physical implementation) used for a specific microprocessor design.
  2. ^ Intel abandoned its "x86" naming scheme with the P5 Pentium during 1993 (as numbers could not be trademarked). However, the term x86 was already established among technicians, compiler writers etc.
  3. ^ The GRID Compass laptop, for instance.
  4. ^ Including the 8088, 80186, 80188 and 80286 processors.
  5. ^ Such a system also contained the usual mix of standard 7400 series support components, including multiplexers, buffers, and glue logic.
  6. ^ The actual meaning of iAPX was Intel Advanced Performance Architecture, or sometimes Intel Advanced Processor Architecture.
  7. ^ late 1981 to early 1984, approximately
  8. ^ The embedded processor market is populated by more than 25 different architectures, which, due to the price sensitivity, low power, and hardware simplicity requirements, outnumber the x86.
  9. ^ The NEC V20 and V30 also provided the older 8080 instruction set, allowing PCs equipped with these microprocessors to operate CP/M applications at full speed (i.e., without the need to simulate an 8080 by software).
  10. ^ Fabless companies designed the chip and contracted another company to manufacture it, while fabbed companies would do both the design and the manufacturing themselves. Some companies started as fabbed manufacturers and later became fabless designers, one such example being AMD.
  11. ^ It had a slower FPU however, which is slightly ironic as Cyrix started out as a designer of fast floating-point units for x86 processors.
  12. ^ 16-bit and 32-bit microprocessors were introduced during 1978 and 1985 respectively; plans for 64-bit was announced during 1999 and gradually introduced from 2003 and onwards.
  13. ^ Some "CISC" designs, such as the PDP-11, may use two.
  14. ^ That is because integer arithmetic generates carry between subsequent bits (unlike simple bitwise operations).
  15. ^ Two MSRs of particular interest are SYSENTER_EIP_MSR and SYSENTER_ESP_MSR, introduced on the Pentium® II processor, which store the address of the kernel mode system service handler and corresponding kernel stack pointer. Initialized during system startup, SYSENTER_EIP_MSR and SYSENTER_ESP_MSR are used by the SYSENTER (Intel) or SYSCALL (AMD) instructions to achieve Fast System Calls, about three times faster than the software interrupt method used previously.
  16. ^ Because a segmented address is the sum of a 16-bit segment multiplied by 16 and a 16-bit offset, the maximum address is 1,114,095 (10FFEF hex), for an addressability of 1,114,096 bytes = 1 MB + 65,520 bytes. Before the 80286, x86 CPUs had only 20 physical address lines (address bit signals), so the 21st bit of the address, bit 20, was dropped and addresses past 1 MB were mirrors of the low end of the address space (starting from address zero). Since the 80286, all x86 CPUs have at least 24 physical address lines, and bit 20 of the computed address is brought out onto the address bus in real mode, allowing the CPU to address the full 1,114,096 bytes reachable with an x86 segmented address. On the popular IBM PC platform, switchable hardware to disable the 21st address bit was added to machines with an 80286 or later so that all programs designed for 8088/8086-based models could run, while newer software could take advantage of the "high" memory in real mode and the full 16 MB or larger address space in protected mode—see A20 gate.
  17. ^ An extra descriptor record at the top of the table is also required, because the table starts at zero but the minimum descriptor index that can be loaded into a segment register is 1; the value 0 is reserved to represent a segment register that points to no segment.

References

  1. ^ Pryce, Dave (May 11, 1989). "80486 32-bit CPU breaks new ground in chip density and operating performance. (Intel Corp.) (product announcement) EDN" (Press release).
  2. ^ "Zet: The x86 (IA-32) open implementation: Overview". OpenCores. November 4, 2013. Retrieved January 5, 2014.
  3. ^ Brandon, Jonathan (April 15, 2015). "The cloud beyond x86: How old architectures are making a comeback". ICloud PE. Business Cloud News. Retrieved November 23, 2020. Despite the dominance of x86 in the datacentre it is difficult to ignore the noise vendors have been making over the past couple of years around non-x86 architectures like ARM...
  4. ^ Dvorak, John C. "Whatever Happened to the Intel iAPX432?". Dvorak.org. Retrieved April 18, 2014.
  5. ^ iAPX 286 Programmer's Reference (PDF). Intel. 1983.
  6. ^ a b iAPX 86, 88 User's Manual (PDF). Intel. August 1981.
  7. ^ Edwards, Benj (June 16, 2008). "Birth of a Standard: The Intel 8086 Microprocessor". PCWorld. Retrieved September 14, 2014.
  8. ^ Stanley Mazor (January–March 2010). "Intel's 8086". IEEE Annals of the History of Computing. 32 (1): 75–79. doi:10.1109/MAHC.2010.22. S2CID 16451604.
  9. ^ "AMD Discloses New Technologies At Microprocessor Forum" (Press release). AMD. October 5, 1999. Archived from the original on March 2, 2000. "Time and again, processor architects have looked at the inelegant x86 architecture and declared it cannot be stretched to accommodate the latest innovations," said Nathan Brookwood, principal analyst, Insight 64.
  10. ^ "Microsoft to End Intel Itanium Support". Retrieved September 14, 2014.
  11. ^ a b "Intel 64 and IA-32 Architectures Optimization Reference Manual" (PDF). Intel. September 2019. 3.4.2.2 Optimizing for Macro-fusion.
  12. ^ a b Fog, Agner. "The microarchitecture of Intel, AMD and VIA CPUs" (PDF). p. 107. Core2 can do macro-op fusion only in 16-bit and 32-bit mode. Core Nehalem can also do this in 64-bit mode.
  13. ^ "Setup and installation considerations for Windows x64 Edition-based computers". Retrieved September 14, 2014.
  14. ^ "Processors — What mode of addressing do the Intel Processors use?". Retrieved September 14, 2014.
  15. ^ "DSB Switches". Intel VTune Amplifier 2013. Intel. Retrieved August 26, 2013.
  16. ^ "The 8086 Family User's Manual" (PDF). Intel Corporation. October 1979. pp. 2–69.
  17. ^ "iAPX 286 Programmer's Reference Manual" (PDF). Intel Corporation. 1983. 2.4.3 Memory Addressing Modes.
  18. ^ 80386 Programmer's Reference Manual (PDF). Intel Corporation. 1986. 2.5.3.2 EFFECTIVE-ADDRESS COMPUTATION.
  19. ^ a b Intel® 64 and IA-32 Architectures Software Developer's Manual, Volume 1: Basic Architecture. Intel Corporation. March 2018. Chapter 3.
  20. ^ Andriesse, Dennis (2019). "6.5 Effects of Compiler Settings on Disassembly". Practical binary analysis: build your own Linux tools for binary instrumentation, analysis, and disassembly. San Francisco, CA: No Starch Press, Inc. ISBN 978-1-59327-913-4. OCLC 1050453850.
  21. ^ "Guide to x86 Assembly". Cs.virginia.edu. September 11, 2013. Retrieved February 6, 2014.
  22. ^ "FSTSW/FNSTSW — Store x87 FPU Status Word". The FNSTSW AX form of the instruction is used primarily in conditional branching...
  23. ^ Intel 64 and IA-32 Architectures Software Developer's Manual Volume 1: Basic Architecture (PDF). Intel. March 2013. Chapter 8.
  24. ^ "Intel 80287 family". CPU-world.
  25. ^ Intel 64 and IA-32 Architectures Software Developer's Manual Volume 1: Basic Architecture (PDF). Intel. March 2013. Chapter 9.
  26. ^ Intel 64 and IA-32 Architectures Software Developer's Manual Volume 1: Basic Architecture (PDF). Intel. March 2013. Chapter 10.
  27. ^ iAPX 286 Programmer's Reference (PDF). Intel. 1983. Section 1.2, "Modes of Operation". Retrieved January 27, 2014.
  28. ^ iAPX 286 Programmer's Reference (PDF). Intel. 1983. Chapter 6, "Memory Management and Virtual Addressing". Retrieved January 27, 2014.
  29. ^ "Intel's Yamhill Technology: x86-64 compatible |Geek.com". Archived from the original on September 5, 2012. Retrieved July 18, 2008.
  30. ^ AMD, Inc. (February 2002). "Appendix E" (PDF). AMD Athlon™ Processor x86 Code Optimization Guide (Revision K ed.). p. 250. Retrieved April 13, 2017. A 2-bit index consisting of PCD and PWT bits of the page table entry is used to select one of four PAT register fields when PAE (page address extensions) is enabled, or when the PDE doesn’t describe a large page.
  31. ^ Manek Dubash (July 20, 2006). "Will Intel abandon the Itanium?". Techworld. Archived from the original on February 19, 2011. Retrieved December 19, 2010. Once touted by Intel as a replacement for the x86 product line, expectations for Itanium have been throttled well back.
  32. ^ "IBM WebSphere Application Server 64-bit Performance Demystified" (PDF). IBM Corporation. September 6, 2007. p. 14. Retrieved April 9, 2010. Figures 5, 6 and 7 also show the 32-bit version of WAS runs applications at full native hardware performance on the POWER and x86-64 platforms. Unlike some 64-bit processor architectures, the POWER and x86-64 hardware does not emulate 32-bit mode. Therefore applications that do not benefit from 64-bit features can run with full performance on the 32-bit version of WebSphere running on the above mentioned 64-bit platforms.
  33. ^ "Volume 2: System Programming" (PDF). AMD64 Architecture Programmer's Manual. AMD Corporation. September 2012. Retrieved February 17, 2014.
  34. ^ Charlie Demerjian (September 26, 2003). "Why Intel's Prescott will use AMD64 extensions". The Inquirer. Archived from the original on October 10, 2009. Retrieved October 7, 2009.CS1 maint: unfit URL (link)
  35. ^ Adams, Keith; Agesen, Ole (October 21–25, 2006). A Comparison of Software and Hardware Techniques for x86 Virtualization (PDF). Proceedings of the International Conference on Architectural Support for Programming Languages and Operating Systems, San Jose, CA, USA, 2006. ACM 1-59593-451-0/06/0010. Retrieved December 22, 2006.

Further reading

External links