ISA opcodes --- พวกเขามาจากไหน


13

เมื่อวิศวกรกำลังออกแบบสถาปัตยกรรมชุดคำสั่งตามขั้นตอนหรือโพรโทคอลหากมีให้ปฏิบัติตามเมื่อกำหนดรหัสไบนารีบางอย่างเป็นคำแนะนำ ตัวอย่างเช่นถ้าฉันมี ISA ที่บอกว่า 10110 เป็นคำสั่งโหลดเลขฐานสองนั้นมาจากไหน? มันเป็นแบบจำลองจากตารางสถานะสำหรับเครื่องสถานะ จำกัด แสดงการดำเนินการโหลดหรือไม่

แก้ไข: หลังจากทำการค้นคว้าเพิ่มเติมฉันเชื่อว่าฉันพยายามถามคำถามเกี่ยวกับวิธีกำหนด opcodes สำหรับคำสั่งต่างๆของ CPU ADD อาจถูกกำหนดด้วย opcode 10011; คำแนะนำในการโหลดอาจถูกกำหนดเป็น 10110 กระบวนการคิดอะไรในการกำหนดเลขฐานสองเหล่านี้สำหรับชุดคำสั่ง


8
"การออกแบบไมโครโพรเซสเซอร์โดยใช้ Verilog HDL" ของ Monte Dalrymple ให้วิธีการออกแบบที่มีรายละเอียดมากสำหรับ Z80 CPU และจากนั้นฉันคิดว่าคุณจะเรียนรู้มากมายเกี่ยวกับคำถามของคุณ แต่มีข้อควรพิจารณาหลายประการที่มีตัวเลือกเฉพาะรวมถึงการวิเคราะห์ทางสถิติของชุดคำสั่งอื่น ๆ คอมไพเลอร์เอาท์พุท ฯลฯ ฉันขอแนะนำให้เริ่มต้นด้วยหนังสือเล่มนั้น แม้ว่ามันจะเริ่มต้นด้วยการออกแบบที่เป็นที่รู้จัก แต่เขาก็มีรายละเอียดที่ลึกซึ้งเกี่ยวกับเรื่องนี้และฉันคิดว่าคุณจะรับบางสิ่ง หนังสือดี.
jonk

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

2
มีคนอื่นถามคำถามนี้ ต้องเป็นวันอังคาร
Ignacio Vazquez-Abrams

5
@ สตีเว่นคิดเกี่ยวกับมัน ถ้าคุณต้องออกแบบ ISA คุณคิดอย่างไร หากคำแนะนำของคุณไม่ได้มีความยาวเท่ากันทั้งหมดคุณจะเลือกคำศัพท์ที่สั้นกว่าหรือยาวกว่าได้อย่างไรสำหรับคำแนะนำใด หากคุณต้องออกแบบขั้นตอนการถอดรหัสคุณต้องการให้ ISA ของคุณเป็นอย่างไร ฉันคิดว่าคำถามนั้นกว้างมากโดยไม่จำเป็น (และเป็นไปไม่ได้ที่จะตอบอย่างสมบูรณ์) แต่คุณสามารถปรับปรุงได้มากขึ้นโดยใส่ความคิดของตัวเองเข้าไปในนั้นและถามคำถามที่แม่นยำที่ไม่ต้องการให้เราเขียนหนังสือเพื่อตอบ มัน.
Marcus Müller

4
ข้อกำหนด RISC-Vพูดคุยเกี่ยวกับการตัดสินใจการออกแบบที่พวกเขาทำในทุกระดับรวมทั้งยุติธรรมบิตเกี่ยวกับการเข้ารหัสของคำสั่งเครื่อง (นี่เป็นเรื่องแปลกสำหรับคู่มือตัวประมวลผล RISC-V เป็นแบบฝึกหัดทางวิชาการก่อนและสถาปัตยกรรมซีพียูที่สองไม่เหมือนส่วนใหญ่)
zwol

คำตอบ:


6

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

ลองชมวิดีโอนี้เพื่ออธิบายว่า 6502 นั้นถูกออกแบบวิศวกรรมย้อนกลับโดยเฉพาะจาก 34:20 เป็นต้นไป

6502 เป็นไมโครโปรเซสเซอร์ 8 บิตที่นำมาใช้ในปี 1975 แม้ว่าจะมีประตูน้อยกว่า Z80 ถึง 60% แต่ก็เร็วเป็นสองเท่าและแม้ว่าจะมีข้อ จำกัด มากกว่า (ในแง่ของรีจิสเตอร์เป็นต้น) แต่ก็สร้างขึ้นด้วย ชุดคำสั่งที่สง่างาม

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

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

ไดอะแกรมบล็อก 6502

เวลา 37:00 น. ในวิดีโอคุณสามารถดูตารางของการถอดรหัส ROM ซึ่งแสดงให้เห็นว่าเงื่อนไขใดที่อินพุตจะต้องตอบสนองเพื่อรับ "1" สำหรับเอาต์พุตควบคุมที่กำหนด คุณสามารถค้นหาได้ในหน้านี้

คุณสามารถเห็นได้ว่าสิ่งต่าง ๆ ส่วนใหญ่ในตารางนี้มี Xs ในตำแหน่งต่าง ๆ ลองยกตัวอย่าง

011XXXXX 2 X RORRORA

นี่หมายความว่า 3 บิตแรกของ opcode ต้องเป็น 011 และ G ต้องเป็น 2 ไม่มีอะไรอื่นที่สำคัญ ถ้าเป็นเช่นนั้นเอาต์พุตชื่อ RORRORA จะเป็นจริง ตัวเลือก ROR ทั้งหมดเริ่มต้นด้วย 011 แต่มีคำแนะนำอื่น ๆ ซึ่งเริ่มต้นด้วย 011 เช่นกัน สิ่งเหล่านี้อาจต้องถูกกรองออกโดยหน่วย "ตรรกะการควบคุมแบบสุ่ม"

โดยพื้นฐานแล้ว opcodes ได้รับเลือกดังนั้นคำแนะนำที่จำเป็นต้องทำในสิ่งเดียวกันกับที่คนอื่นมีบางสิ่งที่เหมือนกันในรูปแบบบิตของพวกเขา คุณสามารถดูนี้โดยการมองหาที่โต๊ะ opcode ; คำสั่ง OR ทั้งหมดเริ่มต้นด้วย 000 คำแนะนำร้านค้าทั้งหมดเริ่มต้นด้วย 010 คำแนะนำทั้งหมดที่ใช้การกำหนดแอดเดรสศูนย์หน้าเป็นแบบฟอร์ม xxxx01xx แน่นอนว่าคำแนะนำบางอย่างดูเหมือนจะไม่“ พอดี” เพราะเป้าหมายไม่ใช่รูปแบบ opcode ปกติอย่างสมบูรณ์ แต่ให้ชุดคำสั่งที่มีประสิทธิภาพ และนี่คือเหตุผลที่ "ตรรกะควบคุมแบบสุ่ม" มีความจำเป็น

หน้าที่ฉันกล่าวถึงข้างต้นบอกว่าบางบรรทัดเอาท์พุทใน ROM ปรากฏขึ้นสองครั้ง "เราถือว่าสิ่งนี้ทำได้เพราะพวกเขาไม่มีทางที่จะกำหนดเส้นทางเอาท์พุทของบางบรรทัดที่พวกเขาต้องการดังนั้นพวกเขาจึงใส่บรรทัดเดียวกัน ตำแหน่งอีกครั้ง " ฉันแค่นึกภาพวิศวกรวาดภาพประตูเหล่านั้นทีละคนและรู้ตัวว่ามีข้อบกพร่องในการออกแบบและพยายามหาวิธีหลีกเลี่ยงที่จะเริ่มกระบวนการทั้งหมดใหม่


22

มันขึ้นอยู่กับอายุของ ISA

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

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

ISAs ในภายหลังอาจ "ล้างข้อมูล" และทำให้ใช้งานได้ง่ายขึ้นและสม่ำเสมอยิ่งขึ้นด้วยฮาร์ดแวร์ในการแปลระหว่างพวกเขาและสัญญาณควบคุมระดับฮาร์ดแวร์จริงบางครั้งผ่าน "ไมโครโค้ด" สิ่งเหล่านี้เรียกว่า "CISC" หรือ "Complex Instruction Set Coding" คำนำหน้าคำสั่ง "Rep" x86 เป็นตัวอย่างที่ง่ายของสิ่งนี้ - มันทำให้คำสั่งต่อไปนี้ซ้ำหลายครั้งเพื่อประหยัดไม่ต้องเขียน FOR FOR

ต่อมา (ในทศวรรษ 1980) ก็มีการเคลื่อนไหวกลับไปสู่รูปแบบการเข้ารหัสโดยตรงที่เรียบง่ายกว่า (RISC - การลดชุดคำสั่งการเข้ารหัส) ซึ่งคุณสามารถเห็นได้ในโปรเซสเซอร์ ARM นี่คือแรงผลักดันจาก ASICs ขนาดเล็กในเวลานั้นและความปรารถนาที่จะใส่ซีพียู 32- บิตลงบนพวกเขาดังนั้นจึงไม่มีความสามารถสำรองสำหรับตัวถอดรหัสชุดคำสั่งที่ซับซ้อนเพื่อให้ซีพียูตัวที่สมบูรณ์ลดลงเหลือ 20,000 เกต (นอกจากนี้ยังมีการเพิ่มประสิทธิภาพชั่วคราวเนื่องจากผู้คนยังไม่ได้พัฒนาเทคนิคเพื่อให้ CISC ถอดรหัสเร็ว - ซึ่งมาพร้อมกับ Pentium Pro ในปี 1995)

และในทุกวันนี้มันไม่สำคัญ - ซีพียูอ่านคำแนะนำหลาย ๆ อย่างพร้อมกันและอุทิศทรานซิสเตอร์หลายล้านตัวเพื่อถอดรหัสพวกเขาจัดลำดับใหม่และดำเนินการให้ได้มากที่สุดในครั้งเดียวเพื่อเร่งความเร็วโปรแกรมที่อาจเขียนขึ้นสำหรับรุ่นที่เก่าที่สุด สไตล์ของ ISA


2
ฉันไม่แน่ใจว่าฉันเรียก CISC ว่า "ใช้งานง่ายกว่า" นั่นอาจเป็นความตั้งใจดั้งเดิม แต่ 30 ปีต่อมาพวกเขารู้สึกตรงกันข้ามกับ "ใช้งานง่าย" (เทียบกับ RISC ISAs อย่างน้อย)
tonysdg

2
มีหลายประการที่พวกเขาใช้งานได้ง่ายกว่า ... ความสม่ำเสมอ (orthogonality เป็นหัวข้อใหญ่) กลับมาเมื่อคอมไพเลอร์เป็นโปรแกรมที่ไม่สำคัญหรือผ่านการสนับสนุนการดำเนินงานระดับสูงโดยตรงโดยไม่จำเป็นต้องแปลจากคอมไพเลอร์ แต่นั่นเป็นเวลานานมาแล้วและผู้ที่รอดชีวิตจาก CISC มีการแก้ไขหลายชั้นบนชุดคำสั่งดั้งเดิม คอมไพเลอร์ก็เปลี่ยนจากการรับรู้ทั้งหมดเช่นกันการเพิ่มประสิทธิภาพนับพันครั้งผ่านการดำเนินการโดย gcc จะไม่สามารถคิดได้ในตอนนั้น ดังนั้นสิ่งที่ "ง่าย" แล้วและตอนนี้มีความสัมพันธ์น้อยมาก
Brian Drummond

4
ความแตกต่างได้รับการกัดเซาะทั้งชุด ("RISC" เพิ่มคำแนะนำเพิ่มเติม) และ superceded โดยใหม่สถาปัตยกรรมที่ซับซ้อนยิ่งขึ้นเช่น VLIW; ฉันทามติเพียงอย่างเดียวคือ x86 (16 และ 32 บิต) นั้นใช้งานยาก
pjc50

1
@tonysdg: มี RISC ใช้ยากและ CISC ใช้ยาก การเปรียบเทียบที่ดีของ "ความเป็นมิตรของโปรแกรมเมอร์" คือการเปรียบเทียบ 68k กับ ARM ARM ได้รับการออกแบบสำหรับคอมไพเลอร์ดังนั้นคุณต้องทำงานด้วยตนเองจำนวนมากเพื่อรับข้อมูลจาก RAM และเขียนกลับไปที่ RAM 68k ได้รับการออกแบบสำหรับโปรแกรมเมอร์แอสเซมบลีและช่วยให้คุณสามารถทำงานกับข้อมูลใน RAM โดยตรง หากคุณดูที่ 68k ISA คุณจะพบว่ามันดูเหมือน RISC ISA ที่ทันสมัยมากโดยมีข้อยกเว้นเพียงประการเดียว - คุณสามารถทำงานบน RAM ได้โดยตรงในขณะที่ RISC อนุญาตให้คุณลงทะเบียนได้เท่านั้น
slebetman

1
Microcode เป็นแอตทริบิวต์ CISC เป็นหลัก อย่างไรก็ตามคุณสามารถใช้ CISC โดยไม่มีไมโครโค้ด: ตัวถอดรหัสคำสั่งจะมีความซับซ้อนมากขึ้น คุณจะเห็น CISC บางส่วนจาก Pentium-Pro เป็นต้นไปซึ่งอธิบายว่าเป็น RISC ภายใน แปลคำสั่ง CISC แต่ละรายการเป็น ops RISC ภายในหนึ่งตัวขึ้นไป: ชื่ออื่นสำหรับไมโครโค้ด (แม้ว่าความแตกต่างจะเบลอในหน่วยประมวลผลระดับสูงกว่า)
Brian Drummond

9

หากคุณจัดกลุ่มคำแนะนำที่คล้ายกันเข้าด้วยกันรูปแบบจะปรากฏขึ้น นี่เป็นสิ่งที่ชัดเจนมากใน ARM ที่คู่มือ ISA แสดงให้คุณเห็นว่าคำศัพท์ใดบ้างที่เกี่ยวข้องกับฟังก์ชั่นตัวเลือกการลงทะเบียน ฯลฯ แต่มันสามารถอนุมานX86ได้

ในที่สุดส่วน "ฟังก์ชั่น" ของ opcodes จะเข้าสู่ตัวถอดรหัสไบนารีต่อหนึ่งการเปิดใช้งานฟังก์ชั่นเฉพาะหรือลำดับของการดำเนินการไปป์ไลน์ พวกเขามักจะไม่เกี่ยวข้องกับเนื้อหาของเครื่องรัฐใด ๆ เว้นแต่ว่าเรากำลังพิจารณาคำแนะนำความยาวตัวแปรที่ต้องใช้เครื่องรัฐในการถอดรหัส


คุณกำลังบอกว่าพวกเขากำลังเล็งทรานซิสเตอร์ที่ต่ำที่สุดเท่าที่จะเป็นไปได้บนชิป ฉันเห็นด้วยอย่างยิ่งในบริบทของคำถามของ OP ที่พวกเขาไม่สามารถจ่ายทรานซิสเตอร์เป็นร้อย ๆ ชุดสำหรับชุดคำสั่งแบบ neater ซีพียูล้านทรานซิสเตอร์ไม่ได้มีเหตุผลมากพอที่จะใส่ใจ แต่แน่นอนว่าหลายคนคงไว้ซึ่งความเข้ากันได้แบบย้อนหลัง
ฮาร์เปอร์ - Reinstate Monica

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

@ Luaan: ที่จริงแล้ว "เราจะทำอย่างไรกับทรานซิสเตอร์เหล่านี้ทั้งหมด" เป็นคำถามที่แท้จริงทุกวันนี้ ดูแคช L2 / L3 ทั้งหมดที่ถูกโยนไปทุกวันนี้ นั่นคือการยอมรับอย่างเงียบ ๆ เราไม่ได้ใช้ทรานซิสเตอร์เหล่านั้นนับล้าน ๆ Xeon อุทิศล่าสุดให้ทรานซิสเตอร์มากกว่า 2 พันล้านรายการเพื่อแคช!
MSalters

6

มีคนในบางจุดที่นั่งลงและกำหนดไว้

ISA ที่ดีจะทำให้ตัวถอดรหัสนั้นง่ายที่สุด

ตัวอย่างเช่นด้วยคำสั่ง ALU คุณสามารถปล่อยให้บิตของ opcode บางส่วนถูกส่งโดยตรงไปยังบรรทัดควบคุมของ ALU


ขอบคุณทุกคำตอบที่ยอดเยี่ยม คุณได้ช่วยให้ฉันเข้าใจสิ่งนี้ดีขึ้นมาก
สตีเวน

4
จริงๆแล้วมีปัจจัยบางอย่างนอกเหนือจากความเรียบง่ายของตัวถอดรหัสที่ต้องคำนึงถึง ขึ้นอยู่กับสถานการณ์และการใช้งานอื่น ๆ (เช่นความหนาแน่นของรหัส) อาจมีความสำคัญมากกว่าความเรียบง่ายของตัวถอดรหัส ในโปรเซสเซอร์ที่ทันสมัยความหนาแน่นของรหัสอาจมากกว่าความเรียบง่ายของตัวถอดรหัสในกรณีส่วนใหญ่
Jerry Coffin

5

โดยทั่วไปแล้วคุณจะแบ่ง ISA ของคุณออกเป็นกลุ่มทำงาน มันสมเหตุสมผล (ไม่ว่าจะเป็นการเพิ่มประสิทธิภาพเชิงตรรกะหรือเป็นระเบียบเรียบร้อย) ว่าคู่ฟรีนั้นแตกต่างจากการเปลี่ยนแปลงบิตเดียว (load vs store) และคุณมีลำดับชั้นของบิตบางส่วนที่มีผลต่อแผนผังการตัดสินใจถอดรหัส

ในตอนท้ายของวันการจัดสรรบิตสำหรับบล็อกฟังก์ชั่นโดยพลการ (เมื่อเทียบกับการวางฟิลด์ 'data' ในคำสั่งจะมีผลกระทบเพียงเล็กน้อยต่อประสิทธิภาพการออกแบบโดยรวมของคุณ - แต่คุณมีตัวเลือกมากมายเกี่ยวกับวิธีการ 'ปรับให้เหมาะสม' การเข้ารหัส ISA ของคุณขึ้นอยู่กับสิ่งที่คุณรู้สึกว่าเป็นพารามิเตอร์ที่สำคัญ


1

การเข้ารหัสคำสั่งเป็นการประนีประนอมที่น่าเกลียดระหว่าง

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

บรรจุฟังก์ชั่นให้มากที่สุดเท่าที่เป็นไปได้ในขนาดที่ จำกัด ของคำสอน สิ่งนี้นำไปสู่สิ่งต่าง ๆ เช่นรูปแบบคงที่พิเศษที่สามารถเข้ารหัสตัวเลขทั่วไปหลายแบบได้

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


1

ยอดเยี่ยมของ Randy Hyde (ถ้าค่อนข้างเก่า) Art of Assemblyเข้าสู่ชุดคำสั่ง x86 โดยละเอียดในบทที่3.3.4 ชุดควบคุมและชุดคำสั่งและต่อไปนี้

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

จากนั้นเขาก็แสดงให้เห็นถึงความน่าดึงดูดใจและความยาวของปลั๊กคู่แรกที่ยืนตามคำสั่งปลั๊กถัดไปเข้ารหัสแหล่งที่มาและปลายทาง แน่นอนว่าทุกวันนี้ไม่มีใคร "ปลั๊ก" อีกต่อไป แต่สำหรับ ISA ที่เก่าแก่จริงๆแล้วบิตใน opcode โดยทั่วไปจะทำงานเหมือนปลั๊กก่อน

คุณจะได้อะไรเช่นนี้:

ป้อนคำอธิบายรูปภาพที่นี่


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