โปรแกรมที่เขียนด้วยภาษาแอสเซมบลีจะถูกรวบรวมโดยแอสเซมเบลอร์ แอสเซมเบลอร์ทุกภาษามีภาษาแอสเซมบลีของตนเองซึ่งออกแบบมาสำหรับสถาปัตยกรรมคอมพิวเตอร์เฉพาะ
ภาษาของเครื่องเป็นเพียงตัวเลขซึ่งไม่ใช่เรื่องง่ายที่มนุษย์จะอ่าน การใช้ ASM โปรแกรมเมอร์สามารถเขียนโปรแกรมที่มนุษย์อ่านได้ซึ่งสอดคล้องกับภาษาของเครื่อง
ข้อเสียคือทุกอย่างที่คอมพิวเตอร์ทำจะต้องอธิบายอย่างชัดเจนในรายละเอียดที่แม่นยำ ข้อดีคือโปรแกรมเมอร์สามารถควบคุมสิ่งที่คอมพิวเตอร์ทำ
ทำไม ASM จึงเป็นภาษา "ระดับต่ำ"
แอสเซมบลีเรียกว่าภาษาการเขียนโปรแกรมระดับต่ำเนื่องจากมีความสัมพันธ์แบบหนึ่งต่อหนึ่งระหว่างสิ่งที่บอกให้คอมพิวเตอร์ทำและสิ่งที่คอมพิวเตอร์ทำ โดยทั่วไปหนึ่งบรรทัดของโปรแกรมแอสเซมบลีประกอบด้วยคำสั่งสำหรับคอมพิวเตอร์สูงสุดหนึ่งคำสั่ง
ASM แตกต่างจากภาษา "ระดับสูง" อย่างไร
ภาษาระดับสูงมีการสรุปที่เป็นนามธรรมของการดำเนินการระดับต่ำซึ่งทำให้โปรแกรมเมอร์สามารถมุ่งเน้นไปที่การอธิบาย สิ่งที่พวกเขาต้องการทำ มากขึ้นและน้อยลง ว่าควรจะทำ อย่างไร การเขียนโปรแกรมด้วยวิธีนี้สะดวกยิ่งขึ้นและทำให้โปรแกรมอ่านง่ายขึ้นเมื่อเสียสละของการควบคุมระดับต่ำ
โปรแกรมที่เขียนด้วยภาษาระดับสูงจะไม่ตรงกับความเร็วและประสิทธิภาพของโปรแกรมที่เขียนในชุดประกอบ ตัวอย่างภาษาระดับสูง ได้แก่ Python, Java, JavaScript, Clojure และ Lisp
ภาษา "ระดับกลาง" คืออะไร
ภาษา ระดับ กลาง หรือ ระดับ ล่าง มีบทคัดย่อระดับสูงที่จะทำให้ชีวิตของโปรแกรมเมอร์ง่ายขึ้นในขณะที่ยังคงให้การเข้าถึงการดำเนินงานระดับต่ำ พวกเขามักจะใช้เพื่อเขียนระบบปฏิบัติการดังนั้นบางครั้งพวกเขาเรียกว่า ภาษาการเขียนโปรแกรมระบบ
โปรแกรมที่เขียนด้วยภาษาระดับกลางสามารถทำงานได้ดีหรือเกือบจะเหมือนกันกับโปรแกรมที่เขียนด้วยภาษาแอสเซมบลี ตัวอย่างภาษาการเขียนโปรแกรมระดับกลาง ได้แก่ C, C ++, Ada, Nim และ Rust
ASM เป็นแบบพกพาหรือไม่?
ไม่เนื่องจากภาษาแอสเซมบลีนั้นเชื่อมโยงกับสถาปัตยกรรมคอมพิวเตอร์ที่เฉพาะเจาะจงพวกเขาจึงไม่สามารถพกพาได้ โปรแกรมที่เขียนด้วยภาษาแอสเซมบลีหนึ่งจะต้องถูกเขียนใหม่ทั้งหมดเพื่อให้ทำงานบนเครื่องประเภทอื่นได้
การพกพาเป็นหนึ่งในข้อได้เปรียบหลักของภาษาระดับสูงกว่า ภาษาการเขียนโปรแกรม C มักเรียกว่า "ชุดประกอบแบบพกพา" เนื่องจากคอมไพเลอร์ C มีอยู่เกือบทุกสถาปัตยกรรมระบบที่ทันสมัย โปรแกรมที่เขียนใน C อาจต้องการการเปลี่ยนแปลงบางอย่างก่อนที่จะรวบรวมในคอมพิวเตอร์เครื่องอื่น แต่ภาษาหลักเป็นแบบพกพา
โดยทั่วไปแล้วภาษาในระดับที่สูงกว่าจะต้องทำการเปลี่ยนแปลงให้น้อยลงเพื่อให้สามารถทำงานบนสถาปัตยกรรมอื่นได้ ภาษาระดับต่ำสุด - ภาษาเครื่องและภาษาแอสเซมบลี - ไม่สามารถเคลื่อนย้ายได้
ตัวอย่าง: สวัสดีโลก! ในแอสเซมบลี 32 บิตสำหรับ Windows
นี่คือ "Hello, World" ที่เขียนขึ้นสำหรับโปรเซสเซอร์ Intel แบบ 32 บิต มันจะทำงานบนโปรเซสเซอร์ 64 บิต เราจะรวบรวมและเรียกใช้บน Windows 10
global _main extern ส่วน _printf. text _main: การส่งข้อความแบบพุช _printf เพิ่ม esp, 4 ข้อความซ้ำ: db 'Hello, World!', 10, 0
ในการเริ่มต้นให้เปิด Notepad คัดลอกและวางรหัสด้านบนลงในไฟล์ข้อความใหม่และบันทึกไฟล์เป็น hello.asm
ในการรวบรวมแอสเซมบลีเราจะใช้ NASM ซึ่งเป็น Netwide Assembler สามารถดาวน์โหลดได้ที่ //www.nasm.us/
nasm -f win32 hello.asm
เมื่อคุณเรียกใช้คำสั่งนี้ NASM จะสร้างไฟล์วัตถุ ไฟล์ออบเจ็กต์มีรหัสเครื่อง แต่ไม่ใช่ไฟล์ที่เรียกใช้งานได้ ไฟล์วัตถุของเราเรียกว่า hello.obj
ในการสร้างไฟล์ปฏิบัติการเราจะใช้ MinGW รุ่น 32 บิต (Minimal GNU สำหรับ Windows) ซึ่งจะให้คอมไพเลอร์ gcc สามารถดาวน์โหลดได้ที่ //www.mingw.org/
gcc -o hello.exe hello.obj
สวัสดี
สวัสดีชาวโลก!
ตัวอย่าง: สวัสดีโลก! ในชุด 64 บิตสำหรับ Linux
นี่คือ "Hello, World" ที่เขียนขึ้นสำหรับหน่วยประมวลผล Intel 64 บิต เราจะรวบรวมและเรียกใช้บน Linux 64 บิต
extern printf; ฟังก์ชัน C printf ที่จะเรียกว่าส่วน. data; ส่วนข้อมูลตัวแปรเริ่มต้น msg: db "Hello, world!", 0; สตริง C สิ้นสุดด้วย 0 fmt: db "% s", 10, 0; รูปแบบ printf "\ n", '0' ส่วน. text; เริ่มต้นส่วนรหัสสากลหลัก; จุดเริ่มต้น gcc มาตรฐานหลัก:; ฉลากโปรแกรมสำหรับรายการจุด push rbp; ตั้งค่ากรอบสแต็กต้องจัดชิด rdi mov, fmt mov rsi, msg mov rax, 0; สามารถเป็น: xor rax, rax call printf; เรียกฟังก์ชัน C printf pop rbp; คืนค่าสแต็ก mov rax, 0; ปกติไม่มีข้อผิดพลาดค่าส่งคืน ret; กลับ
คัดลอกและวางโปรแกรมนี้เป็นไฟล์ใหม่ที่ชื่อว่า hello.asm
จากนั้นรวบรวมแอสเซมบลีด้วย NASM ซึ่งคุณสามารถติดตั้งกับตัวจัดการแพคเกจของคุณ ตัวอย่างเช่นบน Ubuntu หรือ Debian คุณสามารถติดตั้ง NASM โดยใช้ apt:
อัปเดต sudo apt && sudo apt install nasm
รันคำสั่งนี้เพื่อสร้างไฟล์อ็อบเจ็กต์ของคุณ:
nasm -f elf64 hello.asm
ไฟล์วัตถุชื่อ hello.o
จากนั้นใช้ gcc เพื่อลิงก์ไฟล์ออบเจ็กต์นี้ไปยังไลบรารีที่จำเป็นในคอมพิวเตอร์ของคุณและคอมไพล์ไฟล์นั้นไปยังไฟล์ปฏิบัติการที่เรียกว่า hello :
gcc hello.o -o สวัสดี
สุดท้ายให้เรียกใช้ไฟล์ปฏิบัติการ:
./สวัสดี
สวัสดีชาวโลก!
สำหรับการอ้างอิงนี้เป็นโปรแกรมเดียวกันที่เขียนใน C:
#include int main () {char msg [] = "สวัสดีชาวโลก \ n"; printf ( "% s \ n" ผงชูรส); กลับ 0 }
- ดูรูทีนการดีบักสำหรับตัวอย่างอื่น ๆ ของรหัสแอสเซมบลีระดับต่ำและข้อมูลเพิ่มเติมเกี่ยวกับสิ่งที่แต่ละรูทีนทำ
- สำหรับตัวอย่างเพิ่มเติมของภาษาแอสเซมบลีดูที่เว็บไซต์ Happy Codings
2GL, แอสเซมเบลอร์, ภาษาระดับต่ำ, ภาษาเครื่อง, เงื่อนไขการเขียนโปรแกรม