Ubuntu 18.04에서 어셈블리를 어떻게 컴파일하고 실행할 수 있습니까?


16

최근에는 어셈블리를 배우고 싶었으므로 조금 배웠습니다. 나는 이것을 나노에 넣고 playground.asm으로 저장했습니다. 이제 궁금합니다. 어떻게 컴파일하고 실행합니까? 이미 모든 곳을 검색했지만 여전히 찾을 수 없습니다. 정말 궁금해서 언어를 사용할 수 없다면 아무 것도 배우지 않아도됩니다.


4
모든 종류의 문제에 대해 기가 바이트 크기의 프레임 워크에서 이러한 질문을 읽는 것이
좋습니다

4
있다는 것을 기록해 둡니다 AT & T (가스)와 인텔 (NASM) : 다른 구문이 주요 조립 "맛". 어셈블러를 선택하기 전에 배우고 사용할 구문을 결정해야합니다. 자세한 비교표는 여기를 참조 하십시오 . 여전히 확실하지 않으면 Intel / nasm으로 이동하십시오.
undercat 박수 모니카

2
표준 우분투 시스템에 기본적으로 설치되어야 하는 gcc 를 사용할 수 있습니다 . 파일 이름 확장자는 .s이며 컴파일 명령 은 다음 과 같아야합니다.gcc myprog.s
FedonKadifeli

누군가 우분투에서 어셈블리 언어 프로그램을 주제로 컴파일하는 방법에 대한이 질문을 끝내고 싶습니다. 😢 주제와 다른 이유는 무엇입니까? 기본 Ubuntu 리포지토리의 패키지와 Ubuntu의 어셈블리 코드를 컴파일하는 방법에 관한 것이지 어셈블리 코드를 작성하는 방법이 아닙니다.
karel December

답변:


17

현재 지원되는 모든 Ubuntu 버전에서 터미널을 열고 다음을 입력하십시오.

sudo apt install as31 nasm  

as31 : Intel 8031/8051 어셈블러
이것은 빠르고 간단하며 사용하기 쉬운 Intel 8031/8051 어셈블러입니다.

nasm : 범용 x86 어셈블러
Netwide Assembler. 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   

Ubuntu 18.04에서 NASM을 사용하는 경우 hello.asm이라는 .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는 필요하지 않습니다. 이 질문에 영감을 받아 Hello World 를 어셈블러로 봤는데 설치 만하면 nasm효과가있었습니다. :-) 나는 karel이 그것을 대안으로 언급했다고 생각합니다.
PerlDuck

1
as31을 사용하여 어셈블리를 배우려는 경우 as31이 대안입니다.
karel

2
@kasperd : OP는 자신이 작성하고있는 ISA 나 그가 사용하는 어셈블리 구문을 지정하지 않았으므로 가능한 많은 옵션을 포함하는 것이 합리적입니다.
Jörg W Mittag

1
이 답변은 설치 명령을 nasm으로 나누고 다른 하나는 8051 어셈블러 + 에뮬레이터 (적어도 하나있는 것 같습니다)로 나누면 도움이됩니다. 목적은 어셈블리를 배우는 것이기 때문에 실제로 x86보다 간단한 아키텍처를 위해 에뮬레이터를 실행하면 많은 의미가 있습니다.
하이드

2

우분투는 다음과 같이 제공 됩니다 (휴대용 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.