โครงสร้างภายในซีพียู
โครงสร้างภายในซีพียู
ซีพียูจะทำงานตามคำสั่งที่ผู้ใช้ป้อนเข้าไป
ซึ่งคำสั่งดังกล่าวจะถูกเก็บในหน่วย ความจำหลัก
ดังนั้นซีพียูจะต้องทำงานดังต่อไปนี้
- ดึงคำสั่งเข้ามา (fetch instruction) คือการที่ซีพียูอ่านคำสั่งมาจากหน่วยความจำหลักเข้ามาเก็บไว้ภายในตัวซีพียู
- แปลความหมายของคำสั่ง (interpret
instruction) คำสั่งจะถูกแปลความหมาย เพื่อจะได้ทราบว่า
คำสั่งนั้นต้องการ
ให้ทำงานอย่างใด
- ดึงข้อมูล (fetch data) การประมวลผลคำสั่งเครื่องหนึ่งคำสั่ง
อาจจำเป็นต้องอ่านข้อมูลจากหน่วยความจำหลักหรืออุปกรณ์ไอโอเข้ามาด้วย
- ประมวลผลข้อมูล (process data) การประมวลผลคำสั่งอาจเกี่ยวข้องกับการทำงานทางคณิตศาสตร์หรือตรรกะ
- การบันทึกข้อมูล (write data) ผลการประมวลผลข้อมูลอาจต้องการให้บันทึกผลลัพธ์ที่ได้ไว้ในหน่วยความจำหลักหรืออุปกรณ์ไอโอ
การจัดองค์ประกอบของรีจีสเตอร์ภายในซีพียู
การแบ่งกลุ่มรีจีสเตอร์อาจจะแบ่งได้หลายวิธี
สำหรับในบทนี้จะแบ่งออกเป็นสองกลุ่มคือ
1) รีจีสเตอร์ที่ผู้ใช้มองเห็นได้
รีจีสเตอร์ในกลุ่มนี้อนุญาตให้คำสั่งในโปรแกรมสามารถลดการอ้างอิงข้อมูลในหน่วยความจำหลักโดยนำรีจีสเตอร์มาใช้งานแทน
2) รีจีสเตอร์สำหรับการควบคุมและรายงานสถานะการทำงาน
รีจีสเตอร์ในกลุ่มนี้ถูกนำไปใช้โดยหน่วยควบคุม เพื่อควบคุมการทำงานของซีพียู
และถูกใช้โดยคำสั่งพิเศษของระบบปฏิบัติการในการควบคุมการประมวลผลของโปรแกรม
รีจีสเตอร์ส่วนที่ผู้ใช้มองเห็น
รีจีสเตอร์ส่วนที่ผู้ใช้สามารถมองเห็นได้นั้น
หมายถึง
รีจีสเตอร์ที่สามารถใช้คำสั่งภาษาเครื่องควบคุมและใช้งานได้ผ่านการประมวลผล
โดยซีพียู รีจีสเตอร์กลุ่มนี้แบ่งออกเป็นประเภทดังนี้
- รีจีสเตอร์ใช้งานทั่วไป
สามารถนำไปใช้งานได้หลายหน้าที่ตามที่ผู้พัฒนาโปรแกรมต้องการ
แต่อาจมีรีจีสเตอร์บางตัวถูกกำหนดไว้ใช้งานกับเลขจำนวนจริงหรือเป็นตัวชี้ตำแหน่งในสแต๊ก
ในบางกรณีรีจีสเตอร์ใช้งานทั่วไปสามารถนำไปใช้งานในการกำหนดที่อยู่เช่น
การอ้างอิงที่อยู่แบบรีจีสเตอร์ทางอ้อมหรือแบบดีสเพลชเมนต์ ตัวอย่าง
รีจีสเตอร์ใช้งานทั่วไป ได้แก่ รีจีสเตอร์เก็บข้อมูลของซีพียู 8086
(AX, BX, CX, และ DX) เป็นต้น
- รีจีสเตอร์สำหรับเก็บตำแหน่งที่อยู่
อาจเป็นรีจีสเตอร์สำหรับใช้งานทั่วไป
หรือเป็นรีจีสเตอร์ที่กำหนดให้ใช้การอ้างอิงเกี่ยวกับตำแหน่งที่อยู่โดยตรง
ตัวอย่าง รีจีสเตอร์เหล่านี้ ได้แก่
- ตัวชี้ตำแหน่งเซ็กเมนต์ (segment pointers) : ในเครื่องที่ใช้วิธีกำหนดตำแหน่งที่อยู่แบบเซ็กเมนต์
จะมีรีจีสเตอร์เซ็กเมนต์(segment register) ในบางกรณีอาจมีการใช้รีจีสเตอร์มากกว่าหนึ่งตัว
เช่น
ตัวหนึ่งใช้สำหรับระบบปฏิบัติการและอีกหนึ่งใช้สำหรับโปรเซสที่กำลังถูกประมวลผล
- ตัวชี้ตำแหน่งดรรชนี (index registers) : รีจีสเตอร์ในกลุ่มนี้ใช้สำหรับการกำหนดตำแหน่งที่อยู่แบบ indexed
addressing
และอาจเป็นชนิด autoindexing ก็ได้
- ตัวชี้ตำแหน่งในสแต็ก (stack pointer) : ถ้าคอมพิวเตอร์นั้นใช้ระบบ user-visible stack addressing
สแต็กที่นำมาใช้งานจะะเก็บอยู่ในหน่วยความจำและจะมีจีสเตอร์ตัวหนึ่งที่ใช้ในการชี้ตำแหน่งข้อมูลตัวบนสุดในสแต็กนั้นวิธีการนี้ช่วยให้สามารถอ้างอิงตำแหน่งข้อมูลโดยนัยได้
นั่นคือการใช้คำสั่ง PUSH,
POP และคำสั่งอื่น ๆ
ที่เกี่ยวกับสแต็กก็ไม่มีความจำเป็นจะต้องบอกตำแหน่งตัวถูกกระทำที่เก็บอยู่ในสแต็กนั้น
- รีจีสเตอร์สำหรับเก็บเงื่อนไขการทำงาน
การเก็บเงื่อนไขการทำงานจะมีกลุ่มรีจีสเตอร์ที่ถูกกำหนดค่าขึ้นมาให้สอดคล้องกับผลการประมวลผลของซีพียู
เช่น การคำนวณทางคณิตศาสตร์ อาจทำให้ผลลัพธ์มีค่าเป็นจำนวนบวก จำนวนลบ เป็นศูนย์หรือ
โอเวอร์โพลว์ก็ได้กลุ่มบิตเหล่านี้ มักจะเรียกว่า "แฟล็ก” (Flags) ซึ่งจะแสดงไปพร้อม ๆ กับผลลัพธ์ที่คำนวณได้
และถูกเก็บไว้ในตำแหน่งที่เก็บผลลัพธ์แล้ว
บิตพิเศษกลุ่มนี้จะกำหนดค่าขึ้นมาให้สอดคล้องกับผลลัพธ์ที่ประมวลได้
เพื่อนำไปใช้ทดสอบค่าตามเงื่อนไขต่าง ๆ ที่ต้องการ
รีจีสเตอร์ควบคุมและแสดงสถานะ
เป็นกลุ่มรีจีสเตอร์ที่ส่วนใหญ่จะไม่ยินยอมให้ผู้ใช้มองเห็น
บางส่วนอาจยินยอมให้ใช้คำสั่งเครื่องในการประมวลผลได้แต่ต้องกระทำในฐานะของระบบปฏิบัติการเท่านั้น
ซีพียูแต่ละรุ่นจะมีการจัดองค์ประกอบของรีจีสเตอร์แตกต่างกัน ส่วนใหญ่จะแบ่งรีจีสเตอร์สำหรับควบคุมและแสดงสถานะออกเป็นสี่ประเภทดังนี้
- PC (Program counter) เป็นรีจีสเตอร์ที่เก็บที่อยู่ของคำสั่งที่จะถูกประมวลผลในลำดับต่อไป
- IR (Instruction register) เป็นรีจีสเตอร์ที่เก็บคำสั่งเครื่องที่ถูกอ่านจากหน่วยความจำหลักเข้ามาเก็บ
- MAR (Memory address register) ใช้เก็บตำแหน่งที่อยู่อ้างอิงในหน่วยความจำหลัก
- MBR (Memory buffer register) ใช้เก็บข้อมูลขนาด
1 เวิร์ด
ล่าสุดที่ถูกอ่านเข้ามาในซีพียูหรือใช้เก็บข้อมูลเพื่อเตรียมบันทึกลงในหน่วยความจำหลักโดยทั่วไป
ซีพียูจะปรับปรุงค่าในรีจีสเตอร์ PC ทันทีภายหลังจากที่ได้อ่านคำสั่งเข้ามา
เพื่อให้รีจีสเตอร์ PC นี้ชี้ตำแหน่งคำสั่งที่จะถูกอ่านเข้ามาในลำดับต่อไปเสมอ
คำสั่งประเภท branch หรือ skip ทำให้เกิดการเปลี่ยนแปลงค่าในรีจีสเตอร์นี้ได้
คำสั่งที่ถูกอ่านเข้ามาจะถูกนำไปเก็บไว้ที่รีจีสเตอร์ IR ซึ่งจะถูกวิเคราะห์รหัสดำเนินงาน
และตัวกำหนดค่าตัวถูกกระทำการออกแบบซีพียูจะต้องกล่าวถึงรีจีสเตอร์ตัวหนึ่ง
หรือกลุ่มหนึ่งที่เรียกว่า Program status word (PSW)ซึ่งใช้เก็บข้อมูลสถานะการทำงานของซีพียูดังต่อไปนี้
- Sign : ใช้เก็บบิตเครื่องหมายของผลลัพธ์ที่เกิดขึ้นจากการประมวลผลคำสั่งทางคณิตศาสตร์ครั้งล่าสุด
- Zero : บิตนี้จะมีค่าเป็น “1” ถ้าผลลัพธ์ที่เกิดขึ้นจากการประมวลผลคำสั่งทางคณิตศาสตร์ครั้งล่าสุดมีค่าเป็น
“0”
- Carry : บิตนี้จะมีค่าเป็น “1” ถ้าผลลัพธ์ที่เกิดขึ้นจากการประมวลผลคำสั่งทางคณิตศาสตร์ครั้งล่าสุดเกิดการยืมเลขจากหลักที่สูงกว่า
หรือมีการทดเลขบิตที่มีค่าเกินบิตสูงสุด
- Equal : บิตนี้จะมีค่าเป็น “1” ถ้าผลการเปรียบเทียบทางตรรกะมีค่าเท่ากัน
- Overflow : ใช้สำหรับบอกให้ทราบว่า
ผลลัพธ์ที่เกิดขึ้นจากการประมวลผลคำสั่งทางคณิตศาสตร์ครั้งล่าสุดเกิด overflow
- Interrupt enable/disable : ใช้ในการสั่งให้กระบวนการอินเทอร์รัพท์ทำงานหรือหยุดทำงาน
- Supervisor : ใช้ในการบอกสถานะ
การทำงานของซีพียูว่า ในขณะนั้นมีสถานะเป็น user หรือ supervisor
คำสั่งเครื่องบางส่วนที่เป็นคำสั่งสงวน
จะสามารถประมวลผลได้
และเนื้อที่หน่วยความจำบางส่วนจะสามารถอ้างอิงถึงได้ก็ต่อเมื่อซีพียูอยู่ในสถานะ supervisor เท่านั้น
ตัวอย่างการจัดองค์ประกอบของรีจีสเตอร์ภายในซีพียู
การจัดองค์ประกอบของรีจีสเตอร์จะขอยกตัวอย่างซีพียูของอินเทล
ตระกูล 80XX
ดังแสดงในภาพที่ 9.3 เป็นซีพียู 8086
การออกแบบองค์ประกอบของรีจีสเตอร์ โดยถือว่า รีจีสเตอร์ทุกตัวเป็นรีจีสเตอร์พิเศษ
แม้ว่ารีจีสเตอร์บางตัวจะสามารถนำมาใช้เป็นรีจีสเตอร์ใช้งานทั่วไปได้ก็ตาม ซีพียู
8086 ประกอบด้วยรีจีสเตอร์สำหรับเก็บข้อมูลขนาด 16 บิต จำนวน 4 ตัว
ซึ่งอาจจะใช้เพียง 8 บิตหรือใช้ทั้ง 16 บิต ผสมผสานกันก็ได้
รีจีสเตอร์สำหรับเก็บข้อมูลสามารถ
ไม่มีความคิดเห็น:
แสดงความคิดเห็น