window 7에서 어셈블하고 Debug하기


과제를 하려는데 제 컴퓨터(윈도우7 64bit)에서는 debug도 안되고 masm이 없어서 아무것도 안되서 이것저것 찾아 보았습니다.

더 편한 방법이 있겠지만 급한대로 요긴하게 사용할 수 있을 것 같아 올립니다.


** DOSBOX에서 'link 파일명' 할 때 파일이 있는데 오브젝트파일을 찾을 수 없다는 메세지가 뜰 경우.

-> .obj 파일의 이름은 8글자까지만 link되는 것 같습니다. 

아래 파일을 다운받고 실행은 모두 파일을 저장한 폴더 내에서 실행하셔야 합니다.


debug.exe


link.exe


masm.exe


ml.exe

※ 파일 올린 것에 문제가 있다면 말씀해주시면 바로 삭제하겠습니다.


1. 먼저 cmd에서 어셈블해서 obj 파일을 만들어 줍니다.


2. 실행파일을 만들기 위한 link는 DOSBox에서 실행합니다.

    관련글 

    [어셈] win7 debug 사용방법 - DOSBox 다운, 사용

    [어셈] win7 debug 사용방법

    [어셈] Debug 프로그래밍 - 들어가기, 내용 확인 변경하기

    [어셈] Debug 프로그래밍 - 작성, 실행하기



3. 실행파일이 만들어지면 도스박스에서 디버그해서 확인할 수 있습니다.




A(assemble) : 어셈블 명령를 메모리에 입력하는데 사용

-A <시작 번지> 



시작 번지를 지정해주고 다음 줄부터 명령어를 입력해 주면된다. debug는 모든 숫자를 16진수로 처리하므로 뒤에 'H'를 붙히지 않아도 된다. 하지만 다른 어셈블리어 프로그램에서는 숫자 뒤에 'H'를 붙혀줘야 한다.

※ 100H부터 시작한 이유는 처음 100H(256)바이트는 DOS에 의해 예약되어 있으며 사용자 프로그램이 사용해서는 안된다.


U(unassemble) 명령 : 기계 코드 확인

-U <시작 번지> <끝 번지>

-U <시작 번지> <L 바이트 수> 



메모리에 있는 기계 코드와 어셈블리어를 보여준다. A 명령이 입력한 어셈블리 명령어를 기계코드로 변환하여 메모리제 저장하는 반면, U 명령은 메모리에 저장된 기계코드를 어셈블리 명령으로 변환해 보여준다.


G(go) 명령 : 실행 명령

-G <=시작 번지> <정지 번지(들)> 



시작번지에서부터 정지번지까지의 명령어들을  실행시키는 명령어이다. 위 사진은 g만 입력했으므로 메모리에 저장된 명령어들을 모두 실행한 것이다. 정지 번지에는 10개까지 넣을 수 있으며 각 브레이크 포인트에서 실행을 멈춘다. 

먼저 DOS상태에서 Debug 프로그램으로 들어가기 위해서는 cmd창에서 debug를 입력하면된다.

(윈도우7 64bit는 debug가 되지 않아서 DOSBox를 이용해서 들어가기 때문에 debug.exe로 들어갔다.)

들어가게되면 '-'가 나타나며, 입력을 기다리게 된다. 빠져나오는 방법은 q(quit)를 입력하면 된다.



레지스터의 내용 확인 및 변경하기.

 -r <레지스터 이름>


첫번째 줄 : 범용 레지스터, 포인터 및 인덱스 레지스터의 내용

두번째 줄 : 세그먼트 레지스터의 내용, 명령 포인터의 현재값 및 플래그 레지스터 비트

  두번째 줄의 끝에 'NV UP EI ...NC'는 플래그 레지스터의 8비트의 상태를 나타냄.

세번째 줄 : CS:IP가 가리키는 명령어, 시스템에 따라 다름.


Debug로 처음 들어가면, 범용 레지스터가 0으로 설정되고 플래그 비트도 모두 리셋된다. 

세그먼트 레지스터의 내용은 사용하고 있는 시스템에 따라 다르지만, 모든 세그먼트는 동일한 값을 가지며 이것은 DOS 오퍼레이팅 시스템에 의해 정해졌기 때문에 내용을 바꾸지 말것을 권고한다.


레지스터의 내용 수정방법은 아래 사진으로 확인하기 바란다.




2013/09/05 - [대학 정리노트/어셈블리] - [어셈] win7 debug 사용방법 - DOSBox 다운, 사용


이전 포스트에서 DOSBox를 설치하였다. 입력창에 debug를 쳐도 계속 되지않아서 몇시간째 고민이다.

해결방법은 여러가지였다. 먼저 특별버전인 DOSBox SVN을 설치해서 사용하던지, debug.exe를 받아서 실행하는 방법이 있었고 나는 후자인 현재 받은 DOSBox에서 debug.exe를 사용하는 방법을 선택했다.

먼저 SVN버전을 다운받을수 있는 카페와 다른빌드 사이트이다.


DOSBox SVN DAUM버전

위 카페말고 다운로드 사이트

그 외 다른 빌드


이제 DOSBox에서 debug 사용방법이다. 방법은 아주 간단하다.

먼저 아래 링크를 통해 debug.exe 파일을 받는다.


 debug.exe


압축을 풀고 원하는 폴더에 넣는다. (나는 D 드라이브에 넣었다.)

먼저 D드라이브를 마운트(DOSBox에서 해당 드라이브를 인식?시킨다.)하고 debug.exe를 실행시키면된다.



윈도우7 덕분에 어셈블리공부는 시작도 안했지만 뭐하나 하더라도 어려울것 같다... 우선 차근차근 하나씩 배워나가야겠다.

이번 학기 수업으로 어셈블리언어를 듣게 되었는데 window 7 64bit 에서는 cmd에서 debug가 안된다고 한다. OS를 갈아타긴 좀 무리인가 싶어 DOSBox를 다운받았다. DOS모드에서 실행되던 고전게임을 실행하기 위한 에뮬레이션이라고 하는데 debug가 되니 어셈을 공부하기에 딱인 듯 싶다.


 DOSBox 다운로드(새창)


먼저 처음 실행을 하고나면 아래와 같은 화면이 나온다. 처음에 Z드라이브로 시작되는데 C드라이브(혹은 작업할 드라이브)로 이동하려면 mount c c:\ 를 입력한다.



아래 화면과 같이 마운팅 시키고난 뒤에 c: 를 입력하면 바뀌게 된다. 

dir은 현재 폴더에 있는 파일,폴더 목록을 보여주는 명령어이다.



폴더를 확인하고 cd 폴더명으로 이동하면 된다.

상위폴더로 이동하는 것은 cd.. 이다.



다음 포스팅에는 debug를 해보고 사용방법에 대해서 포스팅하겠다.

+ Recent posts