머갈통말
앞에서 작성한 프로젝트를 기반으로 x64지원까지 추가해서 만들어봄
결과는 x86과 x64에서 둘 다 작동하는 작은 어셈블리 프로젝트임
뭐 했는지 기억 안난다면 이전글 참고
https://boa9448.tistory.com/26
visual studio2019에서 인라인 어셈블리 - 1
머갈통말 vs는 컴파일러를 통해서 x64인라인 어셈블리를 지원하지 않음간단한 어셈블리 프로젝트를 작성하는데 nasm와 같은 외부 어셈블러 사용시 어려움을 느낄 수 있음이번 글을 통해서 외부
boa9448.tistory.com
순서
- asm_lib_x64.asm 추가
- asm_lib.asm, asm_lib_x64.asm 파일 속성 수정
- 코드 작성
- 끝
asm_lib_x64.asm 추가
앞에서 추가한 asm_lib.asm과 같은 방식으로 파일을 추가함
파일 이름은 asm_lib_x64.asm
asm_lib.asm, asm_lib_x64.asm 파일 속성 수정
x86과 x64는 범용 레지스터의 크기부터 호출 규칙등 차이가 존재함
그래서 x86으로 컴파일 될 때는 asm_lib.asm이 사용되도록 하고
x64로 컴파일 될 떄는 asm_lib_x64.asm이 사용되록 프로젝트를 설정함
asm_lib.asm 파일 우클릭 -> 속성 클릭
구성 : 모든 구성, 플랫폼 : x64
빌드에서 제외 : 예
위와 같이 설정한 뒤 저장
다음은 asm_lib_x64.asm을 설정함
asm_lib_x64.asm 파일 우클릭 -> 속성 클릭
구성 : 모든 구성, 플랫폼 : Win32
빌드에서 제외 : 예
위와 같이 설정한 뒤 저장
asm_lib.asm는 x64에서는 빌드에서 제외되야 하고 x86에서는 빌드에 포함되어야한다
asm_lib_x64.asm은 x86에서는 빌드에서 제외되야 하고 x64에서는 빌드에 포함되야함
코드 작성
x64는 x86과 다른 방식으로 함수를 호출한다
기본으로 fastcall을 사용해서 함수를 호출한다
더 궁금하면 다음 글 참고
https://learn.microsoft.com/en-us/cpp/build/x64-calling-convention?view=msvc-170
x64 calling convention
Learn about the details of the default x64 calling convention.
learn.microsoft.com
함수의 인자가 스택으로 넘어오는게 아닌 레지스터를 통해서 전달됨
그래서 앞에서 작성했던 x86의 my_add3과 같은 방식을 사용 할 수 없음
x64빌드 후 실행하면 다음과 같은 결과를 볼 수 있다
끝
'날먹을 위한 몸부림 > 나중에 옮기겠지' 카테고리의 다른 글
자리 확보용 (2) | 2023.02.07 |
---|---|
오토핫키 딥러닝 (0) | 2023.02.02 |
c++ x64에서 vmx지원 체크 (2) | 2023.01.10 |
c++ x64에서 cpu 공급업체 가져오기 (0) | 2023.01.09 |
visual studio2019에서 인라인 어셈블리 - 1 (0) | 2023.01.09 |