날먹을 위한 몸부림/나중에 옮기겠지

visual studio2019에서 인라인 어셈블리 - 1

프로그래밍하는 지팡이 2023. 1. 9. 17:24

머갈통말

vs는 컴파일러를 통해서 x64인라인 어셈블리를 지원하지 않음간단한 어셈블리 프로젝트를 작성하는데 nasm와 같은 외부 어셈블러 사용시 어려움을 느낄 수 있음이번 글을 통해서 외부 어셈블러를 사용하지 않고 간단한 어셈블리 프로젝트를 작성해봄

 

 

 

미리 말함

x86에서는 코드에서 asm, _asm을 사용 가능

x64에서는 코드에서 asm, _asm을 사용 불가

 

이 글에서는 x86과 x64의 플랫폼 변경시에 비교적 유연하게 대처할 수 있도록 asm파일을 따로 만들어서 실습함

 


순서

  • 프로젝트 생성
  • main.cpp, asm_lib.asm 추가
  • 사용자 지정 빌드 추가
  • 코드 작성

프로젝트 생성

 

프로젝트 생성 -> c++ 빈프로젝트 생성

 

빈 프로젝트가 생성된 모습

 

main.cpp, asm_lib.asm 추가

 

main.cpp를 만든 뒤에 asm_lib.asm을 추가한다

따로 asm항목을 추가할 수 있는 형식이 없으니 직접 확장자를 작성한다

 

확장자를 .asm으로 작성한 모습

위 이미지와 같이 작성했다면 추가한다

 

 

사용자 지정 빌드 추가

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

사용자 지정 빌드

 

masm을 체크

marmasm은 arm용이니까 체크하지마셈

 

 

소스 트리에서 asm_lib.asm을 우클릭 후 속성

asm파일의 속성

 

항목 형식을 Microsoft macro Assembler로 변경한 뒤 확인

빌드에서 제외를 아니오 또는 빈칸으로 설정

항목 형식을 설정

 

 

코드 작성

 

x86으로 빌드 후 실행하면 다음과 같은 결과를 볼 수 있다

 

실행 결과

 

 

 

이번 글에서는 x86에서 코드의 asm을 사용하지 않고 외부 파일을 이용하는 방법을 진행해봤음

다음 글에서는 x64에서 진행해봄

 

참고하셈

https://learn.microsoft.com/en-us/cpp/assembler/masm/dot-model?view=msvc-170 

https://stackoverflow.com/questions/33751509/external-assembly-file-in-visual-studio