สถาปัตยกรรมไมโคร

thumb|สถาปัตยกรรมไมโครของ 80286

**สถาปัตยกรรมไมโคร** () เป็นลักษณะของ เครื่องคอมพิวเตอร์ส่วนใหญ่ที่มีการใช้งานมาตั้งแต่ยุคเริ่มต้น จนถึงยุคปัจจุบัน ได้รับการออกแบบโครงสร้างและการทำงานโดยจอนวอนนิวแมน (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 ครั้งนั่นเอง ขนาดของดาต้าบัสแสดงในตาราง

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

## บัสควบคุมการทำงาน
เป็นระบบสายสัญญาณที่ควบคุมการทำงานทั้งหมดของระบบ โดยมีจำนวนสายที่ไม่เท่ากันในแต่ละ
โปรเซสเซอร์ ซึ่งขึ้นอยู่กับการออกแบบของโปรเซสเซอร์เหล่านั้น และหน้าที่ของสายสัญญาณแต่ละเส่นก็จะแตกต่างกันออกไป เช่น ในการอ่าน และบันทึกข้อมูลไปยังหน่วยงานต่าง ๆ ก็จะมีข้อมูล รับ-ส่ง กันไปมา แล้วจะทราบได้อย่างไรว่าขณะนี้กำลังอ่านข้อมูลจากหน่วยความจำ หรือว่ากำลังนำเอาข้อมูลไปเขียนเก็บไว้ในหน่วยความจำ ดังนั้นจึงต้องมีสายสัญญาณที่กำหนดว่า กำลัง อ่าน (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 ประเภทนี้จะได้กล่าวถึงต่อไปในภายหลัง

หมวดหมู่:ไมโครโพรเซสเซอร์
หมวดหมู่:สถาปัตยกรรมคอมพิวเตอร์