Làm cách nào tôi có thể biên dịch và chạy lắp ráp trong Ubuntu 18.04?


13

Vì vậy, gần đây tôi đã muốn học lắp ráp, vì vậy tôi đã học được một chút. Tôi đặt nó vào nano và lưu nó dưới dạng sân chơi. Bây giờ tôi đang tự hỏi, làm thế nào để tôi biên dịch và chạy nó? Tôi đã tìm kiếm khắp nơi và vẫn không thể tìm thấy nó. Tôi thực sự tò mò và không có điểm nào học ngôn ngữ nếu bạn thậm chí không thể sử dụng nó.


3
Rất vui khi đọc một câu hỏi như vậy trong thời gian của các khung có kích thước gigabyte cho tất cả các loại vấn đề :-)
PerlDuck

4
Xin lưu ý rằng có hai "hương vị" lắp ráp chính có cú pháp khác nhau: AT & T (gas) và Intel (nasm). Trước khi chọn một trình biên dịch, bạn nên quyết định cú pháp nào bạn muốn học và sử dụng. Xem biểu đồ so sánh chi tiết tại đây . Nếu vẫn không chắc chắn, hãy đi với Intel / nasm.
undercat hoan nghênh Monica

2
Bạn có thể sử dụng gcc nên được cài đặt trên máy Ubuntu tiêu chuẩn theo mặc định. Phần mở rộng tên tệp là .svà lệnh biên dịch phải làgcc myprog.s
FedonKadifeli

Ai đó muốn đóng câu hỏi này về cách biên dịch chương trình hợp ngữ trong Ubuntu thành chủ đề ngoài chủ đề. Tại sao nên đóng cửa ngoài chủ đề? Đó là về các gói từ kho lưu trữ Ubuntu mặc định và biên dịch mã lắp ráp trong Ubuntu, không phải cách viết mã lắp ráp.
karel

Câu trả lời:


15

Trong tất cả các phiên bản Ubuntu được hỗ trợ hiện tại, hãy mở terminal và gõ:

sudo apt install as31 nasm  

as31 : Intel 8031/8051 lắp ráp
Đây là một nhanh chóng, đơn giản, dễ sử dụng Intel 8031/8051 lắp ráp.

nasm : Trình biên dịch x86
đa năng Netwide. NASM hiện sẽ xuất các tệp nhị phân dạng phẳng, các tệp đối tượng Unix a.out, COFF và ELF và các tệp đối tượng Microsoft và Win32 16 bit của Microsoft.

Đây là mã cho một chương trình ngôn ngữ lắp ráp in 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   

Nếu bạn đang sử dụng NASM trong Ubuntu 18.04, các lệnh biên dịch và chạy tệp .asm có tên hello.asm là:

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
Tại sao các as31gói sẽ cần thiết? Từ câu hỏi và mô tả của gói, có vẻ như nó không phục vụ mục đích.
kasperd

4
@kasperd Thật ra as31không cần thiết. Lấy cảm hứng từ câu hỏi tôi đã googled một Hello World trong trình biên dịch chương trình, chỉ cài đặt nasmvà nó hoạt động. :-) Tôi nghĩ karel chỉ đề cập đến nó như là một thay thế.
PerlDuck

1
as31 là một thay thế nếu bạn cũng muốn học lắp ráp với as31.
karel

2
@kasperd: OP không chỉ định anh ấy đang viết cho cái gì, cũng như anh ấy đang sử dụng cú pháp lắp ráp nào, vì vậy sẽ bao gồm càng nhiều tùy chọn càng tốt.
Jörg W Mittag

1
Câu trả lời này sẽ có lợi từ việc chia lệnh cài đặt thành nasm, và một câu lệnh khác cho trình giả lập trình biên dịch + trình biên dịch 8051 (dường như có ít nhất một). Vì mục đích là để học lắp ráp, nên thực sự chạy trình giả lập cho kiến ​​trúc (r) đơn giản hơn x86 có thể có nhiều ý nghĩa.
hyde

2

Ubuntu đi kèm với như (GNU lắp ráp cầm tay)

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

-o: Cho biết nơi gửi đầu ra
-e: Cho biết ld biểu tượng bắt đầu

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.