어셈블리 언어 란 무엇입니까?

어셈블리 또는 ASM 이라고도하는 어셈블리 언어 는 저급 프로그래밍 언어입니다.

어셈블리 언어로 작성된 프로그램은 어셈블러에 의해 컴파일됩니다. 모든 어셈블러에는 특정 컴퓨터 아키텍처 용으로 설계된 자체 어셈블리 언어가 있습니다.

기계어는 일련의 숫자 일 뿐이며 인간이 읽기가 쉽지 않습니다. 프로그래머는 ASM을 사용하여 기계 언어와 거의 일치하는 사람이 읽을 수있는 프로그램을 작성할 수 있습니다.

단점은 컴퓨터가하는 모든 것을 명시 적으로 정확하게 기술해야한다는 것입니다. 장점은 프로그래머가 컴퓨터가하는 일을 최대한 제어 할 수 있다는 것입니다.

ASM이 왜 "낮은 수준"의 언어입니까?

어셈블리는 저수준 프로그래밍 언어라고 부릅니다. 왜냐하면 컴퓨터에 지시하는 것과 컴퓨터가하는 것 사이에 (거의) 일대일 관계가 있기 때문입니다. 일반적으로 어셈블리 프로그램의 한 줄에는 컴퓨터에 대해 최대 하나의 명령이 포함되어 있습니다.

ASM은 "고급"언어와 어떻게 다른가요?

고수준 언어는 저수준 연산의 추상화를 제공하여 프로그래머가 원하는 것을 더 자세히 설명 하고 수행 방법을 줄이는 데 더욱 집중할 수 있습니다 . 이 방법으로 프로그래밍하는 것이 더 편리하며 저수준 제어를 희생하여 프로그램을 더 쉽게 읽을 수 있습니다.

고급 언어로 작성된 프로그램은 어셈블리로 작성된 프로그램의 원시 속도와 효율성과 절대로 일치하지 않습니다. 고급 언어의 예에는 Python, Java, JavaScript, Clojure 및 Lisp가 포함됩니다.

"중간 수준"언어 란 무엇입니까?

중간 수준 또는 낮은 수준의 언어는 낮은 수준의 작업에 대한 액세스를 제공하면서 프로그래머의 삶을 더 쉽게 만들 수있는 몇 가지 높은 수준의 추상화를 제공합니다. 이들은 종종 운영 체제를 작성하는 데 사용되기 때문에 시스템 프로그래밍 언어 라고도 합니다 .

중간 수준 언어로 작성된 프로그램은 어셈블리 언어로 작성된 프로그램과 거의 비슷하게 수행 할 수 있습니다. 중간 수준 프로그래밍 언어의 예로 C, C ++, Ada, Nim 및 Rust가 있습니다.

ASM은 휴대 할 수 있습니까?

아니요. 어셈블리 언어는 특정 컴퓨터 아키텍처에 묶여 있기 때문에 이식 할 수 없습니다. 한 어셈블리 언어로 작성된 프로그램은 다른 유형의 시스템에서 실행하기 위해 완전히 다시 작성해야합니다.

이식성은 고급 언어의 주요 이점 중 하나입니다. 거의 모든 최신 시스템 아키텍처에서 C 컴파일러가 존재하기 때문에 C 프로그래밍 언어는 "휴대용 어셈블리"라고도합니다. C로 작성된 프로그램은 다른 컴퓨터에서 컴파일되기 전에 약간의 변경이 필요할 수 있지만 핵심 언어는 이식성이 있습니다.

일반적으로 언어가 높을수록 다른 아키텍처에서 실행하는 데 필요한 변경 사항이 줄어 듭니다. 가장 낮은 수준의 언어 인 기계어 및 어셈블리 언어는 이식 할 수 없습니다.

예 : 안녕하세요, 세계! 32 비트 어셈블리에서 Windows 용

다음은 32 비트 인텔 프로세서 용으로 작성된 "Hello, World"입니다. 또한 64 비트 프로세서에서 실행됩니다. Windows 10에서 컴파일하고 실행할 것입니다.

 글로벌 _main extern _printf 섹션 .text _main : 푸시 메시지 호출 _printf add esp, 4 ret 메시지 : db 'Hello, World!', 10, 0 

시작하려면 메모장을 엽니 다. 위의 코드를 복사하여 새 텍스트 파일에 붙여넣고 파일을 hello.asm 으로 저장하십시오 .

어셈블리를 컴파일하려면 Netwide Assembler 인 NASM 을 사용합니다. //www.nasm.us/에서 다운로드 할 수 있습니다.

 nasm -f win32 hello.asm 

이 명령을 실행하면 NASM은 오브젝트 파일을 작성합니다. 오브젝트 파일에는 기계어 코드가 있지만 실행 파일이 아닙니다. 우리의 목적 파일은 hello.obj 입니다.

실행 파일을 만들려면 gcc 컴파일러를 제공 할 MinGW 32 비트 버전 (Windows 용 최소 GNU)을 사용합니다. //www.mingw.org/에서 다운로드 할 수 있습니다.

 gcc -o hello.exe hello.obj 
 여보세요 
 안녕, 세상! 

예 : 안녕하세요, 세계! 64 비트 어셈블리에서 Linux 용

다음은 64 비트 인텔 프로세서 용으로 작성된 "Hello, World"입니다. 64 비트 Linux에서 컴파일하고 실행할 것입니다.

 extern printf; section.data라고 불리는 C printf 함수; 데이터 섹션, 초기화 된 변수 msg : db "Hello, world!", 0; C 문자열은 0 fmt로 종료됩니다. db "% s", 10, 0; printf 형식 "\ n", "0"섹션. 텍스트; 코드 섹션을 시작하십시오. 표준 gcc 엔트리 포인트 main :; 진입 점을위한 프로그램 레이블 push rbp; 스택 프레임 설정, mov rdi, fmt mov rsi, msg mov rax, 0; 또한 xor rax, rax call printf; C printf 함수를 호출합니다. pop rbp; 복원 스택 mov rax, 0; 정상, 에러 없음, 반환 값 ret; 반환 

이 프로그램을 복사하여 hello.asm 이라는 새 파일에 붙여 넣으십시오.

그런 다음 패키지 관리자와 함께 설치할 수있는 NASM을 사용하여 어셈블리를 컴파일하십시오. 예를 들어, 우분투 또는 데비안에서는 apt를 사용하여 NASM을 설치할 수 있습니다.

 sudo apt update && sudo apt install nasm 

이 명령을 실행하여 개체 파일을 만듭니다.

 nasm -f elf64 hello.asm 

오브젝트 파일의 이름은 hello.o 입니다.

그런 다음 gcc 를 사용하여이 오브젝트 파일을 컴퓨터의 필요한 라이브러리에 연결하고 hello 라는 실행 파일로 컴파일하십시오.

 gcc hello.o -o hello 

마지막으로 실행 파일을 실행합니다.

 ./여보세요 
 안녕, 세상! 

참고로이 프로그램은 C :

 #include int main () {char msg [] = "Hello world \ n"; printf ( "% s \ n", msg); 0을 반환; } 

  • 저수준 어셈블리 코드의 다른 예제 및 각 루틴의 기능에 대한 추가 정보는 디버깅 루틴을 참조하십시오.
  • 어셈블리 언어의 추가 예제는 해피 코딩 웹 사이트를 참조하십시오.

2GL, 어셈블러, 저수준 언어, 기계어, 프로그래밍 용어