[C++] 어셈블리어 사용해보기

kimyb·2022년 11월 20일

어셈블리 언어(Assembly Language):

컴퓨터 프로그래밍 언어 중에서도 가장 저수준인 언어 중 하나.

특징

  1. 기계어와 대응:
    컴퓨터의 기계어 명령어와 직접 대응됨. 각 어셈블리 언어 명령어는 컴퓨터에서 직접 실행되는 명령어와 유사한 역할을 함.

  2. 저수준 언어:
    컴퓨터의 하드웨어에 보다 더 가깝게 작동하며, 메모리와 레지스터 등을 직접 다룰 수 있다.

  3. 이식성의 제한:
    컴퓨터 아키텍처에 종속적이므로, 다른 아키텍처에서는 다시 작성해야 할 수도 있다

  4. 성능 최적화:
    어셈블리 언어는 성능 최적화를 위해 사용될 때 효과적이다.
    히 시스템 프로그래밍, 임베디드 시스템, 그래픽스, 게임 프로그래밍 등에서 성능 향상으로 활용.


    어셈블리 언어는 이해하기 어렵고 코드 작성이 번거로워 오류가 발생하기 쉽지만, 하드웨어를 직접 제어하고 성능을 극대화해야 하는 경우에는 유용.

C++에서 어셈블리어 사용하기

  1. 어셈블리어 인라인
    (32비트로 빌드. 64비트는 2번 방법으로..)

visual studio에서 간단하게 작성 가능하다.

__asm 의 { } 안에 어셈블리어를 절차적으로 작성하여 실행.

#include <iostream>
  int main() {
    int a = 5, b = 9, result;
    __asm {
        // 어셈블리어 코드 작성
        mov eax, a
        mov ebx, b
        add eax, ebx
        mov result, eax
    }
    std::cout << "a + b = " << result << std::endl;
    return 0;
}

실행 결과 :

  1. 어셈블리어 파일
    위 방법은 32비트만 가능했지만, 다음은 64비트에서 가능하다.

프로젝스 우클릭 > 빌드 종속성 > 사용자 지정빌드

masm 체크 후 확인.

실행할 cpp 코드

#include <iostream>

extern "C" int sum(); // 외부 어셈블리어 함수 선언

int main() {
    int result = sum(); // 어셈블리어 함수 호출
    std::cout << "결과: " << result << std::endl;
    return 0;
}

외부 asm 파일

.data
a DWORD 2
b DWORD 17
result DWORD 0

.code
sum PROC
    mov eax, a
    mov ebx, b
    add eax, ebx
    mov result, eax
    ret
sum ENDP
END

실행 결과 :

profile
공부했던것을 정리.

0개의 댓글