티스토리 뷰
C++을 인터페이스로 해서, 어셈블리를 함수처럼 다루는 방법입니다.
검색해도, 아무리 찾아도 잘 안보였는데
알고나니 너무나도 당연하고 쉬운 거네요.
비쥬얼스튜디오2008로 가능한 예제 소스를 만들었습니다.
(VS2008 미만 버젼은 masm이 포함되지 않아서 컴파일이 되지 않습니다. 컴파일 규칙에 ml을 다운받으셔서 새 규칙을 만드셔야 할겁니다. 그냥 VS2008을 설치하는 것을 추천드립니다. 그러면 ml이 자동적으로 설치됩니다. 무료버젼인 Visual C++ 2008 익스프레스도 가능합니다.)
먼저 빈 프로젝트를 생성한다음, asm파일과 cpp 파일을 생성합니다.
그리고 아래의 소스를 넣고 컴파일 해보시면, 어떻게 돌아가는지 아실겁니다.
(vs2008 이상인데도 컴파일이 안되면, 프로젝트 우클릭 -> 빌드 규칙 -> ml 클릭 하시면 될겁니다.)
파라미터 넘기고, 값 받아오는 것까지, 억지스러운 함수지만(주석을 안달았습니다.. 나중에 시간나면 정리를 해야겠네요), 어셈블리와 c++을 이해하고 있으면 쉽게 이해할 수 있으리라 생각합니다. (실행값을 보시고, 몇몇 변수들을 바꿔보시면 이해가 빠르실 겁니다.)
과제때문에 하는거라, 급히 올리는데... 필요하실 분이 많으실꺼 같아서 간단하게 만들어서 올려봅니다.. 이 글은 나중에 다시 정리해서 올리겠습니다.
/******* main.c ******/
#include <iostream>
extern "C" {
short asmTest( short n, short count, short a[] );
}
using namespace std;
void main()
{
short a[5];
for(short i = 0; i < 5; i++)
a[i] = i;
short put=65;
short out = 0;
for(short i = 0; i < 5 ; i++)
{
out = asmTest( put, i, a );
cout<< i << "번째 값 : " << hex << a[i] << "-" << out << endl;
}
}
/********* asmTest.asm ******/
TITLE asmTest Procedure (asmTest.asm)
.586
.model flat,C
asmTest PROTO,
put:WORD, count:WORD, arr:PTR WORD
.code
asmTest PROC USES di,
put:WORD, count:WORD, arr:PTR WORD
mov eax,0
mov ax,put
mov ecx,0
mov cx,count
mov edi,arr
mov [edi+(ecx*2)], ax
mov ax, [edi+(ecx*2)]
ret
asmTest ENDP
END
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 정의는 무엇인가
- 기본소득 블로그 선언
- 대담회
- 추억
- 퍼프크림
- 유 윌 미스 미
- 중국탐방
- 아스트랄
- Je Vais Te Manqué
- 서울
- 발해성터
- You'll Miss Me
- 미팅싸이트
- 기본소득
- 커피
- 봉오동승전지
- 독립역사탐방
- 다망해라
- 슈크림빵
- 롤라 런
- 선우진
- 그리움
- 안녕
- 여행
- 이티오피아
- 커스터드크림
- 교차하는 여러 감정들
- 10년전 메일
- 영화
- 사랑
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
글 보관함