ตัวประกอบ GNU

จากวิกิพีเดีย สารานุกรมเสรี
ข้ามไปที่การนำทาง ข้ามไปที่การค้นหา
ตัวประกอบ GNU
Heckert GNU white.svg
ผู้พัฒนาโครงการ GNU
ปล่อยที่มั่นคง
GNU Binutils 2.38 [1] แก้ไขบน Wikidata / 9 กุมภาพันธ์ 2565 ; 2 เดือนที่แล้ว (9 February 2022)
เขียนใน
แพลตฟอร์มข้ามแพลตฟอร์ม
พิมพ์ผู้ประกอบ
ใบอนุญาตใบอนุญาตสาธารณะทั่วไปของ GNU v3
เว็บไซต์www .gnu .org /software /binutils /

GNU Assemblerหรือที่เรียกกันทั่วไปว่าgasหรือas เป็นแอ สเซม เบลอร์ที่พัฒนาโดยโครงการ GNU เป็นแบ็คเอนด์ เริ่ม ต้นของGCC มันถูกใช้เพื่อประกอบระบบปฏิบัติการ GNUและเคอร์เนล Linuxและซอฟต์แวร์อื่น ๆ มันเป็นส่วนหนึ่งของแพ็คเกจ GNU Binutils

ชื่อ โปรแกรมเรียกทำงาน GAS เป็นชื่อมาตรฐานสำหรับแอสเซมเบลอร์Unix GAS เป็นข้ามแพลตฟอร์มและทำงานบนและประกอบสำหรับสถาปัตยกรรมคอมพิวเตอร์ ที่แตกต่างกันจำนวน หนึ่ง GAS เป็นซอฟต์แวร์ฟรีที่เผยแพร่ภายใต้GNU General Public License v3

ประวัติ

GAS รุ่นแรกเปิดตัวในปี 2529-2530 [2]มันถูกเขียนโดย Dean Elsner และสนับสนุนสถาปัตยกรรมVAX [2]

ไวยากรณ์ทั่วไป

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

คำสั่ง

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

ตั้งแต่เวอร์ชัน 2.10 เป็นต้นไป ไวยากรณ์ของ Intel สามารถใช้ได้ผ่านการใช้.intel_syntaxคำสั่ง [4] [5] [6]

ความคิดเห็น

GAS รองรับความคิดเห็นสองรูปแบบ [7]

หลายสาย

เช่นเดียวกับในภาษา C ความคิดเห็นแบบหลายบรรทัดเริ่มต้นและสิ้นสุดด้วยคู่เครื่องหมายทับ-เครื่องหมายดอกจันที่ทำมิเรอร์:

/* 
ความคิดเห็น
*/

แถวเดียว

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

การใช้งาน

GNU Assembler เป็นแบ็คเอนด์สำหรับชุดคอมไพเลอร์ยอดนิยมคือ GCC มีการใช้กันอย่างแพร่หลายในการรวบรวมซอฟต์แวร์โอเพ่นซอร์สที่ทันสมัย GAS มักใช้เป็นแอสเซมเบลอร์บนระบบปฏิบัติการ GNU/Linux ร่วมกับซอฟต์แวร์ GNU อื่นๆ GAS เวอร์ชันที่แก้ไขยังสามารถพบได้ในแพ็คเกจ เครื่องมือการพัฒนาmacOS ตั้งแต่ OS X

ตัวอย่างโปรแกรม

มาตรฐาน "สวัสดีชาวโลก!" โปรแกรมสำหรับLinuxบนIA-32 :

.global 	_start

.text 
_start: 
	movl   $4 ,  %eax    # 4 (รหัสสำหรับ "เขียน" syscall) -> EAX register 
	movl   $1 ,  %ebx    # 1 (ตัวอธิบายไฟล์สำหรับ stdout) -> EBX (อาร์กิวเมนต์ที่ 1 สำหรับ syscall) 
	movl   $msg ,  % ecx  # ที่อยู่ของสตริง msg -> ECX (อาร์กิวเมนต์ที่ 2) 
	movl   $len ,  %edx  # len (ที่อยู่ 32 บิต) -> EDX (หาเรื่องที่สาม) 
	int    $0x80       # ขัดจังหวะด้วยตำแหน่ง 0x80 (128) ซึ่งเรียกใช้ระบบของเคอร์เนล ขั้นตอนการโทร

	movl   $1 ,  %eax    # 1 ("exit") -> EAX 
	movl   $0 ,  %ebx    # 0 (พร้อมความสำเร็จ) -> EBX 
	int    $0x80       # ดูก่อนหน้า
.data 
msg: 
	.ascii   "Hello, world!\n"  # สตริง ascii แบบอินไลน์
	len  =    .  -  msg            # assign (ที่อยู่ปัจจุบัน - ที่อยู่ของ msg start) เป็นสัญลักษณ์ "len"

ดูเพิ่มเติม

อ้างอิง

  1. นิค คลิฟตัน (9 กุมภาพันธ์ พ.ศ. 2565) "GNU Binutils 2.38 ออกแล้ว" . สืบค้นเมื่อ9 กุมภาพันธ์ 2022 .
  2. ^ a b "ตัวประกอบ GNU" CiteSeerX 10.1.1.32.4503 .  {{cite journal}}: Cite journal requires |journal= (help)
  3. ^ "The GNU Assembler - คำสั่งแอสเซมเบลอร์" .
  4. ^ "ข่าวประกอบ GNU" .
  5. ^ "AT&T Syntax กับ Intel Syntax " สืบค้นเมื่อ28 กรกฎาคม 2014 .
  6. ^ ราม นารายณ์ (2007-10-17). "แอสเซมเบลอร์ Linux: การเปรียบเทียบ GAS และ NASM " IBM DeveloperWorks . เก็บถาวรจากต้นฉบับเมื่อ 3 มีนาคม 2552 . สืบค้นเมื่อ28 กรกฎาคม 2014 .
  7. ^ Red Hat Inc. "ใช้เป็น" สืบค้นเมื่อ 10 มกราคม 2556

ลิงค์ภายนอก