ความแตกต่างระหว่างคอมไพเลอร์และแอสเซมเบลอร์

ผู้เขียน: Laura McKinney
วันที่สร้าง: 1 เมษายน 2021
วันที่อัปเดต: 12 พฤษภาคม 2024
Anonim
CS Foundations 03 Assemblers, Compilers and Interpreters
วิดีโอ: CS Foundations 03 Assemblers, Compilers and Interpreters

เนื้อหา


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

  1. แผนภูมิเปรียบเทียบ
  2. คำนิยาม
  3. ความแตกต่างที่สำคัญ
  4. ข้อสรุป

แผนภูมิเปรียบเทียบ

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


ความหมายของคอมไพเลอร์

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

คอมไพเลอร์ยังจัดเป็น single-pass, multi-pass, load-and-go, การดีบักและการเพิ่มประสิทธิภาพ การจำแนกจะทำบนพื้นฐานของฟังก์ชั่นที่คอมไพเลอร์ทำงานและวิธีการสร้าง แม้จะมีความซับซ้อนเหล่านี้งานพื้นฐานของคอมไพเลอร์ยังคงเหมือนเดิม

การรวบรวมจะดำเนินการในสองส่วน ส่วนการวิเคราะห์ และ ส่วนการสังเคราะห์. ส่วนการวิเคราะห์ แบ่งซอร์สโค้ดเป็นชิ้นส่วนและรูปแบบการแสดงกลางของซอร์สโค้ด ส่วนการสังเคราะห์ รูปแบบรหัสเป้าหมายจากการเป็นตัวแทนระดับกลาง

การรวบรวมจะดำเนินการในขั้นตอนต่อไปนี้:

ตัววิเคราะห์คำศัพท์, ตัววิเคราะห์ไวยากรณ์, ตัววิเคราะห์ความหมาย, ตัวสร้างโค้ดระดับกลาง, โค้ดเพิ่มประสิทธิภาพ, ตัวสร้างโค้ด, ตารางสัญลักษณ์และตัวจัดการข้อผิดพลาด


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

คำจำกัดความของแอสเซมเบลอร์

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

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

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

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

  1. ความแตกต่างที่สำคัญระหว่างคอมไพเลอร์และแอสเซมเบลอร์คือ ผู้รวบรวม สร้างแอสเซมบลีโค้ดและคอมไพเลอร์บางตัวสามารถสร้างโค้ดที่สามารถเรียกทำงานได้โดยตรงในขณะที่, ผู้ประกอบ สร้างรหัสเครื่อง relocatable
  2. คอมไพเลอร์ใช้เป็นอินพุต รหัสที่ประมวลผลล่วงหน้า สร้างโดยตัวประมวลผลล่วงหน้า ในทางกลับกันแอสเซมเบลอร์ใช้ รหัสการประกอบ เป็นอินพุต
  3. การรวบรวมเกิดขึ้นในสองขั้นตอนคือ ขั้นตอนการวิเคราะห์ และ ขั้นตอนการสังเคราะห์. ในขั้นตอนการวิเคราะห์อินพุตจะผ่าน ตัววิเคราะห์คำ, ตัววิเคราะห์ไวยากรณ์, ตัววิเคราะห์ความหมาย ในขณะที่การวิเคราะห์การสังเคราะห์จะเกิดขึ้นผ่าน เครื่องมือสร้างโค้ดระดับกลาง, โค้ดเพิ่มประสิทธิภาพ, เครื่องมือสร้างโค้ด. แอสเซมเบลอร์ส่งผ่านอินพุต สองขั้นตอน. เฟสแรกตรวจจับตัวระบุและที่อยู่ allots ในระยะที่สองรหัสการประกอบจะถูกแปลเป็นรหัสไบนารี่
  4. รหัสการประกอบที่สร้างโดยคอมไพเลอร์คือ รุ่นช่วยในการจำ ของรหัสเครื่อง อย่างไรก็ตามรหัสเครื่องที่เปลี่ยนตำแหน่งได้ที่สร้างโดยแอสเซมเบลอร์คือ รหัส relocatable ไบนารี.

สรุป:

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