어셈 컴파일 어떻게 하나요??
글쓴이: 등짝을보자 / 작성시간: 금, 2006/12/15 - 8:11오후
이거 참 컴파일하는 방법 조차 모르니..-_-;
아무튼 "어셈블리언어(4/E) : Assembly Language For Intel-Based Computers"
http://kangcom.com/common/bookinfo/bookinfo.asp?sku=200403050010
라는 책을 구입했습니다..
이 책 첫번째 예제인 AddSub.asm 이라는 파일을 컴파일 하고 싶은데요
어떻게 하는지 모르겠어요..
컴파일시
C:\Masm615>ml addsub.asm Microsoft (R) Macro Assembler Version 6.15.8803 Copyright (C) Microsoft Corp 1981-2000. All rights reserved. Assembling: addsub.asm addsub.asm(6) : fatal error A1000: cannot open file : Irvine32.inc C:\Masm615>
Irvine32.inc 이 파일이 경로지정이 안된거같은데 어떻게 설정하나요?
INC폴더에 있긴있는데 컴파일하면 저렇게 나오네요?
그리고 리눅스에서 Irvine32.inc 라는 파일을 쓸라고 어떻게 해야하나요??
Forums:
제가 기억하기로는
제가 기억하기로는 make32.bat하고 make16.bat가 있어서 그걸로 했던거 같은데요..
그리고 리눅스에서 쓰는 어셈블러는 매크로어셈블러랑 좀 달라서 못쓸거 같네요..
인클루드파일
인클루드파일 못찾는거는 소스가 있는 디렉토리에 인클루드파일을 넣으면 됩니다. 물론 없으면 못합니다.
C처럼 특정경로의 인클루드 파일을 자동으로 찾는 것은 MASM에서는 없는걸로 알고 있습니다.
성공했으면 obj파일이 나옵니다. 이걸 link.exe로 링크 처리하시면 exe파일이 나옵니다.
Written By the Black Knight of Destruction
기억이 가물가물;;;
ml /c /coff 파일이름.asm
link 파일이름.obj
masm은 위처럼 했던 기억이;;;
ddk2000 버젼이나 ddk98은... 저 에러는 못봐본 거라 도움이 되지를 않겠네요;;
ddk 설치하고 위처럼 컴파일 그냥 됬었는데...;;;
아... link 파일만 버젼 높은 놈으로 패치했던 기억이..
----------------------------------------------------------------------
인생 뭐있어? 백수로 사는거야~ 가는거야~
----------------------------------------------------------------------
인생 뭐있어? 백수로 사는거야~ 가는거야~
리눅스에서는 nasm을 쓰세요
리눅스에서 MASM에 가장 근접한 문법을 쓰는 어셈블러는 nasm 정도일 겁니다.
그런데... MASM하고 100% 호환성을 보장하지는 않으니 파일을 좀(?) 고쳐야 할 것 같습니다.
겉모양은 좀
겉모양은 좀 비슷하게 보일지 몰라도 MASM->NASM 컨버팅시 고칠꺼는 엄청나게 많습니다.
큰 차이점 중 하나를 들자면 MASM은 변수명을 쓰면 해당 변수가 가진 값을 액세스해서 가져오지만
NASM에서는 변수명을 일개 주소값으로만 취급합니다. 따라서 NASM은 변수명을 포인터로 해서 액세스할 필요가 있죠.
또 NASM은 변수형 검사를 하지도 않습니다. 8비트크기 db변수에다 32비트 액세스를 해도 어셈오류 없습니다.
예를 들어 var 라는 32비트 변수 (dd) 값을 EAX레지스터로 읽어들이고자 한다면
MASM에서는
하면 var이라는 변수가 가진 값을 EAX로 가져오죠.
하지만 NASM이면
입니다. var이라는 변수명은 걍 주소로 바뀌기 때문에 이것을 []안에 넣어서 주소지정해서 가져와야 합니다.
만일 NASM에서 mov eax,var 하면 var이라는 변수의 주소(어셈블시에 결정되죠)를 eax로 넣습니다.
Written By the Black Knight of Destruction
댓글 달기