แอสเซมบลีตัวแรกเขียนด้วยรหัสเครื่องหรือไม่


41

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

ที่กล่าวว่ามันทำให้ฉันคิด การใช้ภาษาระดับสูงในการเขียนแอสเซมเบลอร์ของฉันนั้นสะดวกมาก แต่สำหรับแอสเซมเบลอร์แรกที่เคยเขียน (เช่นในประวัติศาสตร์) มันไม่จำเป็นต้องเขียนในรหัสเครื่องเนื่องจากเป็นสิ่งที่มีอยู่ในเวลานั้นหรือไม่?

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


17
คุณสามารถเขียน cross-compiler และใช้มันเพื่อสร้างรหัสสำหรับฮาร์ดแวร์ใหม่ทุกวันนี้
Kerrek SB

@PersonalNexus ขอขอบคุณที่ snafu แก้ไขในส่วนของฉัน
yannis

1
@YannisRizos ไม่มีปัญหาเกิดขึ้นกับเราที่ดีที่สุด :)
ส่วนบุคคล

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

คอมพิวเตอร์เครื่องแรกของฉันคือ ZX81 ที่มี RAM 1KB ดังนั้นโปรแกรมรหัสเครื่องจักรของฉัน (สั้นมาก ๆ ) ก็แปลด้วยมือแล้ว
281377

คำตอบ:


36

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

ไม่จำเป็น. แน่นอนว่าเวอร์ชั่นแรกของ v0.00 ของแอสเซมเบลอร์จะต้องเขียนด้วยรหัสเครื่อง แต่มันจะไม่ทรงพลังพอที่จะเรียกว่าแอสเซมเบลอร์ มันจะไม่สนับสนุนคุณสมบัติครึ่งหนึ่งของแอสเซมเบลอร์ "ของจริง" แต่มันก็เพียงพอแล้วที่จะเขียนเวอร์ชันถัดไปของตัวมันเอง จากนั้นคุณสามารถเขียน v0.00 อีกครั้งในชุดย่อยของภาษาแอสเซมบลีเรียกมันว่า v0.01 ใช้เพื่อสร้างชุดคุณลักษณะถัดไปของแอสเซมเบลอร์ v0.02 ของคุณจากนั้นใช้ v0.02 เพื่อสร้าง v0.03 และ ต่อไปจนกว่าคุณจะถึง v1.00 เป็นผลให้เฉพาะรุ่นแรกจะอยู่ในรหัสเครื่อง รุ่นแรกที่นำออกใช้จะเป็นภาษาแอสเซมบลี

ฉันได้พัฒนาการคอมไพล์เลอร์ภาษาเทมเพลตโดยใช้เคล็ดลับนี้ เวอร์ชันเริ่มต้นของฉันใช้printfคำสั่ง แต่เวอร์ชันแรกที่ฉันใช้ใน บริษัท ของฉันกำลังใช้ตัวประมวลผลเทมเพลตที่กำลังประมวลผลอยู่ ขั้นตอน bootstrapping ใช้เวลาน้อยกว่าสี่ชั่วโมง: ทันทีที่ตัวประมวลผลของฉันสามารถสร้างผลลัพธ์ที่มีประโยชน์แทบจะไม่ฉันก็เขียนมันใหม่ในภาษาของตัวเองรวบรวมและโยนเวอร์ชั่นที่ไม่ใช่เทมเพลตออกไป


4
คุณยังได้รับทุกระยะหรือไม่ ฉันชอบที่จะเห็นพวกเขาและเปรียบเทียบพวกเขากับคนอื่น เพียงรับความรู้สึกถึงกระบวนการที่คุณทำ
Marjan Venema

3
@MarjanVenema ไม่ฉันไม่ได้พวกเขาได้อีกต่อไป - ฉันสร้างมันขึ้นมาในปี 1998 และเก็บไว้ใช้มันจนกระทั่งปี 2005 เมื่อผมค้นพบStringTemplate ฉันเขียนทับช่วงก่อนหน้านี้กับตอนถัดไปขณะที่ฉันกำลังทำงานกับเวอร์ชันเริ่มต้นที่ใช้ได้ วัฏจักรการพัฒนาของฉันประกอบด้วยการเข้ารหัสสิ่งใหม่ ๆ เรียกใช้ตัวสร้างรหัสเพื่อสร้างตัวเองในไดเรกทอรีที่แยกจากกันทำงานdiffกับตัวสร้างรหัสปัจจุบันเพื่อดูว่าส่วนของรหัสที่สร้างขึ้นไม่ได้เปลี่ยนไปในทางที่ไม่คาดคิด เรียกใช้อีกครั้งเพื่อสิ้นสุดรอบ
dasblinkenlight

สงสาร แต่เข้าใจได้ :) ขอบคุณที่อธิบายสิ่งที่คุณทำ (และสำหรับลิงก์)
Marjan Venema

3
ฉันคิดว่าคุณต้องเก็บโซ่ bootstrapping เอาไว้ รหัสเครื่อง => Limited ASM => Full ASM => บางภาษา มิฉะนั้นถ้าคุณทำไบนารีของคุณหายไปตามขั้นตอนใด ๆ (อีกวิธีหนึ่งคุณสามารถมี C-compiled version ได้เนื่องจากความจริงแล้วไบนารีของคอมไพเลอร์ C ทั้งหมดจะหายไปในครั้งเดียว)
edA-qa mort-ora-y

3
"คุณสมบัติ" เท่านั้นที่แอสเซมเบลอร์จะต้องเป็นแอสเซมเบลอร์ "ของจริง" คือการประกอบ
เส้นทาง Miles

23

ตามที่วิกิพีแอสเซมครั้งแรก / ภาษาประกอบถูกนำมาใช้สำหรับ IBM 701 โดยนาธาเนียลโรเชสเตอร์ (วันที่มีความไม่แน่นอนเล็กน้อยจากบทความ Wikipedia มันระบุว่า Rochester เข้าร่วม IBM ในปี 1948 แต่หน้า Wikipedia อื่นระบุว่า 701 มีการประกาศต่อสาธารณชนในปี 1952 และหน้า IBM นี้ระบุว่า"[a] การออกแบบ ctual เริ่มในเดือนกุมภาพันธ์ 1, 1951 และเสร็จสมบูรณ์ในอีกหนึ่งปีต่อมา " .)

อย่างไรก็ตาม "Assemblers and Loaders" โดยDavid Salomonกล่าวไว้ (หน้า 7) ว่า EDSAC มีแอสเซมเบลอร์:

"หนึ่งในคอมพิวเตอร์โปรแกรมที่เก็บไว้เป็นครั้งแรกคือ EDSAC (Electronic Delay Storage Automatic Calculator) ที่พัฒนาขึ้นที่มหาวิทยาลัยเคมบริดจ์ในปี 1949 โดย Maurice Wilkes และ W. Renwick จากวันแรกที่ EDSAC มีแอสเซมเบลอร์เรียกว่าคำสั่งเริ่มต้น ในหน่วยความจำแบบอ่านอย่างเดียวที่เกิดขึ้นจากชุดตัวเลือกโทรศัพท์หมุนและยอมรับคำแนะนำสัญลักษณ์แต่ละคำสั่งประกอบด้วยตัวช่วยจำหนึ่งตัวอักษรที่อยู่ทศนิยมและฟิลด์ที่สามที่เป็นตัวอักษรฟิลด์ที่สามทำให้เกิดหนึ่งใน 12 ค่าคงที่ที่ตั้งไว้ล่วงหน้าโดยโปรแกรมเมอร์เพื่อเพิ่มไปยังที่อยู่ในเวลาการประกอบ " (การอ้างอิงถูกละไว้ ... ดูต้นฉบับ)

สมมติว่าเรายอมรับว่า "คำสั่งซื้อเริ่มต้น" มีความสำคัญกว่าเรามีหลักฐานชัดเจนว่ามีการใช้งานแอสเซมเบลอร์ครั้งแรกในรหัสเครื่องจักร

รูปแบบนี้ (การเขียนแอสเซมเบลอร์เริ่มต้นในรหัสเครื่อง) น่าจะเป็นบรรทัดฐานที่ดีในปี 1950 อย่างไรก็ตามตามวิกิพีเดีย "[a] ssemblers เป็นเครื่องมือทางภาษาแรกที่สามารถบู๊ตได้เอง" ดูส่วนนี้ซึ่งอธิบายวิธีการใช้รหัสเครื่องของแอสเซมเบลอร์ที่เขียนขึ้นในการบู๊ตแอสเซมเบลอร์ขั้นสูงเพิ่มเติม

ทุกวันนี้แอสเซมเบลอร์และคอมไพเลอร์ถูกเขียนในภาษาระดับสูงกว่าและแอสเซมเบลอร์หรือคอมไพเลอร์สำหรับสถาปัตยกรรมเครื่องใหม่จะถูกพัฒนาบนสถาปัตยกรรมที่แตกต่างและคอมไพล์ข้าม

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

หน้า Wikipedia นี้เกี่ยวกับการคอมไพล์เลอร์ bootstrapping และแอสเซมเบลอร์มีค่าอ่าน ... ถ้าทั้งหมดนี้ยุ่งเหยิงให้คุณ


เพิ่มขึ้นสำหรับการตอบรับจริงมากกว่าที่จะคาดเดา นี่คือการอ่านที่น่าสนใจจริงๆ!
JacquesB

14

ฉันคิดว่าผู้ประกอบชิ้นแรกเขียนด้วยรหัสเครื่องจักรเพราะอย่างที่คุณพูดไม่มีอะไรเหลืออยู่เลยตอนนั้น

อย่างไรก็ตามในวันนี้เมื่อสถาปัตยกรรมซีพียูใหม่ออกมาเราใช้สิ่งที่เรียกว่าCross-Compilerซึ่งเป็นคอมไพเลอร์ที่สร้างรหัสเครื่องไม่ใช่สำหรับสถาปัตยกรรมที่รันอยู่ แต่สำหรับสถาปัตยกรรมที่แตกต่างกัน

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

ดังนั้นในปัจจุบันก็เป็นไปได้ (อย่างน้อยก็ในทางทฤษฎี) ในการสร้างสถาปัตยกรรมใหม่และมีคอมไพเลอร์ภาษาระดับสูงที่ทำงานอยู่บนมัน (รวบรวมในสถาปัตยกรรมอื่น ๆ ที่ใช้ cross-compilers) ก่อนที่คุณจะมีแอสเซมเบลอร์สำหรับสถาปัตยกรรมนั้น


12

ตอนแรก "ชุดประกอบ" ถูกเขียนลงบนกระดาษแล้ว "เรียบเรียง" ลงบนการ์ดเจาะด้วยตนเอง

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

ทั้งหมดนี้เป็นหลักก่อนโปรแกรมเมอร์มีความหรูหราของการป้อนข้อมูลผ่านแป้นพิมพ์และดูบนหน้าจอ


3
เมื่อฉันเรียนที่มหาวิทยาลัยพวกเขายังคงมีบล็อกกระดาษที่ใช้ในการเขียนรหัสเครื่อง คุณเขียนโปรแกรมทางด้านขวามีคอลัมน์ทางด้านซ้ายเพื่อแปลคำแนะนำเป็นเลขฐานสิบหก และคอลัมน์สำหรับที่อยู่ปัจจุบัน แอสเซมบลีแรกเป็นมนุษย์จริง ๆ
Florian F

9

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

ฉันควรเพิ่มในบางกรณีฉันไปอีกขั้น: ฉันเขียนโค้ดส่วนใหญ่ในภาษาแอสเซมบลีที่ฉันพบว่าใช้ง่ายกว่าจากนั้นเขียนเคอร์เนลขนาดเล็ก (มากหรือน้อยที่เราเรียกเครื่องเสมือน) เพื่อตีความสิ่งนั้นบนตัวประมวลผลเป้าหมาย นั่นคือช้าถึงตาย (โดยเฉพาะอย่างยิ่งใน 1 MHz, 8-bit processor) แต่นั่นก็ไม่ได้สำคัญอะไรมากนักเพราะโดยปกติมันจะทำงานเพียงครั้งเดียวเท่านั้น


8

คุณไม่จำเป็นต้องใช้แอสเซมเบลอร์เพื่อรวบรวมรหัสภาษาแอสเซมบลีลงในรหัสเครื่อง เช่นเดียวกับคุณไม่จำเป็นต้องมีเครื่องมือแก้ไขในการเขียนรหัสภาษาแอสเซมบลี

มุมมองทางประวัติศาสตร์

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

แม้ในช่วงแรกของการคำนวณโปรแกรมเมอร์เขียนโปรแกรมในรูปแบบของสัญลักษณ์และแปลมันเป็นรหัสเครื่องก่อนที่จะป้อนลงในคอมพิวเตอร์ ในกรณีของ Augusta Ada King เธอจะต้องแปลมันเป็นการ์ดเจาะสำหรับเครื่องมือวิเคราะห์ของBabbageแต่ก็ไม่เคยสร้างขึ้นมาเลย

ประสบการณ์ส่วนตัว

คอมพิวเตอร์เครื่องแรกที่ฉันเป็นเจ้าของคือSinclair ZX81 (Timex 1000 ในสหรัฐอเมริกา) ด้านหลังของคู่มือมีข้อมูลทั้งหมดที่คุณต้องการในการแปลภาษาแอสเซมบลี Z80 เป็นรหัสเครื่อง (รวมถึงโหมดดัชนีแปลก ๆ ทั้งหมดopcodes Z80 ที่มี)

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

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

จากประสบการณ์ฉันสามารถบอกคุณได้ว่าการดีบักรหัสของคุณนั้นง่ายกว่ามากหากเขียนด้วยภาษาแอสเซมบลีมากกว่ารหัสเครื่อง - ดังนั้นความนิยมในการถอดประกอบ แม้ว่าคุณจะไม่มีแอสเซมเบลอร์ แต่การประกอบด้วยมือมีข้อผิดพลาดน้อยกว่าการพยายามเขียนรหัสเครื่องโดยตรง แต่ฉันเดาว่าโปรแกรมเมอร์จริงอย่างเมลอาจไม่เห็นด้วย * 8)


5

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

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

เมื่อชุดการเรียนการสอนใหม่เอี่ยมถูกประดิษฐ์ขึ้นในวันนี้ไม่แตกต่างกันไปขึ้นอยู่กับ บริษัท / บุคคลการปฏิบัติและอื่น ๆ ซึ่งเป็นไปได้ค่อนข้างมากที่วิศวกรฮาร์ดแวร์อาจจะเขียนโปรแกรมใน verilog หรือ vhdl เขียนโปรแกรมทดสอบสองสามรายการแรกด้วยมือ (อาจเป็นเลขฐานสิบหกหรือไบนารี) ขึ้นอยู่กับความคืบหน้าของทีมซอฟต์แวร์พวกเขาอาจเร็วมากหรือไม่นานมาเปลี่ยนเป็นภาษาแอสเซมบลีแล้วก็คอมไพเลอร์

เครื่องคอมพิวเตอร์เครื่องแรกไม่ใช่เครื่องเอนกประสงค์ที่คุณสามารถใช้สร้างแอสเซมเบลอร์และคอมไพเลอร์ได้ คุณตั้งโปรแกรมพวกมันด้วยการย้ายสายไฟระหว่างเอาท์พุทของอะลูก่อนหน้าไปยังอินพุทของถัดไป ในที่สุดคุณมีตัวประมวลผลวัตถุประสงค์ทั่วไปที่คุณสามารถเขียนแอสเซมเบลอร์ในแอสเซมบลี, ประกอบมือ, ป้อนมันเป็นรหัสเครื่อง, จากนั้นใช้ในการแยกวิเคราะห์ ebcdic, ascii, ฯลฯ และโฮสต์ด้วยตนเอง จัดเก็บไบนารี่ไปยังสื่อบางอย่างที่คุณสามารถอ่าน / โหลดได้ในภายหลังโดยไม่ต้องสลับสวิตช์พลิกเป็นรหัสเครื่องป้อนกระดาษด้วยมือ

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


1
+1 สำหรับความคิดเห็น "แอสเซมเบลอร์คุณ" มันง่ายที่จะแนบกับคำนิยามหนึ่งคำ (เช่นแอสเซมเบลอร์ = ซอฟต์แวร์) แต่ความคิดเห็นของคุณทำให้เห็นชัดเจนในมุมมอง ... ว่า "กระบวนการประกอบ" เป็นเพียงระบบ / กิจวัตรซึ่งสามารถทำได้โดยง่าย ผู้ประกอบมนุษย์
The111

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

4

มีหนึ่งหรือสองกรณีในสวนสัตว์คอมพิวเตอร์ของ Brook ที่เขาพูดอะไรบางอย่างเช่น "ความจำเป็นสิ่งประดิษฐ์ของเราผู้ออกแบบใช้ opcode ที่เป็นตัวเลขหรืออักขระที่มีรหัสเป็น opcode" ดังนั้นเครื่องที่ไม่มีแม้แต่ ภาษาประกอบ

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

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


pdp-11 ไม่มีแม้แต่ความหรูหราของลูกบิด คุณสามารถเปลี่ยนที่เก็บข้อมูลได้โดยป้อนที่อยู่ไบนารีบนสวิตช์สลับ 8 ตัวและค่าสวิตช์สลับ 16 ปุ่มจากนั้นกดปุ่ม ฉันเห็นบางคนแก้ไขโปรแกรมวนรอบด้วยวิธีนี้!
James Anderson

2

ฉันสร้างคอมพิวเตอร์ในปี 1975 มันสูงกว่า Altair ร่วมสมัยมากเพราะมันมี 'monitor rom' ซึ่งให้ฉันเข้าโปรแกรมโดยพิมพ์รหัสเครื่องเป็นเลขฐานสิบหกและดูรหัสนี้บนหน้าจอวิดีโอเหมือนกับที่ Altair แต่ละคำสั่งเครื่องต้องถูกป้อนในเวลาหนึ่งโดยใช้แถวของสวิตช์

ใช่แล้วในยุคแรก ๆ ของคอมพิวเตอร์และอีกครั้งในยุคแรก ๆ ของคอมพิวเตอร์ส่วนบุคคลที่คนเขียนแอพพลิเคชั่นในรหัสเครื่อง


2

เรื่องเล็ก ๆ น้อย:

เมื่อฉันเรียนภาษาแอสเซมบลีบน Apple] [มีโปรแกรมรวมอยู่ใน ROM ชื่อว่าไมโครแอสเซมเบลอร์ มันแปลคำสั่งการประกอบเป็นไบต์ทันทีที่คุณป้อน ซึ่งหมายความว่าไม่มีป้ายกำกับ - หากคุณต้องการข้ามหรือโหลดคุณต้องคำนวณค่าชดเชยด้วยตัวเอง มันง่ายกว่าการค้นหาเลย์เอาท์คำสั่งและป้อนค่าฐานสิบหก

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

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