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

สถาปัตยกรรมไมโคร (อังกฤษ: microarchitecture) เป็นลักษณะของ เครื่องคอมพิวเตอร์ส่วนใหญ่ที่มีการใช้งานมาตั้งแต่ยุคเริ่มต้น จนถึงยุคปัจจุบัน ได้รับการออกแบบโครงสร้างและการทำงานโดยจอนวอนนิวแมน (John Von Neumann) ซึ่งเป็นผู้นำในการออกแบบเครื่องคอมพิวเตอร์ โดยเครื่องคอมพิวเตอร์ ที่เขาได้ออกแบบ มีส่วนประกอบที่สำคัญ 3 อย่างด้วยกันคือ หน่วยประมวลผลกลาง (Central Processing Unit), หน่วยความจำ (Main Memory) และ หน่วยเชื่อมต่ออุปกรณ์ภายนอก (Input/Output) สำหรับไมโครโปรเซสเซอร์ ในตระกูล x86 ออกแบบโดยใช้หลักการเดียวกันกับที่ วอนนิวแมนได้กำหนดไว้ กล่าวคือ การประมวลผลทั้งหมด ที่หน่วยประมวลผลกลาง สำหรับข้อมูล ไม่ว่าจะเป็นข้อมูลที่ใช้สำหรับประมวลผล หรือข้อมูลที่เป็นคำสั่งก็ตาม จะถูกเก็บไว้ในหน่วยความจำจนกว่าจะมีการเรียกใช้งานจากหน่วยประมวลผลกลาง สำหรับส่วนต่อเชื่อมกับอุปกรณ์ภายนอกนั้น การทำงานของหน่วยประมวลผลกลางก็จะคล้ายกับการทำงานกับหน่วยความจำ ทั้งนี้เพราะทั้งหน่วยความจำและอุปกรณ์ภายนอก
เมื่อมีการทำงานกับหน่วยประมวลผลกลางก็มีลักษณะของการเรียกใช้ข้อมูลและนำข้อมูลไปเก็บ ต่างกันเพียงสถานที่ และวิธีการเข้าถึงเท่านั้น บัสของระบบหน่วยงานต่าง ๆ ภายในเครื่องคอมพิวเตอร์นั้น ต่อเชื่อเข้าด้วยกันดัวยระบบบัส สำหรับโปรเซสเซอร์ในตระกูล 80x86 มีด้วยกัน 3 กลุ่มอันได้แก่ ดาตาบัส แอดเดรสบัส และคอมโทรลบัส ดังรายละเอียดต่อไปนี้
ดาต้าบัส
[แก้]เป็นสายนำสัญญาณข้อมูลของระบบ โดยมีทั้งขนาด 8 บิต, 16 บิต, 32 บิต และ 64 บิต ทั้งนี้ขึ้นอยู่กับรุ่นของไมโครโปรเซสเซอร์เอง ในกรณีนี้จำนวนสายสัญญาณของระบบบัส ไม่ได้เป็นข้อกำหนดขนาดความสามารถของตัวโปรเซสเซอร์ เช่น ในกรณีของ 80x88 มีขนาดของบัสเป็น 8 บิต ก็ไม่ได้หมายความว่า สามารถประมวลผลขนาด 8 บิต เป็นแต่เพียงว่าใน 1 จังหวะสัญญาณนาฬิกาจะ รับ-ส่ง ข้อมูลขนาด 8 บิต ดังนั้นเพื่อให้การรับส่งข้อมูลครบทั้ง 16 บิตก็ต้องใช้สัญญาณนาฬิกาจำนวน 2 ครั้งนั่นเอง ขนาดของดาต้าบัสแสดงในตาราง
แอดเดรสบัส
[แก้]เป็นระบบบัสที่ใช้เพื่อส่งข้อมูลเพื่อกำหนดตำแหน่งของหน่วยความจำ และอุปกรณ์ภายนอก โดยที่แอดเดรสบัส กำหนดที่อยู่ และ ดาต้าบัสเป็นเส้นทางนำเข้าและส่งออกข้อมูลประมวลผล โดยที่จำนวนของ สายสัญญาณของแอดเดรสบัส จะเป็นตัวบอกถึงความสามารถในการระบุตำแหน่งที่ไมโครโปรเซสเซอร์สามารถกำหนดได้ดังในตาราง
| โปรเซสเซอร์ | จำนวนของบัส | หน่วยความจำสูงสุด (ไบต์) | หน่วย |
|---|---|---|---|
| 8088 | 20 | 1,048,576 | 1 MB |
| 80188 | 20 | 1,048,576 | 1 MB |
| 8086 | 20 | 1,048,576 | 1 MB |
| 80186 | 20 | 1,048,576 | 1 MB |
| 80286 | 24 | 16,777,216 | 16 MB |
| 80386SX | 24 | 16,777,216 | 16 MB |
| 80386DX | 32 | 4,294,976,296 | 4 GB |
| 80486 | 32 | 4,294,976,296 | 4 GB |
| 80586 | 32 | 4,294,976,296 | 4 GB |
บัสควบคุมการทำงาน
[แก้]เป็นระบบสายสัญญาณที่ควบคุมการทำงานทั้งหมดของระบบ โดยมีจำนวนสายที่ไม่เท่ากันในแต่ละ โปรเซสเซอร์ ซึ่งขึ้นอยู่กับการออกแบบของโปรเซสเซอร์เหล่านั้น และหน้าที่ของสายสัญญาณแต่ละเส่นก็จะแตกต่างกันออกไป เช่น ในการอ่าน และบันทึกข้อมูลไปยังหน่วยงานต่าง ๆ ก็จะมีข้อมูล รับ-ส่ง กันไปมา แล้วจะทราบได้อย่างไรว่าขณะนี้กำลังอ่านข้อมูลจากหน่วยความจำ หรือว่ากำลังนำเอาข้อมูลไปเขียนเก็บไว้ในหน่วยความจำ ดังนั้นจึงต้องมีสายสัญญาณที่กำหนดว่า กำลัง อ่าน (read) หรือ เขียน (write) ข้อมูล เป็นต้น
สำหรับเครื่องไมโครคอมพิวเตอร์โดยทั่ว ๆ ไปที่ใช้งานในปัจจุบัน ไม่ว่าจะเป็นเครื่อง IBM PC และ Compatible จะใช้ไมโครโปรเซสเซอร์ตระกูล 80x86 ของบริษัท Intel ซึ่ง เริ่มจาก 8086, 80286, 80386, 80486 และเป็น Pentium ในปัจจุบัน ดังนั้นจึงเป็นการเหมาะสมอย่างมากที่จะใช้เพื่อการศึกษาการเขียนโปรแกรมภาษา Assembly โดยอ้างอิงกับไมโครโปรเซสเซอร์ของ Intel เนื่องจากมีใช้อย่างแพร่หลาย ถึงแม้ว่าจะมีไมโครโปรเซสเซอร์ของผู้ผลิตรายอื่น ๆ บ้าง เช่น ของบริษัท AMD แต่เราก็ยังสามารถใช้คำสั่งชุดเดียวกับที่ใช้กับ ไมโครโปรเซสเซอร์ของบริษัท INTEL ได้
Data เรจิสเตอร์
[แก้]เป็นเรจิสเตอร์ที่ใช้เก็บข้อมูลทั่วไป ถึงแม้ว่าในการทำงานของระบบคอมพิวเตอร์ จะสามารถใช้หน่วยความจำเป็นที่เก็บข้อมูลได้ แต่ว่าการประมวลผลนั้นจะเกิดขึ้นภายในตัวไมโครโปรเวสเซอร์ ดังนั้นจึงต้องใช้ เรจิสเตอร์ ที่อยู่ภายในตัวไมโครโปรเซสเซอร์เป็นที่เก็บข้อมูลและทำให้การประมวลผลมีความเร็วสูงขึ้น สำหรับ เรจิสเตอร์ ที่ใช้ประมวลผลทั่วไป เป็นขนาด 16 บิต มีจำนวน 4 ตัว คือ AX, BX, CX และ DX ทั้งนี้ เรจิสเตอร์ ทั้ง 4 ตัวนี้ สามารถที่จะใช้งานครั้งละ 8 บิตได้โดยแบ่งใช้งานทีละครึ่ง โดยมีชื่อเรียกใช้งานเป็น AH และ AL และสำหรับ เรจิสเตอร์ ที่เหลืออีก 3 ตัว จะมีวิธีการเรียกชื่อในทำนองเดียวกัน โดย เรจิสเตอร์ AH เป็นการใช้ เรจิสเตอร์ บิตที่ 8-15 และ AL เป็นการใช้ เรจิสเตอร์ บิตที่ 0-7 ดังแสดงในรูปที่ 3.1 สำหรับ เรจิสเตอร์ ทั้ง 4 ตัวนี้ เป็นแบบใช้งานทั่วไป แต่บางกรณีอาจนำไปใช้เป็นกรณีเฉพาะด้วยเช่น
15 8 7 0 AX AH AL BX BH BL CX CH CL DX DH DL
รูปที่ 3.1 แสดงรายละเอียดของเรจิสเตอร์แต่ละตัว
เรจิสเตอร์ AX (Accumulator เรจิสเตอร์)
[แก้]ใช้เป็นเรจิสเตอร์ที่ใช้ในการประมวลผลคำสั่งทางคณิตศาสตร์ เช่น บวก ลบ คูณ หาร และ การกระทำทางลอจิค นอกจากนี้ยังใช้ในการโอนย้ายข้อมูลด้วยเนื่องจากใช้คำสั่งที่สั้น และยังใช้งานกับกลุ่มคำสั่ง อินพุทและเอาต์พุต
เรจิสเตอร์ BX (Base เรจิสเตอร์)
[แก้]ใช้เพื่อเป็นเรจิสเตอร์เก็บข้อมูลชนิดที่อยู่ (Address เรจิสเตอร์) เช่น กลุ่มคำสั่งในการค้นหาข้อมูลในตาราง
เรจิสเตอร์ CX (Counter เรจิสเตอร์)
[แก้]ใช้เพื่อเป็นตัวนับจำนวนรอบของการทำงานของโปรแกรมที่มีลักษณะเป็นวงรอบ
เรจิสเตอร์ DX (Data เรจิสเตอร์)
[แก้]ใช้กับกลุ่มคำสั่งคูณและหาร และกับคำสั่งอินพุทและเอาต์พุต
สำหรับหน้าที่ต่าง ๆ ที่กล่าวมาแล้วสำหรับเรจิสเตอร์แต่ละตัวนั้น ยังทำหน้าที่หลัก ๆ ที่เหมือนกันอย่างหนึ่งคืก ใช้เพื่อการเก็บข้อมูลชั่วคราวด้วย
เซ็กเมนต์ เรจิสเตอร์
[แก้]ในการดำเนินการที่ติดต่อกับหน่วยความจำนั้น สำหรับไมโครโปรเซสเซอร์ในตระกูล 8088 นั้นมีจำนวน address bus ขนาด 20 บิต นั่นหมายความว่า สามารถเข้าถึงหน่วยความจำได้ขนาด 1 MB แต่เนื่องจาก เรจิสเตอร์ภายในทั้งหมดนั้นมีขนาดเพียง 16 บิต ทำให้ไม่สามารถ address ข้อมูลในหน่วยความจำได้โดยตรง จึงต้องมีการจัดเนื้อที่ของหน่วยความจำออกเป็นส่วน ๆ เรียกว่า เซ็กเมนต์ โดยจะใช้เรจิสเตอร์จำนวน 2 ตัวในการอ้างถึงหน่วยความจำในแต่ละตำแหน่ง โดยเรจิสเตอร์ตัวหนึ่งทำหน้าที่เป็นตัวกำหนดเซ็กเมนต์ และเรจิสเตอร์อีกตัวหนึ่งทำหน้าที่กำหนดค่าของ offset ทำให้การอ้างถึงข้อมูลจึงมีลักษณะเป็น logical address เช่น 1000:2000 ค่าตัวเลข 1000 หมายถึงส่วนของ เซ็กเมนต์ และค่าตัวเลข 2000 หมายถึงส่วนของ offset แต่หากพิจารณาดูจะพบว่า จำนวนบิตของข้อมูลเกิน 20 บิต ดังนั้นในการอ้าง address ที่ถูกต้องจึงได้จากการคำนวณค่าระหว่าง เซ็กเมนต์ และ offset ดังนี้
10000
+
2000
12000 มีขนาด 20 บิต ตรงกับ Physical address
ไมโครโปรเซสเซอร์ 8088 มี เซ็กเมนต์ เรจิสเตอร์ จำนวน 4 ตัว คือ Code เซ็กเมนต์ (CS), Data เซ็กเมนต์ (DS), Stack เซ็กเมนต์ (SS) และ Extra เซ็กเมนต์ (ES) ซึ่งเรจิสเตอร์ทั้ง 4 ตัวจะมีหน้าที่การทำงานที่แตกต่างกันออกไป และรับผิดชอบในการดูแลข้อมูลแต่ละกลุ่ม เรจิสเตอร์ทั้ง 4 ตัวนี้มีขนาดเป็น 16 บิต และขนาดของหน่วยความจำที่ไมโครโปรเซสเซอร์สามารถใช้งานได้ใน real mode มีขนาด 1 MB ทำให้มีจำนวนเซ็กเมนต์ทั้งสิ้น 64 K เซ็กเมนต์ และในแต่ละเซ็กเมนต์จะสามารถ address ข้อมูลได้ 64 KB ในการ address หน่วยความจำของแต่ละเซ็กเมนต์อาจกำหนดให้เซ็กเมนต์ เรจิสเตอร์ ทั้งหมด ชี้หน่วยความจำทีเดียวกันทั้งหมด หรือแยกเป็นแต่ละส่วนก็สามรถทำได้ทั้ง 2 กรณี ขึ้นอยู่กับวัตถุประสงค์ของการใช้งานและ ลักษณะในการเขียนโปรแกรม แต่การใช้เซ็กเมนต์ เรจิสเตอร์ แต่ละตัวก็ต้องพิจารณาให้เหมาะสมกับหน้าที่ และเรจิสเตอร์ที่มาใช้งานร่วมกัน (ส่วนของ offset) เซ็กเมนต์ เรจิสเตอร์ ทั้ง 4 ตัวนี้มีขนาด 16 บิตและไม่สามารถแบ่งใช้งานได้เหมือนกับ เรจิสเตอร์ในกลุ่มของ data เรจิสเตอร์ โดยแต่ละตัวทำหน้าที่แตกต่างกันออกไปดังนี้คือ
- เรจิสเตอร์ CS เป็นเซ็กเมนต์ เรจิสเตอร์ ที่ใช้เป็นตัวกำหนดที่อยู่ของหน่วยความจำในส่วนของคำสั่ง (Instruction) โดยจะมีการทำงานร่วมกับเรจิสเตอร์ IP
- เรจิสเตอร์ SS เป็น เซ็กเมนต์ เรจิสเตอร์ ที่กำหนดที่อยู่ของ stack ซึ่งเป็นบริเวรหน่วยความจำที่กำหนดไว้เพื่อใช้เก็บข้อมูล โดยมีลักษณะการทำงานแบบ stack ใช้งานร่วมกับเรจิสเตอร์ SP
- เรจิสเตอร์ DS และ ES ใช้กำหนดที่อยู่ของ ข้อมูลเมื่อทำการประมวลผลกับชุดคำสั่งกลุ่มข้อมูล โดยจะใช้งานร่วมกับเรจิสเตอร์ BP และ DX
Pointer และ Index เรจิสเตอร์
[แก้]เป็นเรจิสเตอร์ที่ใช้ในการชี้ตำแหน่งข้อมูลในหน่วยความจำ โดยจะเป็นส่วนของ offset ประกอบด้วยเรจิสเตอร์ จำนวน 4 ตัวคือ
- Stack pointer (SP) เป็นเรจิสเตอร์ที่เก็บข้อมูลตำแหน่งหน่วยความจำในส่วนของ offset เพื่อใช้ชี้ตำแหน่งของ stack โดยใช้งานร่วมกับ Stack เซ็กเมนต์ (SS)
- Base Pointer (BP) ใช้สำหรับอ้างตำแหน่งข้อมูลในหน่วยความจำของ stack แตกต่างกับ SP ตรงที่สามารถเข้าถึงข้อมูลในเซ็กเมนต์อื่น ๆ ได้
- Source Index (SI) ใช้ในการอ้างตำแหน่งข้อมูล ในหน่วยความจำ โดยใช้งานร่วมกับ DS ส่วนใหญ่จะนำไปใช้งานกับกลุ่มคำสั่งประเภทกลุ่มข้อมูล
- Destination Index (DI) มีการใช้งานเช่นเดียวกับ SI แต่ใช้งานร่วมกับ เรจิสเตอร์ ES
Instruction Pointer (IP)
[แก้]IP เป็นเรจิสเตอร์ที่ใช้ในการชี้ตำแหน่งของข้อมูลในส่วนของคำสั่ง โดยใช้งานร่วมกับ CS ในการทำงานของไมโครโปรเซสเซอร์ ค่าของ IP จะเพิ่มขึ้นโดยอัตโนมัติ และไม่สามารถเปลี่ยนแปลงค่าโดยการโปรแกรมได้ โดยมันจะชี้ตำแหน่งของคำสั่งถัดไปในหน่วยความจำเสมอ
Flags เรจิสเตอร์
[แก้]เป็นเรจิสเตอร์ที่ใช้แสดงผลลัพธ์ของการประมวลของไมโครโปรเซสเซอร์ โดยค่าข้อมูลของเรจิสเตอร์ในแต่ละบิตนั้นถูกกำหนดความหมายไว้แตกต่างกันออกไป ซึ่งเรียกว่า flag โดยแบ่ง flag ออกเป็น 2 ประเภทด้วยกันคือ status flag และ control flag โดยที่ status flag ใช้เพื่อแสดงผลของการประมวลผลข้อมูล เช่น บวกข้อมูลแล้วมีตัวทดเกิดขึ้นหรือไม่ (carry flag) หรือ การลบข้อมูลมีผลลัพธ์เป็น 0 (zero flag) แต่ในส่วนของ control flag จะเป็นการควบคุมการทำงานของไมโครโปรเซสเซอร์ เช่น จะยอมให้มีการตอบรับการร้องขอ interrupt หรือไม่ เป็นต้น ซึ่งในรายละเอียดการใช้งาน flag ทั้ง 2 ประเภทนี้จะได้กล่าวถึงต่อไปในภายหลัง