CPU รู้คำสั่งและคำสั่งจริง ๆ อย่างไร


73

หน่วยประมวลผล 'รู้' ว่าคำสั่งต่างกันอย่างไร

ฉันกำลังคิดถึงคำสั่งระดับชุดประกอบเช่น MOV, PUSH, CALL และอื่น ๆ ...


นี่เป็นข้อมูลที่มีประโยชน์มาก แต่สิ่งที่ฉันกำลังมองหาคืออะไรที่ทำให้ CPU สามารถรับและส่งคำสั่งได้?

ฉันไม่เข้าใจความคิดเห็นนั้น CPU "รับคำสั่ง" ได้รับจากหน่วยความจำโดยถามที่อยู่ คำสั่งเดียวที่ CPU "ส่ง" (ในมุมมองแบบง่าย ๆ อย่างน้อย) คือคำสั่งไปยังหน่วยความจำเพื่อส่งข้อมูลและคำสั่งบนบัส I / O เพื่อใช้งานอุปกรณ์ I / O
Daniel R Hicks

หัวใจสำคัญของ CPU คือตรรกะบางอย่างที่เดินสายเพื่อเรียกใช้ขั้นตอนง่าย ๆ : ใช้ค่าจากการลงทะเบียนที่อยู่คำสั่งส่งไปยังหน่วยความจำเรียกคำสั่งที่หน่วยความจำกลับมาแล้วติดขัดมากขึ้น รังที่ซับซ้อนของตรรกะการเดินสายที่ "เข้าใจ" ความหมายของคำสั่งและวิธีดำเนินการ โอ้และที่อื่นที่นั่นเพิ่มการลงทะเบียนที่อยู่คำสั่ง
Daniel R Hicks

ผู้อ่านอาจสนใจคำถามนี้คอมพิวเตอร์ทำงานอย่างไร ไปบนวิทยาการคอมพิวเตอร์
Raphael

คำตอบ:


88

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

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

โฟลว์ทั่วไปจากการคอมไพล์ไปยังการดำเนินการมีดังนี้ คำแนะนำในการประกอบมีการประกอบ (กลายเป็น 0s และ 1s เทียบเท่าไบนารีของพวกเขาหรือจากนี้ไปสัญญาณตรรกะ) สัญญาณลอจิกเหล่านี้ตีความกลับโดยซีพียูและเปลี่ยนเป็นสัญญาณลอจิกระดับต่ำมากขึ้นซึ่งกำหนดทิศทางการไหลของ CPU เพื่อดำเนินการคำสั่งเฉพาะ การดำเนินการนี้อาจใช้เวลาหนึ่งรอบนาฬิกาขึ้นอยู่กับสถาปัตยกรรมและการออกแบบของโปรเซสเซอร์ (คู่มืออ้างอิงโปรเซสเซอร์ส่วนใหญ่จะบอกคุณว่าวงรอบนาฬิกาใช้เวลานานเท่าใดในการดำเนินการคำสั่งเฉพาะเช่นตัวอย่างนี้ )

ทั้งหมดนี้จะทำกับเฟิร์มแวยากโปรแกรม (ฝังร่างกายภายในหน่วยประมวลผลในลักษณะของบางรอมตั้งในระหว่างการผลิต) ซึ่งจะค่อย ๆ ไหลผ่านในระดับต่ำที่เกิดขึ้นจริงตรรกศาสตร์ประตู นี่เป็นส่วนต่อประสานระหว่างคำแนะนำในการประกอบแบบนามธรรมกับตรรกะทางไฟฟ้าทางกายภาพในโปรเซสเซอร์


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


2
ตกลงฉันเข้าใจแล้วฉันคิดว่า :) ดังนั้นคำสั่งบิตสลับ "สวิตช์" ที่จะทำให้โปรเซสเซอร์ทำบางสิ่งกับข้อมูลที่ได้รับ
Simon Verbeke

4
@Simon Verbeke ถูกต้องแน่นอน พวกเขาเพียงแค่สลับสวิตช์เพื่อควบคุมการไหลของสัญญาณไฟฟ้าในโปรเซสเซอร์ (ซึ่งยังสามารถสั่งให้โหลดคำสั่งเพิ่มเติมได้อีก!) สวิทช์การเปรียบเทียบเป็นสิ่งที่ดีเนื่องจากทุกอย่างเป็นดิจิตอล (ทั้งตรรกะ 1/0 หรือจริง / เท็จ) เพียงแค่คุณรู้ระดับตรรกะเป็นแรงดันไฟฟ้าที่แท้จริง ขึ้นอยู่กับวิศวกรว่าจะระบุว่าอะไรคือ 0 หรือ 1 (ตัวอย่างเช่นตรรกะ 1 สามารถระบุได้มากกว่า 2 โวลต์)
พัฒนา

1
"คำสั่งเทียบเท่าไบนารี" ซึ่งคอมไพเลอร์หรือแอสเซมเบลอร์ boils ทุกอย่างลงไปจะเรียกว่า opcodes หากคุณดูที่โครงสร้าง opcode ของสถาปัตยกรรม RISC เช่น MIPS หรือ ARM คุณสามารถดูว่าบิตต่าง ๆ ในแผนที่ opcode เพื่อการดำเนินการเฉพาะ Intel เนื่องจากอายุที่ยืนยาวและมีแนวโน้มที่จะขยายเวลาและเวลาอีกครั้งไม่มีโครงสร้างการทำแผนที่ที่เรียบง่ายอีกต่อไป
LawrenceC

3
ไม่ฉันกำลังพูดอยู่เนื่องจากการยืดอายุและเวลาและเวลาอีกครั้งขยายสถาปัตยกรรม x86 การแมปบิตแต่ละบิตใน opcode ไปยังการทำงานแบบไมโครนั้นไม่ประณีตและแห้งอย่างที่มันเป็นใน MIPS หรือ ARM ในระดับหนึ่ง (ดูd.umn.edu/~gshute/spimsal/talref.htmlตัวอย่างเช่น opcodes ของ Intel ไม่เป็นเช่นนี้) ฉันไม่คิดว่าจะมีความคิดมากของ "RISC" เมื่อ Intel เปิดตัวซีพียู x86 ในปี 1978
LawrenceC

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

37

โปรเซสเซอร์ไม่ได้รู้ว่าคำสั่งนั้นคืออะไร คำสั่งเป็นเพียงรูปแบบไบนารีที่ทำให้ตัวประมวลผลทำในสิ่งที่เราตีความคำสั่งให้มีความหมาย

ตัวอย่างเช่นการดำเนินการ ADD-R1-Into-R2 จะทำให้ค่าของการลงทะเบียน 1 และ 2 เข้าถึง ALU (เลขคณิตและหน่วยตรรกะ) ทำให้ ALU ใช้เอาต์พุตของตัวบวกแทนสิ่งอื่น ๆ และทำให้ เอาท์พุทของ ALU เพื่อแทนที่ค่าในรีจิสเตอร์ 2 มีวงจรลอจิกแบบง่าย ๆ เพื่อให้บรรลุสิ่งเหล่านี้ ( มัลติเพล็กเซอร์ , อะแดปเตอร์ , เคาน์เตอร์ , ... ) แม้ว่าตัวประมวลผลจริงจะใช้การเพิ่มประสิทธิภาพที่ซับซ้อนมาก

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


5
การเปรียบเทียบที่ดีกับคันเหยียบเบรก
rjmunro

10

ยกตัวอย่างเช่นคำสั่งที่บอกโปรเซสเซอร์ x86 / IA-32 ให้ย้ายค่า 8 บิตทันทีไปยังรีจิสเตอร์ รหัสเลขฐานสองสำหรับคำสั่งนี้คือ 10110 ตามด้วยตัวระบุ 3 บิตสำหรับการลงทะเบียนเพื่อใช้ ตัวระบุสำหรับการลงทะเบียน AL คือ 000 ดังนั้นรหัสเครื่องต่อไปนี้จะโหลดการลงทะเบียน AL ด้วยข้อมูล 01100001

10110000 01100001

รหัสคอมพิวเตอร์ไบนารีนี้สามารถทำให้มนุษย์อ่านได้มากขึ้นโดยแสดงเป็นเลขฐานสิบหกดังนี้

B0 61

ที่นี่ B0 หมายถึง 'ย้ายสำเนาของค่าต่อไปนี้ไปที่ AL' และ 61 คือการแสดงเลขฐานสิบหกของค่า 01100001 ซึ่งเป็น 97 ในรูปทศนิยม ภาษาแอสเซมบลีของ Intel มีตัวช่วยจำ MOV (ตัวย่อของการย้าย) สำหรับคำแนะนำเช่นนี้ดังนั้นรหัสเครื่องด้านบนสามารถเขียนได้ดังต่อไปนี้ในภาษาแอสเซมบลีพร้อมด้วยคำอธิบายอธิบายหากจำเป็น ง่ายต่อการอ่านและจดจำ

http://en.wikipedia.org/wiki/Assembler_language

กล่าวอีกนัยหนึ่งเมื่อคุณ 'รวบรวม' โปรแกรมการประกอบของคุณคำแนะนำของคุณเช่น

MOV AL, 61h

จะถูกแปลงเป็นตัวเลขซึ่ง CPU เชื่อมโยงความหมายพิเศษแล้วดำเนินการตามนั้น


2
นอกจากนี้ยังเป็นที่น่าสังเกตว่าการกำหนดของความจำสัญลักษณ์ "MOV" กับรูปแบบบิตนี้โดยเฉพาะอย่างยิ่งได้อย่างสมบูรณ์โดยพลการ โดยหลักการแล้วฉันสามารถเขียนแอสเซมเบลอร์ที่เรียกว่าคำสั่ง "oof" และมันก็ใช้ได้เหมือนกันนอกเหนือจากการจำได้ยากขึ้น
dmckee

6

การอ่านที่แนะนำ:

ตรวจสอบบันทึกหลักสูตรจากCS152: สถาปัตยกรรมคอมพิวเตอร์และวิศวกรรมที่ UC Berkeley ซึ่งเป็นหลักสูตรที่นักเรียนใช้งาน CPU

หากคุณ google สำหรับ "ซีพียูที่สร้างขึ้นที่บ้าน" คุณจะได้พบกับสารพัดมากมาย


4

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

โปรดทราบว่านี่เป็นระดับต่ำสุดที่เป็นไปได้ ในความเป็นจริง CPU จะ "เข้าใจ" คำสั่งบางอย่างในรูปแบบของไมโครโค้ด ดูคำตอบของ Breakthrough มันเขียนได้ดีมาก


7
การดำเนินการเชิงตรรกะเช่น AND, OR และ NOT และการเลื่อนบิตเป็นพื้นฐานมากกว่าการเพิ่ม การเพิ่มสามารถแสดงได้จริงในแง่ของการดำเนินการเหล่านี้ จริงๆแล้วมีไอซีไม่ต่อเนื่อง (ซีรี่ส์ Texas Instruments LS) ที่ไม่ทำอะไรนอกจากดำเนินการเหล่านี้และเป็นไปได้ที่จะสร้างซีพียูแปลก ๆ Google "Pong schematic" เพื่อดูว่าเกมทำอย่างไรโดยไม่ต้องใช้ CPU
LawrenceC

ฉันหมายถึงจากมุมมองของซอฟต์แวร์ที่มากขึ้น :) ใช่ฮาร์ดแวร์ / ตรรกะอย่างชาญฉลาดคุณมีจำนวนบ้าของประตู NAND และ NOR จุดดี.
n0pe

2

ฉันได้รับคำตอบที่เกี่ยวข้องที่ programmers.stackexchange.com ดูคอมพิวเตอร์ทำงานอย่างไร ที่ฉันเดินสั้น ๆ ทุกอย่างจากพื้นดินขึ้นเกี่ยวกับวิธีที่คอมพิวเตอร์ไปเกี่ยวกับการตีความคำแนะนำในการเคลื่อนย้ายอิเล็กตรอน

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