ความแตกต่างระหว่างคอมไพเลอร์และแอสเซมเบลอร์
เนื้อหา
คอมไพเลอร์และแอสเซมเบลอร์มีบทบาทสำคัญในการทำงานของโปรแกรม คอมไพเลอร์บางตัวสร้างรหัสที่สามารถใช้งานได้โดยตรงแทนรหัสชุดประกอบ คอมไพเลอร์รับซอร์สโค้ดที่ถูกประมวลผลล่วงหน้าและแปลมันเป็นรหัสแอสเซมบลี แอสเซมเบลอร์ใช้รหัสแอสเซมบลีจากคอมไพเลอร์และแปลเป็นรหัสเครื่องที่เปลี่ยนตำแหน่งได้ ในบทความนี้ฉันได้พูดถึงความแตกต่างระหว่างคอมไพเลอร์และแอสเซมเบลอร์ด้วยความช่วยเหลือของแผนภูมิเปรียบเทียบที่แสดงด้านล่างเพียงแค่ดู
- แผนภูมิเปรียบเทียบ
- คำนิยาม
- ความแตกต่างที่สำคัญ
- ข้อสรุป
แผนภูมิเปรียบเทียบ
พื้นฐานสำหรับการเปรียบเทียบ | ผู้รวบรวม | ผู้ประกอบ |
---|---|---|
ขั้นพื้นฐาน | สร้างรหัสภาษาแอสเซมบลีหรือรหัสที่สามารถเรียกทำงานได้โดยตรง | สร้างรหัสเครื่องที่เปลี่ยนตำแหน่งได้ |
อินพุต | รหัสแหล่งที่ประมวลผลล่วงหน้า | รหัสภาษาแอสเซมบลี |
เฟส / ผ่าน | ขั้นตอนการรวบรวมเป็นตัววิเคราะห์คำ, การวิเคราะห์ไวยากรณ์, การวิเคราะห์ความหมาย, การสร้างรหัสกลาง, การเพิ่มประสิทธิภาพรหัส, การสร้างรหัส | แอสเซมเบลอร์ทำการส่งผ่านสองอินพุตที่กำหนด |
เอาท์พุต | รหัสแอสเซมบลีที่สร้างขึ้นโดยคอมไพเลอร์เป็นรุ่นช่วยจำของรหัสเครื่อง | รหัสเครื่องที่เปลี่ยนตำแหน่งได้ที่สร้างโดยแอสเซมเบลอร์จะแสดงด้วยรหัสไบนารี่ |
ความหมายของคอมไพเลอร์
ผู้รวบรวม เป็นโปรแกรมคอมพิวเตอร์ที่อ่านโปรแกรมที่เขียนด้วยภาษาต้นฉบับแปลมันให้เทียบเท่า ภาษาประกอบ และส่งต่อรหัสภาษาแอสเซมบลีไปยัง ผู้ประกอบ. ในขณะที่การแปลซอร์สโค้ดเป็นรหัสแอสเซมบลีคอมไพเลอร์ยังรายงาน ความผิดพลาด ในซอร์สโค้ดแก่ผู้ใช้
คอมไพเลอร์ยังจัดเป็น single-pass, multi-pass, load-and-go, การดีบักและการเพิ่มประสิทธิภาพ การจำแนกจะทำบนพื้นฐานของฟังก์ชั่นที่คอมไพเลอร์ทำงานและวิธีการสร้าง แม้จะมีความซับซ้อนเหล่านี้งานพื้นฐานของคอมไพเลอร์ยังคงเหมือนเดิม
การรวบรวมจะดำเนินการในสองส่วน ส่วนการวิเคราะห์ และ ส่วนการสังเคราะห์. ส่วนการวิเคราะห์ แบ่งซอร์สโค้ดเป็นชิ้นส่วนและรูปแบบการแสดงกลางของซอร์สโค้ด ส่วนการสังเคราะห์ รูปแบบรหัสเป้าหมายจากการเป็นตัวแทนระดับกลาง
การรวบรวมจะดำเนินการในขั้นตอนต่อไปนี้:
ตัววิเคราะห์คำศัพท์, ตัววิเคราะห์ไวยากรณ์, ตัววิเคราะห์ความหมาย, ตัวสร้างโค้ดระดับกลาง, โค้ดเพิ่มประสิทธิภาพ, ตัวสร้างโค้ด, ตารางสัญลักษณ์และตัวจัดการข้อผิดพลาด
- ตัววิเคราะห์คำ อ่านอักขระของซอร์สโค้ดและจัดกลุ่มไว้ใน กระแสของโทเค็น. แต่ละโทเค็นแสดงถึงลำดับลอจิคัลของตัวละครที่ชอบ คำหลักตัวระบุผู้ประกอบการ. ลำดับของอักขระที่เรียกว่าโทเค็น lexeme.
- เครื่องวิเคราะห์ไวยากรณ์ แยกโทเค็นที่ได้จากตัววิเคราะห์คำและโทเค็นกลุ่มลงใน โครงสร้างลำดับชั้น.
- เครื่องวิเคราะห์ความหมาย ตรวจสอบซอร์สโค้ดใด ๆ ข้อผิดพลาดทางความหมาย.
- ตัวสร้างโค้ดระดับกลาง สร้าง ตัวแทนระดับกลาง ของรหัสที่มา
- เครื่องมือเพิ่มประสิทธิภาพรหัส ปรับรหัสกลางให้เป็นรหัสเครื่องที่ทำงานได้เร็วขึ้น
- เครื่องกำเนิดรหัส ในที่สุดก็สร้างรหัสเป้าหมายซึ่งเป็น รหัสเครื่อง relocatable หรือรหัสการประกอบ.
- ตารางสัญลักษณ์ เป็นโครงสร้างข้อมูลที่มีการบันทึกสำหรับตัวระบุแต่ละตัวในซอร์สโค้ด
- ตัวจัดการข้อผิดพลาด ตรวจจับข้อผิดพลาดในแต่ละเฟสและจัดการข้อผิดพลาดเหล่านั้น
คำจำกัดความของแอสเซมเบลอร์
คอมไพเลอร์บางตัวทำงานของแอสเซมเบลอร์และสร้างรหัสเครื่องที่สามารถเปลี่ยนตำแหน่งได้โดยตรงแทนรหัสแอสเซมบลีซึ่งจะถูกส่งโดยตรงไปยังตัวเชื่อมโยง / ตัวโหลดเพิ่มเติม ผู้ประกอบ ใช้เป็นอินพุตรหัสแอสเซมบลีที่สร้างโดยคอมไพเลอร์และแปลเป็น รหัสเครื่อง relocatable.
ให้เราดูว่ารหัสเครื่องแตกต่างจากรหัสชุดประกอบอย่างไร รหัสการประกอบ คือ ช่วยในการจำ รุ่นของรหัสเครื่อง มันหมายถึงรหัสแอสเซมบลีใช้ชื่อสำหรับการแทนการดำเนินการและยังให้ชื่อกับที่อยู่หน่วยความจำ ในทางกลับกัน รหัสเครื่อง การใช้งาน รหัสไบนารี สำหรับการเป็นตัวแทนของการดำเนินงานและที่อยู่หน่วยความจำแม้แต่รูปแบบที่เรียบง่ายที่สุดของแอสเซมเบลอร์ก็มีประสิทธิภาพ สองผ่าน มากกว่าอินพุต ผ่านครั้งแรก ตรวจพบทั้งหมด ตัวบ่งชี้ ในรหัสแอสเซมบลีที่แสดงตำแหน่งที่ตั้งของที่เก็บและเก็บไว้ใน ตารางสัญลักษณ์ (นอกเหนือจากตารางสัญลักษณ์คอมไพเลอร์) กำหนดที่เก็บสินค้า ถึงตัวระบุที่พบในการผ่านครั้งแรก
ใน รอบที่สองอินพุตจะถูกสแกนอีกครั้งและในครั้งนี้ รหัสการทำงาน เป็น แปล เป็น ลำดับของบิต แสดงการดำเนินการนั้นในรหัสเครื่อง รอบที่สองก็แปล ตัวบ่งชี้ เข้าไปใน ที่อยู่ กำหนดไว้ในตารางสัญลักษณ์ ดังนั้นรอบที่สองจึงสร้าง รหัสเครื่อง relocatable.
- ความแตกต่างที่สำคัญระหว่างคอมไพเลอร์และแอสเซมเบลอร์คือ ผู้รวบรวม สร้างแอสเซมบลีโค้ดและคอมไพเลอร์บางตัวสามารถสร้างโค้ดที่สามารถเรียกทำงานได้โดยตรงในขณะที่, ผู้ประกอบ สร้างรหัสเครื่อง relocatable
- คอมไพเลอร์ใช้เป็นอินพุต รหัสที่ประมวลผลล่วงหน้า สร้างโดยตัวประมวลผลล่วงหน้า ในทางกลับกันแอสเซมเบลอร์ใช้ รหัสการประกอบ เป็นอินพุต
- การรวบรวมเกิดขึ้นในสองขั้นตอนคือ ขั้นตอนการวิเคราะห์ และ ขั้นตอนการสังเคราะห์. ในขั้นตอนการวิเคราะห์อินพุตจะผ่าน ตัววิเคราะห์คำ, ตัววิเคราะห์ไวยากรณ์, ตัววิเคราะห์ความหมาย ในขณะที่การวิเคราะห์การสังเคราะห์จะเกิดขึ้นผ่าน เครื่องมือสร้างโค้ดระดับกลาง, โค้ดเพิ่มประสิทธิภาพ, เครื่องมือสร้างโค้ด. แอสเซมเบลอร์ส่งผ่านอินพุต สองขั้นตอน. เฟสแรกตรวจจับตัวระบุและที่อยู่ allots ในระยะที่สองรหัสการประกอบจะถูกแปลเป็นรหัสไบนารี่
- รหัสการประกอบที่สร้างโดยคอมไพเลอร์คือ รุ่นช่วยในการจำ ของรหัสเครื่อง อย่างไรก็ตามรหัสเครื่องที่เปลี่ยนตำแหน่งได้ที่สร้างโดยแอสเซมเบลอร์คือ รหัส relocatable ไบนารี.
สรุป:
แอสเซมเบลอร์อาจไม่จำเป็นเนื่องจากคอมไพเลอร์บางตัวสร้างโค้ดที่สามารถเรียกทำงานได้โดยตรง หากมีการใช้แอสเซมเบลอร์จะต้องใช้ตัวเชื่อมโยงเพื่อเชื่อมโยงไลบรารีในตัวทั้งหมดเข้ากับฟังก์ชันไลบรารีที่ใช้ในซอร์สโค้ด