การเขียนโปรแกรม Microprogramming กับภาษาเครื่อง


10

ฉันสับสนเล็กน้อยระหว่างระดับไมโครโปรแกรมกับระดับภาษาของเครื่อง ตัวอย่างเช่น:

  1. โปรแกรมทั้งสองประเภทอยู่ในระหว่างการดำเนินการที่ใด
  2. มีการแมป 1: 1 ไปยังคำแนะนำการใช้ภาษาแอสเซมบลีจริงหรือไม่
  3. รูปแบบของสถาปัตยกรรมโปรเซสเซอร์กำหนดไว้หรือไม่?

4
หากคุณยังไม่ได้อ่านลองอ่านบทความ [Wikipedia] [1]; มันค่อนข้างดี [1]: en.wikipedia.org/wiki/Microcode
Shawn J. Goff

5
ไมโครโค้ดอาจไม่ใช่สิ่งที่คุณกำลังพูดถึง นอกจากว่าคุณกำลังออกแบบ CPU ของคุณเองคุณอาจไม่สนใจไมโครโค้ด คุณอาจสับสน 'ไมโคร' ใน 'ไมโครโค้ด' กับ 'ไมโครคอนโทรลเลอร์' แต่มันไม่เหมือนกัน
davr

1
ไม่ฉันกำลังใช้ไมโครโค้ด ฉันกำลังเรียนรู้ CPU ภายในและพยายามที่จะเข้าใจเลเยอร์ที่ต่ำที่สุดเช่นไมโครโค้ด

คำตอบ:


7

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

โปรแกรมทั้งสองประเภทอยู่ในระหว่างการดำเนินการที่ใด

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

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

มีการแมป 1: 1 ไปยังคำแนะนำการใช้ภาษาแอสเซมบลีจริงหรือไม่

รหัสเครื่องและรหัสแอสเซมบลีโดยทั่วไปคือ 1: 1 แมปกับคำแนะนำแอสเซมบลี มันขึ้นอยู่กับแอสเซมเบลอร์ แอสเซมบลีระดับสูงอาจมีแมโครขนาดใหญ่ที่อนุญาตให้หนึ่งเขียนโค้ดแอสเซมบลีบรรทัดเดียวและแอสเซมเบลอร์จะสร้างรหัสเครื่องหลาย

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

ฉันไม่แน่ใจว่าคุณหมายถึงอะไรโดยใช้คำสั่ง บางทีคุณสามารถอธิบายการอ้างอิงได้

รูปแบบของสถาปัตยกรรมโปรเซสเซอร์กำหนดไว้หรือไม่?

รูปแบบของรหัสเครื่องและไมโครโค้ดถูกกำหนดโดยสถาปัตยกรรมตัวประมวลผล


โดย 'true-op' ฉันหมายถึงคำแนะนำที่ไม่ใช่คำสั่งภาษาแอสเซมบลีสังเคราะห์หรือหลอก สำหรับคำถามที่ 2 ฉันตั้งใจจะถามว่าคำสั่งไมโครโค้ดจะแมปกับภาษาแอสเซมบลีคำแนะนำจริง ๆ หรือไม่

@Louis - โดยทั่วไปจะไม่มีรหัสแอสเซมบลีที่เผยแพร่ซึ่งแปล 1: 1 เป็นไมโครโค้ด Intel และ AMD (และอื่น ๆ ) ยังคงเป็นเจ้าของไมโครโค้ดเนื่องจากจะให้ข้อมูลเชิงลึกที่แข็งแกร่งเกี่ยวกับสถาปัตยกรรมภายในของโปรเซสเซอร์ ฉันได้ยินมาว่าเพื่อวัตถุประสงค์เฉพาะบางอย่างพวกเขายินดีที่จะให้ข้อมูลเกี่ยวกับมันตัวอย่างเช่นนักวิจัยเพื่อให้พวกเขาสามารถได้ประสิทธิภาพที่ 1% สุดท้ายของเครื่องจักรสำหรับการใช้งานบางอย่าง แต่ส่วนใหญ่ข้อมูลจำเพาะที่เผยแพร่เท่านั้น รวมถึงรหัสเครื่องและคำอธิบายสถาปัตยกรรมทั่วไป
Adam Davis

8

โดยทั่วไปไมโครโค้ดจะขยายชุดคำสั่ง 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)


คุณเขียนและรันไมโครโค้ดได้อย่างไร
Erik Kaplun

@ErikAllik คุณสามารถทำได้โดยการสร้างคอมพิวเตอร์ของคุณเองจากศูนย์
user253751

5

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

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

ในสถานะ # 2 บัสข้อมูลภายนอกควรป้อนไปยังบัสข้อมูลหลักภายในและการลงทะเบียนคำสั่งที่อ่านจากบัสนั้นควรโหลด ตัวนับโปรแกรมควรเป็นผลลัพธ์ก่อนหน้านี้บนทั้งสองส่วนของแอดเดรสบัสและ RAM อื่นที่อ่านแล้วออก ควรโหลดบิต 5-7 ของการลงทะเบียนคำสั่งเป็นบิต 0-2 ของตัวควบคุมสถานะบิต 3 ของการลงทะเบียนสถานะควรถูกตั้งค่าเว้นแต่ว่าบิต 1-7 ของการลงทะเบียนคำสั่งถูกตั้งค่าทั้งหมดและบิตอื่น ๆ ของการลงทะเบียนของรัฐ ควรมีความชัดเจนผลลัพธ์สุทธิคือสถานะถัดไปจะเป็น # 7- # 15

โปรดทราบว่าไมโครโค้ดไม่ได้ถูกกำหนดในแง่ของคำแนะนำจริงๆ แต่เป็นการรวมสัญญาณการควบคุม ฮาร์ดแวร์จะไม่ได้รับการตั้งค่าเพื่อให้คำแนะนำทั่วไปในไมโครโค้ด แต่จะโหลดหรือแสดงผลรีจิสเตอร์ต่าง ๆ จาก / ไปยังรถโดยสารที่พวกเขานั่งหรือเชื่อมต่อบัสต่าง ๆ กันและใช้บิตหรือชุดต่างๆเพื่อ เลือกสถานะที่แตกต่าง หลายแง่มุมของการออกแบบจะเป็นแบบมีสายแข็ง (เช่น opcodes FE และ FF อาจเป็นแบบพิเศษในฮาร์ดแวร์มากกว่าในไมโครโค้ด) แนวคิดด้วยไมโครโค้ดไม่ใช่เพื่อเรียกใช้โปรแกรม แต่เพื่อแทนที่ลอจิก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.