[หมายเหตุ: คำตอบนี้มีจุดประสงค์เพื่อแก้ไขการแก้ไขล่าสุดและไม่ได้เพิ่มคำตอบที่เป็นเสียงหลายคำที่โพสต์ไว้แล้ว]
ดังนั้นเพื่อย้ำ: ไมโครโค้ด (อย่างน้อยถึงการประมาณแรก) เป็นเฟิร์มแวร์ชนิดหนึ่งโดยเฉพาะ
"Microcode" อยู่ในบริบทนี้เป็นเพียงการทำการตลาดผ่าน "เฟิร์มแวร์โปรเซสเซอร์"
มันไม่ใช่การตลาด การตลาดจะเรียกมันว่าXBoost Pro (TM)หรืออะไรบางอย่าง แต่เป็นศัพท์ทางวิศวกรรม หากคุณออกแบบ CPU ความแตกต่างระหว่างไมโครโค้ดและเฟิร์มแวร์อื่น ๆ ของ CPU (และประเภทของเฟิร์มแวร์ทั่วไปกับอุปกรณ์อื่น) เป็นสิ่งสำคัญสำหรับคุณ ถ้าไม่มันอาจจะไม่ใช่
หากคุณออกแบบมาเธอร์บอร์ดหรือเขียนระบบปฏิบัติการคุณอาจใช้ "microcode update" เป็นชวเลขสำหรับการปรับปรุงเฟิร์มแวร์ CPU ที่ไม่คุ้นเคยและไม่คุ้นเคย การอัพเดตเฟิร์มแวร์ของ CPU ส่วนใหญ่ส่งผลกระทบต่อไมโครโค้ดเป็นหลักดังนั้นจึงใกล้เคียงกับสิ่งเดียวกัน คุณอาจรู้ถึงความแตกต่าง แต่คุณไม่จำเป็นต้องสนใจมัน
ผู้ใช้ไม่จำเป็นต้องรู้หรือสนใจเกี่ยวกับความแตกต่างและในโลกอุดมคติจะไม่ได้ยินคำว่า "ไมโครโค้ด" เลย
ฉันเดาว่ามันมาถึงความสนใจของคุณในการรายงานข่าวของช่องโหว่การดำเนินการเก็งกำไรล่าสุดแม้ว่าคุณอาจเคยได้ยินมาก่อนหน้านี้ในบริบทที่ทำให้มันชัดเจนมากขึ้นว่าคุณไม่จำเป็นต้องดูแล ช่องโหว่เหล่านี้เผยแพร่เร็วกว่าที่วางแผนไว้ซึ่งอาจส่งผลให้มีการรายงานข่าวน้อยกว่าที่ควรจะเป็น จากมุมมองของผู้ใช้คุณต้องติดตั้งการอัปเดต BIOS อัปเดตระบบปฏิบัติการและในบางกรณีการอัปเดตแอปพลิเคชัน คุณไม่จำเป็นต้องรู้และไม่สนใจซึ่งหากมีสิ่งเหล่านี้รวมถึงไมโครโค้ดใหม่
ดังนั้นถึงแม้จะรู้ตัวว่าคุณไม่จำเป็นต้องรู้หรือสนใจคุณก็ยังอาจสนใจความอยากรู้: คุณจะแยกไมโครโค้ดออกจากเฟิร์มแวร์ตัวอื่นได้อย่างไร?
สิ่งแรกที่ต้องจดจำคือไม่จำเป็นต้องมีคำจำกัดความที่ยากและรวดเร็วเพียงอย่างเดียว แต่มันเป็นสถานการณ์ของBleggs และ Rubesมากกว่า ยังมีบางสิ่งที่เราสามารถพูดเกี่ยวกับไมโครโค้ด:
โดยทั่วไปแล้วไมโครโค้ดจะทำงานภายใน CPU แทนที่จะเป็นซีพียู นั่นคือมุมมองระดับสูง
สถาปัตยกรรมของไมโครโค้ดโดยทั่วไปแล้วจะดูแตกต่างจากสถาปัตยกรรมของรหัสทั่วไปรวมถึงเฟิร์มแวร์ธรรมดา มันมีแนวโน้มที่จะขนานกันอย่างมากและถูกนำไปใช้อย่างใกล้ชิดกับฮาร์ดแวร์ หลายคำตอบที่มีอยู่ (รวมถึงคำตอบของคุณเอง) พูดถึงเรื่องนี้แม้ว่ามันควรจะสังเกตว่ารายละเอียดอาจแตกต่างกันไปขึ้นอยู่กับการออกแบบของ CPU
แม้ว่าฮาร์ดแวร์นั้นมักได้รับการออกแบบให้รันเฉพาะเฟิร์มแวร์ที่จัดทำโดยผู้ผลิต แต่ก็ไม่ใช่เรื่องแปลกที่จะใช้เฟิร์มแวร์ของบุคคลที่สาม - แม้ว่าอาจจะทำให้การรับประกันเป็นโมฆะ! ไมโครโค้ดของบุคคลที่สามนั้นหายากกว่ามาก แต่ฉันเชื่อว่าในสมัยโบราณ (ฉันกำลังพูดถึงเมื่อซีพียูมีขนาดเท่ากับกล่องขนมปัง) ผู้ใช้บางคนจะปรับเปลี่ยนไมโครโค้ดในซีพียูของพวกเขา เท่าที่ฉันทราบนี่เป็นไปไม่ได้ในซีพียูที่ใช้ในพีซี
โดยทั่วไปแล้วไมโครโค้ดจะแปลหรือช่วยในการใช้สถาปัตยกรรมชุดคำสั่งสาธารณะเช่นจะรันโค้ดเครื่องที่ผู้ออกแบบระบบปฏิบัติการและโปรแกรมเมอร์ใช้ เพิ่มเติมเกี่ยวกับเรื่องนี้ในส่วนถัดไป
"Execution vs data" คำตอบมากมายใช้กระบวนทัศน์นี้
ฉันกลัวด้วยวิธีที่แตกต่างกันอย่างสับสน แต่ฉันจะพูดถึงความคิดเห็นของตัวเอง ส่วนนี้ยังทำหน้าที่ในการขยายในสัญลักษณ์แสดงหัวข้อย่อยด้านบน เป้าหมายที่นี่คือพยายามแยกความแตกต่างระหว่างงานที่ CPU ทำ (ทำได้โดยการรวมฮาร์ดแวร์และไมโครโค้ด) และงานที่อุปกรณ์ทั่วไปกำลังทำอยู่ (ทำได้โดยการรวมฮาร์ดแวร์และเฟิร์มแวร์) ฉันจะเลือกฮาร์ดไดรฟ์ SATA
ไดรฟ์ SATA ทำตามคำแนะนำจากคอมพิวเตอร์ซึ่งอยู่ในแนวของ "อ่านข้อมูลจากภาค 5,123" และ "เขียนข้อมูลนี้ลงในเซกเตอร์ 1,321" เฟิร์มแวร์ของไดรฟ์มีหน้าที่ในการทำให้ฮาร์ดแวร์เกิดขึ้นและโดยทั่วไปจะเป็นรหัสธรรมดาที่ทำงานบนซีพียูในตัวบางประเภท คำแนะนำของไดรฟ์มาตามลำดับแม้ว่าอาจไม่ได้รับการประมวลผลตามลำดับที่มาถึง คำแนะนำเหล่านี้ไม่ใช่โปรแกรมพวกเขาถูกส่งโดยโปรแกรมที่ทำงานบน CPU หลัก โดยเฉพาะอย่างยิ่งไม่มีการไหลของการควบคุมคือไม่มีคำแนะนำในการบอกไดรฟ์ SATA ซึ่งคำแนะนำในการทำงานต่อไป
ซีพียูอยู่ในความดูแลของคอมพิวเตอร์ เมื่อเสร็จสิ้นการเริ่มต้นมันจะทำงานตามคำแนะนำ ("รหัสเครื่อง") ที่ได้รับจากเมนบอร์ด (BIOS ซึ่งเป็นเฟิร์มแวร์ประเภทอื่น) ซึ่งสั่งให้เรียกใช้รหัสเครื่องที่ระบบปฏิบัติการกำหนดให้เรียกใช้รหัสเครื่องที่ให้ไว้ โดยผู้ขายแอปพลิเคชัน CPU เองจะเรียกคืนรหัสเครื่องจาก EEPROM (ในกรณีของ BIOS) หรือ RAM (ในกรณีของระบบปฏิบัติการและแอพพลิเคชั่น) โดยเฉพาะอย่างยิ่งรหัสเครื่องมีการควบคุมอย่างต่อเนื่อง: รหัสเครื่องจะบอก CPU ว่ารหัสเครื่องใดที่จะต้องดำเนินการต่อไป คุณสามารถวนซ้ำรหัสเครื่องเดิมซ้ำ ๆ คุณสามารถเรียกใช้บิตของรหัสที่แตกต่างกันขึ้นอยู่กับข้อมูลที่รหัสกำลังทำงานอยู่ - คำแนะนำในภาษาอินเทอร์เฟซอุปกรณ์เช่นรหัส SATA สามารถทำชุดง่าย ๆ ได้ แต่รหัสเครื่องสามารถ ทำสิ่งใด (ดูเพิ่มเติมที่ทัวริงครบถ้วน )
เราสามารถเขียนสัญลักษณ์แสดงหัวข้อย่อยสุดท้ายด้านบนเป็น: ไมโครโค้ดมักจะใช้ภาษาทัวริงที่สมบูรณ์; เฟิร์มแวร์ธรรมดามักจะไม่
การแปลว่า "คำแนะนำฮาร์ดแวร์แปลว่าอะไร" ด้วยไมโครโค้ดหมายความว่าอย่างไร
จริง แต่อาจสับสน จุดสำคัญคือความแตกต่างระหว่างรหัสเครื่องซึ่งมีโฟลว์ควบคุมและ Turing Complete และคำแนะนำที่กำหนดโดยส่วนต่อประสานอุปกรณ์เช่น SATA ซึ่งทำไม่ได้และไม่ใช่
"microcode" ใช้กับรหัสที่ใช้กับการ์ดเสียงหรือไม่
ไม่การ์ดเสียงรับคำแนะนำไม่ใช่รหัสเช่นเดียวกับไดรฟ์ SATA คำแนะนำอาจเป็น "play a sharp" หรือ "ตีความข้อมูลนี้เป็นรูปแบบของคลื่นและเล่น" ยังง่ายมาก
และการ์ดแสดงผล (GPU)?
การ์ดแสดงผลแบบเก่า (ที่ไม่มี GPU) จะเหมือนกับไดรฟ์ SATA คำแนะนำเช่น "ตั้งค่าพิกเซลนี้เป็นสีนี้" หรือ "เขียน A ไปยังตำแหน่งนี้"
... GPUs ซับซ้อนและอยู่ระหว่างโลกทั้งสองที่ฉันเคยพยายามอธิบายข้างต้น มันอาจจะง่ายที่สุดในการคิดว่ามันเป็นคอมพิวเตอร์เฉพาะที่อยู่ในคอมพิวเตอร์หลักซึ่งมีซีพียูของตัวเอง มันเป็นความจริงที่อุปกรณ์เช่นไดรฟ์ SATA ยังมีซีพียูในตัว แต่ความแตกต่างก็คือซีพียูในตัวในไดรฟ์ SATA จะรันโค้ดที่ผู้ผลิตไดรฟ์ให้เท่านั้นในขณะที่ GPU ยังใช้โค้ดที่จัดทำโดยระบบปฏิบัติการและ / หรือผู้จำหน่ายแอปพลิเคชัน จริง ๆ นี่เป็นคำถามแยกต่างหากทั้งหมด
TL; DR: ไมโครโค้ดเป็นเฟิร์มแวร์ชนิดหนึ่งซึ่งช่วยให้ฮาร์ดแวร์ใช้ชุดคำสั่ง Turing Complete