ฉันสับสนเล็กน้อยระหว่างระดับไมโครโปรแกรมกับระดับภาษาของเครื่อง ตัวอย่างเช่น:
- โปรแกรมทั้งสองประเภทอยู่ในระหว่างการดำเนินการที่ใด
- มีการแมป 1: 1 ไปยังคำแนะนำการใช้ภาษาแอสเซมบลีจริงหรือไม่
- รูปแบบของสถาปัตยกรรมโปรเซสเซอร์กำหนดไว้หรือไม่?
ฉันสับสนเล็กน้อยระหว่างระดับไมโครโปรแกรมกับระดับภาษาของเครื่อง ตัวอย่างเช่น:
คำตอบ:
Micro-code เป็นอีกระดับหนึ่งของสิ่งที่เป็นนามธรรมนอกเหนือจากรหัสเครื่อง CPU ที่แท้จริงกำลังใช้งานไมโครโค้ดและเอ็นจินการแปลแปลงรหัสเครื่องเป็นไมโครโค้ดทันที สิ่งนี้ถูกทำขึ้นด้วยเหตุผลหลายประการรวมถึงโปรเซสเซอร์ที่เล็กกว่าเร็วกว่าง่ายต่อการสร้างโปรเซสเซอร์ที่ซับซ้อนพร้อมการดีบักน้อยกว่าและเพื่อความเข้ากันได้ย้อนหลัง ตัวอย่างเช่นชุดคำสั่ง x86 มีคำสั่งการประมวลผลสตริงที่ไม่ค่อยได้ใช้ อย่างไรก็ตามเพื่อให้สามารถใช้งานร่วมกับรุ่นหลังได้จะต้องยังคงมีอยู่ในโปรเซสเซอร์ x86 ที่ทันสมัย แทนที่จะเดินสายพา ธ การดำเนินการสำหรับคำแนะนำเหล่านี้พวกเขาจะถูกแปลงเป็นไมโครโค้ดและดำเนินการ สิ่งนี้จะช่วยประหยัดซิลิคอนในขณะที่ยังคงสามารถใช้งานได้ย้อนหลัง
โปรแกรมทั้งสองประเภทอยู่ในระหว่างการดำเนินการที่ใด
รหัสเครื่องอยู่ในแคช (หลังจากถูกดึงจาก RAM) รหัสไมโครอยู่ในแคชรหัสไมโครขึ้นอยู่กับสถาปัตยกรรมเครื่องเฉพาะ แคชอาจมีขนาดใหญ่พอที่จะถือไมโครโค้ดเพียงพอที่จะเก็บไมโครโค้ดที่แปลงแล้วจากคำสั่งรหัสเครื่องที่ใหญ่ที่สุดที่เป็นไปได้หรืออาจเป็นแคชที่ใหญ่กว่าที่เก็บผลลัพธ์ที่แปลงแล้วของรหัสเครื่องหลาย ๆ เครื่อง รหัสเครื่องในแต่ละการวนซ้ำสำหรับลูปขนาดเล็ก
ในสถาปัตยกรรมบางรุ่นไมโครโค้ดที่แปลงแล้วจะไม่ถูกเก็บไว้ที่ใดเลยหน่วยการดึง / แปลนั้นแยกชุดคำสั่งไมโครโค้ดออกมาโดยอิงตามรหัสเครื่องที่ใช้งานอยู่ในปัจจุบัน ในกรณีนี้ไมโครโค้ดจะเรียกใช้งานจาก ROM บางประเภทและรหัสเครื่องเป็นดัชนีใน ROM โดยชี้ไปที่ชุดคำสั่งไมโครโค้ดที่จะต้องรันเพื่อให้สามารถประมวลผลคำสั่งเครื่องได้อย่างสมบูรณ์
มีการแมป 1: 1 ไปยังคำแนะนำการใช้ภาษาแอสเซมบลีจริงหรือไม่
รหัสเครื่องและรหัสแอสเซมบลีโดยทั่วไปคือ 1: 1 แมปกับคำแนะนำแอสเซมบลี มันขึ้นอยู่กับแอสเซมเบลอร์ แอสเซมบลีระดับสูงอาจมีแมโครขนาดใหญ่ที่อนุญาตให้หนึ่งเขียนโค้ดแอสเซมบลีบรรทัดเดียวและแอสเซมเบลอร์จะสร้างรหัสเครื่องหลาย
แต่โดยทั่วไปภาษาแอสเซมบลี "บริสุทธิ์" สามารถแปลงเป็นรหัสเครื่องได้โดยตรงโดยใช้ตารางชุดคำสั่งในคู่มือของโปรเซสเซอร์
ฉันไม่แน่ใจว่าคุณหมายถึงอะไรโดยใช้คำสั่ง บางทีคุณสามารถอธิบายการอ้างอิงได้
รูปแบบของสถาปัตยกรรมโปรเซสเซอร์กำหนดไว้หรือไม่?
รูปแบบของรหัสเครื่องและไมโครโค้ดถูกกำหนดโดยสถาปัตยกรรมตัวประมวลผล
โดยทั่วไปไมโครโค้ดจะขยายชุดคำสั่ง CPU ที่ จำกัด ให้มีคำสั่งระดับสูงขึ้นซึ่งจะยุ่งยากในการใช้งานในฮาร์ดแวร์ แต่ค่อนข้างง่ายต่อการสร้างด้วยคำแนะนำที่มีอยู่ Microcode ช่วยให้หน่วยประมวลผลที่มีชุดคำสั่งขนาดเล็กสามารถทำงานได้เหมือนกับชุดคำสั่งที่มีขนาดใหญ่กว่า
สมมติว่าคุณกำลังทำงานกับชุดคำสั่ง MARIEและคุณต้องการฟังก์ชั่น Add x, y แต่สถาปัตยกรรมอนุญาตเฉพาะการเพิ่ม x (ซึ่งเพิ่งเพิ่มสิ่งที่อยู่ในการลงทะเบียนกับ x) ในปัจจุบันดังนั้นคุณจึงเพิ่มคำสั่งไมโครโค้ด:
LOAD x //Load x into the register
ADD y //Add y to the value in the register
ตอนนี้เมื่อรหัสภาษาเครื่องของคุณบอกว่า:
ADD x,y
มันจะค้นหาฟังก์ชั่น ADD ที่คุณเพิ่มเข้าไปใน ROM (ไมโครโค้ดของคุณ) และเรียกใช้งานมัน นี่เป็นสิ่งที่ยอดเยี่ยมเพราะมันเพิ่มชุดคำสั่งของคุณซึ่งจะช่วยให้สามารถอ่านรหัสเครื่องได้มากขึ้นและเนื่องจาก microcode ของคุณถูกเก็บไว้ใน ROM จึงเร็วกว่าการเรียก LOAD และ ADD จาก RAM
ฉันเคยทำงานที่ บริษัท ที่เขียนไมโครโค้ดเพื่อทำการวัดแบบกำหนดเองด้วยความเร็วสูงในระบบเก่าของพวกเขา อย่างไรก็ตามด้วยความก้าวหน้าใน FPGA พวกเขาได้เปลี่ยนไปใช้สิ่งเหล่านี้ซึ่งเร็วกว่ามาก (เนื่องจากคุณกำลังใช้ "คำสั่งที่กำหนดเอง" ในฮาร์ดแวร์แทนที่จะเป็น ROM)
โปรเซสเซอร์จำนวนมากขับเคลื่อนโดยเครื่องรัฐที่มีลำดับการเปลี่ยนแปลงได้รับผลกระทบจากคำสั่งที่ถูกดำเนินการ "คำแนะนำ" ของไมโครโค้ดมักจะระบุการโต้ตอบระหว่างรีจิสเตอร์และบัสต่างๆในลักษณะที่โปรแกรมเมอร์ไม่สามารถมองเห็นได้
ตัวอย่างเช่นคำสั่งไมโครโค้ดสำหรับซีพียู 8 บิตในสถานะ # 1 อาจระบุว่าเอาต์พุตที่ช่วยให้ทั้งสองส่วนของตัวนับโปรแกรมควรทำงาน (ทำให้ตัวนับโปรแกรมเป็นเอาต์พุตบนบัสแอดเดรสที่อยู่ด้านบนและด้านล่าง) สัญญาณที่เพิ่มขึ้นโดยโปรแกรมควรทำงานสัญญาณสลักที่อยู่ภายนอกควรทำงาน (ดังนั้นบัสที่อยู่ภายนอกจะติดตามสัญญาณภายใน) และสัญญาณ RAM ที่อ่านควรทำงานและตัวควบคุมควรเปลี่ยนเป็นสถานะ # 2
ในสถานะ # 2 บัสข้อมูลภายนอกควรป้อนไปยังบัสข้อมูลหลักภายในและการลงทะเบียนคำสั่งที่อ่านจากบัสนั้นควรโหลด ตัวนับโปรแกรมควรเป็นผลลัพธ์ก่อนหน้านี้บนทั้งสองส่วนของแอดเดรสบัสและ RAM อื่นที่อ่านแล้วออก ควรโหลดบิต 5-7 ของการลงทะเบียนคำสั่งเป็นบิต 0-2 ของตัวควบคุมสถานะบิต 3 ของการลงทะเบียนสถานะควรถูกตั้งค่าเว้นแต่ว่าบิต 1-7 ของการลงทะเบียนคำสั่งถูกตั้งค่าทั้งหมดและบิตอื่น ๆ ของการลงทะเบียนของรัฐ ควรมีความชัดเจนผลลัพธ์สุทธิคือสถานะถัดไปจะเป็น # 7- # 15
โปรดทราบว่าไมโครโค้ดไม่ได้ถูกกำหนดในแง่ของคำแนะนำจริงๆ แต่เป็นการรวมสัญญาณการควบคุม ฮาร์ดแวร์จะไม่ได้รับการตั้งค่าเพื่อให้คำแนะนำทั่วไปในไมโครโค้ด แต่จะโหลดหรือแสดงผลรีจิสเตอร์ต่าง ๆ จาก / ไปยังรถโดยสารที่พวกเขานั่งหรือเชื่อมต่อบัสต่าง ๆ กันและใช้บิตหรือชุดต่างๆเพื่อ เลือกสถานะที่แตกต่าง หลายแง่มุมของการออกแบบจะเป็นแบบมีสายแข็ง (เช่น opcodes FE และ FF อาจเป็นแบบพิเศษในฮาร์ดแวร์มากกว่าในไมโครโค้ด) แนวคิดด้วยไมโครโค้ดไม่ใช่เพื่อเรียกใช้โปรแกรม แต่เพื่อแทนที่ลอจิก