ฉันจะรวบรวมและเรียกใช้งานชุดประกอบใน Ubuntu 18.04 ได้อย่างไร


16

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


4
ยินดีที่ได้อ่านคำถามดังกล่าวในช่วงเวลาของเฟรมเวิร์กขนาดกิกะไบต์สำหรับปัญหาทุกประเภท :-)
PerlDuck

4
โปรดทราบว่ามี"การประชุมใหญ่" สองชุดที่มีรูปแบบแตกต่างกัน: AT&T (แก๊ส) และ Intel (nasm) ก่อนที่จะเลือกแอสเซมเบลอร์คุณควรตัดสินใจว่าคุณต้องการเรียนรู้และใช้ไวยากรณ์ใด ดูรายละเอียดกราฟเปรียบเทียบที่นี่ หากยังไม่แน่ใจให้ไปกับ Intel / nasm
Undercat ปรบมือ Monica

2
คุณสามารถใช้gccซึ่งควรติดตั้งบนเครื่อง Ubuntu มาตรฐานโดยค่าเริ่มต้น นามสกุลไฟล์คือ.sและคำสั่งในการคอมไพล์ควรเป็นgcc myprog.s
FedonKadifeli

มีคนต้องการปิดคำถามนี้เกี่ยวกับวิธีการรวบรวมโปรแกรมภาษาแอสเซมบลีใน Ubuntu เป็นหัวข้อปิด 😢ทำไมจึงควรปิดเป็นหัวข้อปิด มันเกี่ยวกับแพ็คเกจจากที่เก็บเริ่มต้นของ Ubuntu และการคอมไพล์รหัสแอสเซมบลีใน Ubuntu ไม่ใช่วิธีเขียนโค้ดแอสเซมบลี
karel

คำตอบ:


17

ใน Ubuntu ทุกรุ่นที่รองรับในปัจจุบันเปิดเทอร์มินัลและประเภท:

sudo apt install as31 nasm  

as31 : แอสเซมเบลอร์ Intel 8031/8051 แอสเซมเบลอร์ Intel 8031/8051 ที่
ใช้งานง่ายรวดเร็วและใช้งานง่าย

nasm :
แอสเซมเบลอร์x86 ที่ใช้งานทั่วไปแอสเซมเบลอร์ Netwide ปัจจุบัน NASM จะส่งออกไฟล์ไบนารีแบบแบน, a.out, ไฟล์วัตถุ COFF และ ELF Unix และไฟล์วัตถุ Microsoft 16 บิต DOS และ Win32

นี่คือรหัสสำหรับโปรแกรมภาษาแอสเซมบลีที่พิมพ์ Hello world

section     .text
global      _start 
_start: 
    mov     edx,len   
    mov     ecx,msg   
    mov     ebx,1   
    mov     eax,4   
    int     0x80   
    mov     eax,1  
    int     0x80   
section     .data
msg     db  'Hello world',0xa  
len     equ $ - msg   

หากคุณใช้ NASM ใน Ubuntu 18.04 คำสั่งในการรวบรวมและเรียกใช้ไฟล์. asm ชื่อ hello.asm คือ:

nasm -f elf64 hello.asm # assemble the program  
ld -s -o hello hello.o # link the object file nasm produced into an executable file  
./hello # hello is an executable file

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

4
@kasperd as31ไม่จำเป็นต้องใช้จริง แรงบันดาลใจจากคำถามที่ฉัน googled Hello Worldในการประกอบติดตั้งเพียงnasmและการทำงาน :-) ฉันคิดว่า karel เพิ่งพูดถึงมันเป็นทางเลือก
PerlDuck

1
as31 เป็นอีกทางเลือกถ้าคุณต้องการเรียนรู้การประกอบด้วย as31
karel

2
@kasperd: OP ไม่ได้ระบุว่าเขากำลังเขียน ISA ใดและไม่ใช้ไวยากรณ์แอสเซมบลีใดดังนั้นจึงเหมาะสมที่จะรวมตัวเลือกให้ได้มากที่สุด
Jörg W Mittag

1
คำตอบนี้จะได้ประโยชน์จากการแบ่งคำสั่งการติดตั้งเป็น nasm และอีกคำสั่งสำหรับ 8051 assembler + emulator (ดูเหมือนว่าจะมีอย่างน้อยหนึ่งรายการ) เนื่องจากจุดประสงค์คือเพื่อเรียนรู้การประกอบจริง ๆ แล้วการเรียกใช้อีมูเลเตอร์สำหรับสถาปัตยกรรมที่เรียบง่าย (r) มากกว่า x86 อาจสมเหตุสมผลมาก
ไฮด์

2

Ubuntu มาพร้อมกับเป็น (คนประกอบ GNU พกพา)

as file.s -o file.out
ld file.out -e main -o file
./file

-o: บอกตำแหน่งที่จะส่งออก
-e: บอก ld สัญลักษณ์เริ่มต้น

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