크리에이티브 커먼즈 라이센스

홈페이지HOME

PHP

JavaScript

HTML

CSS

드롭다운메뉴

제로보드4

도   움   말

백지 건강강좌/자가임상체험

물박사(자가면역질환...)^미러

전동명(천연물질사전)^미러

竹田 장승옥(블로그)^글목록

계산환산(계산기)^ 단위변환

관주성경 TTS 일반파일 TTS

바이블로 Bible_ro 다운로드

다운로드>폰에 복사
>파일선택...설치됩니다.

[도움말 보기] 바로가기

개선 요구, 충고는
아래 관리자 연락
전화/메일 부탁 드립니다.
최대한 빨리 처리하고
업데이트 올리겠습니다.


asm_70.






제 70 장  두루물의 이형문 강좌 편집

우선 두루물(go mul) 어셈블리 강좌(17번) 이형문(이전 id는 buju8t, 현재 id는

k2mul, 현재 시솝)님의 원고 차례대로 필자가 재편집하여 소개한다.

필자가 현재 두루물의 강좌 목록과 내용을 검토한 바 두루물 어셈 강좌 중 디버그에

관하여 가장 체계적으로 알기 쉽게 설명해 두신 분이 이형문님이었다.

아래에 소개하는 이형문님의 올린 파일 목록 중 첫번째(4번) 원고는 인사말이므로

생략하고, 5번 원고를 asm_70.txt로 시작하여 번호를 이어 가겠다.

필자가 재편집하여 올리는 각 파일 제목은 약간씩 달라질 수 있다.


go mul

 >> 17

 Assembly 강좌  ()  161/161

(총 125건)

 >> Ls 44

(이하 목록은 필자가 소트하여 오래 된 순서부터 정리함)

4 이형문 buju8t 12/07 2023

 2 안녕하세요!.이형문입니다.

5 이형문 buju8t 12/08 2873

 4 어셈블리를 들어가기 전에....

6 이형문 buju8t 12/11 2979

 6 어셈블러의 사용법 ...1....

9 이형문 buju8t 12/15 1997

 3 어셈블러의 사용법입니다....2....

 10 이형문 buju8t 12/16 1908 14

MOV 명령을 알아 봅시다.

 11 이형문 buju8t 12/17 1481 10

데이타를 두는 방법과 전송방법입니다.

 12 이형문 buju8t 12/18 1253  9

번지의간접지정방식에 대해 알아봅시다

 13 이형문 buju8t 12/21 1189  6

간접지정 방식의 조합법을 알아봅시다.

 14 이형문 buju8t 12/24 1160  4

간접지정방식의 사용법입니다.

 15 이형문 buju8t 12/25 1139  7

EQU , 데이터형과 PTR 연산자에 대해..

 18 이형문 buju8t 12/26 1038 10

ADD 명령과 키 입력 방법에 대해.....

 20 이형문 buju8t 12/28 1479  4

디버거를 알자..COM,EXE의 차이

 21 이형문 buju8t 12/28 1143  3

세그먼트,세그먼트 베이스,오프셋이란

 22 이형문 buju8t 12/28 1251 11

디버거를 알자.. R,U,G,Q 커맨드

 23 이형문 buju8t 12/28 1110  8

디버거를 알자... N,L,T,A 커맨드.

 25 이형문 buju8t 12/29 1049 12

역워드 형식과 ADC 명령....

 27 이형문 buju8t 12/30 957 17  XCHG,SUB,SBB

명령을  알아 봅시다.

 29 이형문 buju8t 12/31 950 12 음수표현에

대해 알아봅시다.

 33 이형문 buju8t 01/07 801  8

곱셈명령을 알자.....MUL,IMUL

 37 이형문 buju8t 01/13 916  9

스트럭처(structure)에 의한 변수의정의

 38 이형문 buju8t 01/13 873 11 나눗셈

명령 DIV,IDIV 를 알아 보자..

 39 이형문 buju8t 01/14 891 11 조건분기명령과

DUP

 41 이형문 buju8t 01/14 905  7

JMP 명령과 예제

 42 이형문 buju8t 01/15 1035 13

플래그 레지스터에 대해.....

 44 이형문 k2mul  01/23 994

16 서브루틴......






필자가 재편집하면서 원본 원고의 내용은 가능한 살리되, 아무래도 전혀 초보자들을

위해서는 약간 더 쉽게 설명할 필요를 느꼈으며 또한 원본 원고가 디버그만으로 작업하는

것을 전제하지 않고 MASM 등 어셈블러 프로그램을 가지고 소스 파일을 어셈블 및

링크하는 것을 전제로 설명하고 있기 때문에, 같은 내용이라도 어셈블러 없이 디버그만

가지고 진행하도록 설명을 바꿀 필요가 있었다.

물론 필자는 도스 이외의 아무 도구가 없는 사람들을 위하여 디버그 하나만으로

작업을 진행하고 있으나, 실제로는 어떤 하나의 어셈블러를 가지고 있는 독자들도

많이 있을 것이므로 이 원고에서는 원작자 이형문님의 원고 내용에서 어셈블러 프로그램

사용 위주로 설명해 둔 내용도 가능한 살려 두려고 한다.

그리고 그 내용에 대하여 어셈블러를 사용해 보지 않은 분도 이해가 가능하도록

좀 더 쉽게 보충 설명을 하는 식으로 진행하겠다.

필자의 욕심이 너무 많은지 모르겠다. 실제로 필자는 어떻게 하면 여러 독자들에게

최선의 요리를 해서 대접할까 밤잠을 설치기가 일쑤이다.

함께 노력해 보기로 하자.


제 1 절  들어가기 전에

어셈블리를 본격적으로 시작하기에 앞서 알아둬야 할 사항을 적어 본다.


 ## 필자통신

이 파일은 이형문님의 다음 원고들을 통합 재편집 및 보충한 것이다.

5 이형문 buju8t 12/08 2873  4 어셈블리를 들어가기

전에....

6 이형문 buju8t 12/11 2979  6 어셈블러의 사용법

...1....

9 이형문 buju8t 12/15 1997  3 어셈블러의 사용법입니다....2....







1. 어셈블리의 필요성


 1. 컴퓨터를 보다 깊게 이해하고 보다 잘 사용하기 위해

 2. 고속 연산 루틴을 작성하기 위해

 3. 다른 언어를 깊이 알기 위해

 4. 고급 언어에서 할 수 없는 조작을 하기 위해


어셈블리를 공부하려면 몇 가지 기본적인 용어에 대하여 알아 둘 필요가 있다.


기계어, 어셈블리 언어, 어셈블, 어셈블러, 의사 명령


기계어는 수치로 기술된 명령을 가리킨다. 사람의 두뇌는 사람의 말을 듣고 이해하지만

PC의 두뇌와 같은 CPU는 수치로 기술된 명령 밖에 이해 할 수 없다. 그러므로 우리가

PC에 어떤 명령을 내리려면 결국 기계어로 명령해야 된다.

그러나 기계어라는 것은 우리 사람에게는 외우기도 어렵고 사용하기도 매우 불편한

것이 아닐 수 없다. 따라서 사람과 기계어의 중간 다리 역할을 하는 무언가가 필요하게

된다. 그것이 바로 어셈블리 언어라는 것이다.


사람(두뇌) - (어셈블리 언어) - (기계어) - PC(CPU)


어셈블리 언어는 기계어 대신에 각각의 기계어와 같은 뜻을 가지되 우리 인간이

알기 쉬운 표기법을 사용하여 표현한 언어이다. 따라서, 인간이 쉽게 아는 어셈블리

언어는 PC가 알아 듣는 수치에 의한 명령(기계어)과 1:1 로 대응한다.

우리 인간은 어셈블리 언어로 프로그램을 작성하는데, 프로그램이란 결국 사람이

PC에게 주는 명령 편지이다. 그 말을 PC는 알지 못하기 때문에 어셈블리 언어로 작성된

내용을 기계어로 변환하는 작업이 당연히 필요하게 된다.

이와 같이 어셈블리 언어를 기계어로 변환하는 작업을 어셈블이라고 한다.

어셈블을 우리 사람이 한다는 것은 역시 피곤하고 어려운 일이다. 그러므로 어셈블을

자동적으로 수행해 주는 프로그램이 필요한데 그것이 어셈블러이다.

한편 우리가 어셈블리 언어로 입력한 모든 내용이 기계어로 번역되지는 않는다.

어셈블리 언어를 기계어로 변환하는 어셈블 과정에서 직접 기계어로 번역되지는

않지만 번역할 때 참조되는 명령이 있으니, 그것을 의사 명령이라고 한다.


 ## 필자통신

의사 명령에 대해서는 지금은 무슨 소린지 잘 모르겠지만, 나중에 저절로 알게

된다. 그 외에도 asm_70. 이후의 원고에는 필자와 같은 프로그래밍 초보자로서 선뜻

충분한 이해가 되지 않는 내용들이 가끔 나오겠지만 뒤의 원고에 가서, 또는 우리

실력이 조금씩 커지면서 자연스럽게 알게 되어 있는 내용들이므로 가볍게 읽고 넘어가기로

하자.







2. 어셈블의 기본 순서

어셈블이란 말의 뜻도 사실은 매우 다양하게 사용되고 있는 것이 현실이다.

우선 넓은 의미에서의 어셈블이 어떤 과정을 포함하는지 알아 보기로 한다.


 1. 프로그램의 설계

 2. EDLIN 등의 에디터에 의한 편집 (소스파일

작성 : SAMPLE.ASM)

 3. MASM 에 의한 어셈블 (오브젝트

파일 : SAMPLE.OBJ)

 4. LINK에 의한 링크  (실행파일

 : SAMPLE.EXE)


좁은 의미의 어셈블이라면, 우선 위의 어셈블 과정에서 보는 바와 같이 소스 파일을

목적(object) 파일로 만드는 작업이 있고, 또 디버그에서 a(어셈블) 명령도 같은

이름으로 쓰이고 있으므로 각각 정확하게 알아 둘 필요가 있다.

프로그램의 설계란 제작자의 구상으로서, 흔히 말하는 구조도나 흐름도 같은 것은

제작자의 구상과 설계를 도와 주는 도구의 하나이다.

링크란 연결이라는 말 뜻 그대로, 자그마한 조각으로 만들어 둔 모듈(프로그램의

작은 단위, 모자이크에서 붙여지는 작은 종이 조각과 같음)을 서로 유기적으로 연결하여

전체로써 하나의 프로그램을 완성하는 작업이다.

링크를 해 주는 프로그램인 link.exe 등을 링커라고 한다.

하나의 프로그램을 개발할 때 몇 개의 소스 파일로 나누어 개발한 후 이것을 각각

어셈블하여 링크하면 하나의 훌륭한 프로그램이 만들어진다.

소위 구조화 프로그래밍이라는 것으로, 처음부터 프로그램을 모듈 단위로 구조화하여

작성하는 습관을 들이는 것은 대단히 유익한 일이다.






3. 라이브러리 파일의 필요성

라이브러리는 기본적인 입출력 루틴등을 처리해 주는 여러 개의 오브젝트 파일들을

하나의 파일로 만들어 둔 것이다.

라이브러리 파일의 필요성을 생각해 보자.


1. 링크시 라이브러리를 지정하는 것만으로 라이브러리 속에서 필요한 오브젝트

파일만 자동으로 꺼내어 결합해 준다.

2. 다수의 오브젝트 파일을 하나의 라이브러리로 정리해 둘 수 있다.

3. 라이브러리에 오브젝트 파일을 추가, 발췌,삭제할 수 있다.


가령 기본적인 입출력을 다루는 모듈은 여러 프로그램 사이에 특별한 차이가 있을

수 없는 경우가 대부분일 것이다. 그와 같이 여러 프로그램에서 일반적으로 널리

사용될 수 있는 모듈들은 종류에 따라 라이브러리를 만들어 두고 사용하는 것이 프로그램의

능률을 극대화해 주는 법이다. 뿐만 아니라 다른 프로그래머가 만들어 공개한 라이브러리를

활용하는 것도 매우 좋은 방법의 하나이다.


4. 디버거의 역할

필자는 도스에 유틸리티로 포함되어 있는 디버거 debug.exe만 사용하여 프로그램을

짤 수 있는 방법을 지금 소개해 나가고 있다.

디버거의 역할은 본래, 프로그램에 버그가 있는 경우 프로그램을 조금씩 실행시키면서

레지스터나 메모리의 내용을 살피며 bug를 잡을 때 이용하는 것이다.

그런데 그것을 역이용하여 간단한 프로그램을 만들 수도 있다.


 ## 필자통신

이 원고 내용 중에는 이와 같이 필자가 asm_00. 이후에 이미 설명해 두었던 내용도

가끔 나올 것이다. 그러나 이 원고의 연결상 또한 원작자의 내용을 손상하지 않는

예의상도 삭제하지 않았지만, 독자의 복습용으로도 충분한 가치가 있을 것이라고

믿는다. 빨리 진행하는 것이 능사가 아니라 확실하게 다져 나가는 것이 결국 지름길이

된다.







5. 어셈블리의 일반적인 유형

어셈블리 프로그래밍에서 명령을 입력하는 일반적인 모양은 다음과 같다.


LI: MOV  AX,

 BX  ;COMMENT

라벨 :  OP코드 제1오퍼렌드  제2오퍼렌드

;설명문

 ______________________

<--

조작의 방향


라벨은 없는 경우가 대부분이고, 꼭 필요한 위치에만 가끔 쓰이는 것이다.

일번적으로 어떤 명령줄에나 OP코드 및 2개의 오퍼랜드가 있는 것이 보통이지만

경우에 따라서는 int 21h와 같이 오펴랜드가 하나 뿐인 경우도 있다.

디버그에서는 int 21과 같이 16진수 표시 h를 붙이지 않아야 되지만, 어셈블리

프로그램의 소스 파일을 만들 때는 반드시 h 표시를 붙여 주어야 된다.

설명문은 붙이지 않아도 무방하지만, 반드시 붙이는 습관을 들이는 것이 좋다.

시간이 지나면 프로그램을 만든 제작자 자신도 무슨 용도로 그런 명령을 입력해

두었는지 기억하지 못하는 경우가 허다하기 때문이다.

각 항목에 대하여 좀 더 자세하게 정리해 보기로 하자.

라벨은 입력한다면 항상 그 줄의 제일 앞에 입력해 주어야 된다. 라벨은 필요에

따라 붙이는 것으로 안 붙여도 상관 없다. 라벨과 같은 줄에서 라벨 뒤에 작동 코드(OP코드)를

입력하려면 : 을 사용해 구별한다. 위의 LI:가 이에 해당한다.

OP코드(작동코드)는 그 줄의 주된 명령어라고 생각하면 된다.

오퍼랜드는 OP코드의 명령 대상이 되는 것(레지스터, 메모리, 수치 등)이다.

두 개의 오퍼랜드가 입력된 경우 명령의 조작은 뒤에 나오는 제 2 오퍼랜드로부터

앞에 있는 제1 오퍼랜드의 방향으로 이루어진다.

위의 예에서는 BX 레지스터의 내용이 AX 레지스터에 전송(MOVe)된다.

설명문은 필요에 따라 붙이며 오퍼렌드와의 사이에 세미콜론(;)을 둔다.

각 줄의 처음이든 중간이든 일단 세미콜론(;)이 나타나면 그 줄에서 세미콜론을

포함하여 그 이후의 모든 내용은 설명문으로 취급되어 어셈블에서 제외된다.

따라서 결국, 위의 예와 같은 내용으로 라벨 따로 설명문 따로 작성해도 된다.


LI:

MOV

 AX, BX

;COMMENT







6. 소스 파일 작성

다음의 예제를 에디터로 똑 같이 작성한 후 MOV1.ASM이라는 파일로 저장하자.


 ## 필자통신

다음의 예제 소스 파일은 MASM과 같은 어셈블리 프로그램으로 어셈블 및 링크를

하기 위한 소스 파일이다.


소스 내용 중간에 세미콜론(;)으로 시작하는 빈 줄은 설명문을 삽입하기 위해서도

필요하겠지만 프로그램의 모양을 보기 좋게 구분하는 역할도 한다.


MAIN  SEGMENT

ASSUME  CS:MAIN

;

MOV DL,41H

MOV AH,2

INT 21H

MOV DL,'B'

MOV BL,2

MOV AH,BL

INT 21H

;

MOV AH,4CH

INT 21H

;

MAIN  ENDS

END


우리가 디버그에서 프로그램을 작성한 것보다는 약간 복잡하게 보인다.






그러나 다른 점은 시작 부분과 끝 부분 정도이며 그리 복잡한 것도 아니다.


MAIN  SEGMENT

ASSUME  CS:MAIN

.......................

MAIN  ENDS

END


지금은 어셈블리 소스 파일에서는 시작 부분과 끝 부분을 위와 같은 모양으로

입력해 주는구나 하는 정도로만 생각하고 넘어가기로 하자.

그 중간의 내용은 우리가 디버그에서 작성하는 내용과 전혀 같으며, 단지 다른

점이 있다면 16진수 표시 h를 반드시 붙여 준다는 점 하나 뿐이다.

그와 달리 우리가 디버그로 프로그램을 만들 때는 h를 붙이면 안 된다.


MOV DL,41

MOV AH,2

INT 21

MOV DL,'B'

MOV BL,2

MOV AH,BL

INT 21

MOV AH,4C

INT 21


내용을 잘 보면 3개의 int 21h 명령으로 구분이 될 것이다.






각 명령의 자세한 설명은 이어지는 장에서 나온다.

그러나 독자의 이해를 돕기 위하여 필자가 약간의 보충 설명을 하겠다.

우선 디버그를 시작하고 3단계로 나누어 프로그램을 만들면서 실행해 보자.


...> debug <Enter>

- a <Enter>

????:0100 mov dl,

41 <Enter>

????:0102 mov ah,

2 <Enter>

????:0104 int 21

<Enter>

????:0106 int 20

<Enter>

????:0108 <Enter>

- g <Enter>

A

Program terminated normmally

-


영문 대문자 A의 아스키 코드를 dl 레니스터에 저장하고 int 21h 명령의 ah 2

루틴을 호출하기 위해 ah 레지스터에 02h를 저장하였다.

따라서 int 21h가 실행되어 대문자 A가 화면에 출력되었으며, 그 다음에는 int

20h 명령으로 프로그램의 실행이 종료되고 ip 레지스터는 다시 0100으로 복귀되었다.

그 사실은 r<Enter> 명령으로 간단히 확인해 볼 수 있을 것이다.


 ## 주의

이미 다 설명한 것이지만, 끝에 int 20h 명령을 빠뜨리고 g<Enter>로 실행해서는

안 되므로 극히 주의해야 된다.







다음 부분을 계속해서 어셈블해 보자.


- a106 <Enter>

????:0106 mov dl,

'B' <Enter>

^ Error

????:0106


디버그에서는 어셈블러 소스와 같이 따옴표 안에 직접 문자 입력이 되지 않고

에러가 발생하는 것을 확인하게 되었다.

따라서 대문자 B의 아스키 코드값 42h를 전송하는 도리 밖에 없을 것이다.

이런 부분을 하나씩 부딛치게 되면 어셈블러의 필요성을 절감하게 된다.


????:0106 mov dl,

42 <Enter>

????:0108 mov bl,

2 <Enter>

????:010A mov ah,

bl <Enter>

????:010C int 21

<Enter>

????:010E int 20

<Enter>

????:0110 <Enter>

- g

AB

Program terminated normmally

-


앞에서보다 약간 복잡하게 보이는 것은 02h라는 수치를 ah 레지스터에 바로 전송하지

않고 먼저 bl 레지스터에 저장했다가 다시 ah 레지스터로 전송했기 때문일 뿐이며,

dl 레지스터에 문자 B의 아스키 코드값을 저장하고 int 21h 명령으로 ah=02h 루틴을

호출하여 그 문자를 화면에 출력한 과정은 동일하다.






이 부분에서 원작자가 보여 주려고 한 것은 수치를 직접 레지스터로 전송하는

방법 외에 다른 레지스터에 저장된 값을 목적 레지스터로 전송하는 방법도 가능하다는

사실을 실증적으로 이해시키려고 한 것으로 생각된다.

많은 생각들이 들겠지만 다음으로 계속 작업을 진행하자.


- a 10e <Enter>

????:010E mov ah,

4c <Enter>

????:0110 int 21

<Enter>

????:0112 <Enter>

- g <Enter>


결과는 직접 실행하여 확인해 보라.

디버그 프롬프트가 사라지고 도스 프롬프트로 빠져 나올 것이다.

마지막에 int 20h를 입력하지 않은 이유는 int 21h 명령의 ah=4ch 루틴이 프로그램을

끝내고 도스로 나가는 기능을 하기 때문이다.

나머지 궁금한 생각들은 다음 장 이후의 설명에서 해결하기로 한다.






7. 소스 파일의 어셈블

설명은 다시 에디터로 소스 파일을 만든 부분에서 이어진다.

이렇게 에디터로 작성한 파일을 소스 파일이라고 한다.

우선 매크로 어셈블리를 기동시켜 보자.


C: MASM >  MASM  <Enter>

..................

 .................


SOURCE FILENAME  [  .ASM]: MOV1  <Enter>

OBJECT FILENAME  [MOV1.OBJ]: <Enter>

SOURCE LISTING [NUL.LST]: MOV1 <Enter>

CROSS  REFERENCE [NUL.CRF]: MOV1 <Enter>


C: MASM >


MASM을 시작하면 소스 파일, 오브젝트 파일, 소스 리스팅, 크로스 레퍼런스라는

각 파일의 이름을 입력하라는 메시지가 한 줄씩 출력될 것이다.

소스 파일에 대해서는 이미 알고 있으므로 나머지를 하나씩 정리해 보자.

오브젝트 파일은 어셈블의 결과 출력되는 기계어의 중간 형태이다.

소스 리스팅은 소스 파일과 어셈블의 결과 출력된 기게어를 대응시킨 리스트 파일이며,

변수 이름 등의 번지에 대한 일람표나 에러가 있다면 에러 메시지도 포함하여 기록한다.

크로스 레퍼런스는 라벨이나 변수이름이 어디서 정의되어 어디에서 참조되고 있는가를

보여 주는 파일이다. 이 파일은 에디터 등으로는 볼 수없고 CREF를 이용해 파일을

변환시킨 후에야 볼 수 있다.







 ## 필자통신

설명 중 무슨 말인지 잘 모르겠다는 부분이 가끔 나올 것이다. 필자도 마찬가지의

처지이므로 그냥 읽고 넘어가기 바란다. 만약 반드시 완전하게 이해하고 넘어가지

않으면 안 될 내용이라고 생각되면 필자가 늘상 그랬듯이 밤을 새워서라도 충분히

설명을 하고 넘어간다.



8. 오브젝트 파일의 링크

링크는 직접 만든 몇 개의 오브젝트 파일을 합쳐서 하나의 프로그램으로 만들기도

하고, 제작자의 오브젝트 파일에 덧붙일 필요가 있는 루틴을 라이브러리로부터 꺼내어

결합하는 작업이며, 그 일을 해 주는 프로그램이 링커이다.

여기에서는 라이브러리를 결합할 필요는 없다.


 C>LINK <Enter>

 ..............................

 ...............................




OBJECT MODULES [.OBJ]:MOV1  <Enter>

RUN FILE [MOV1.EXE]: <Enter>

LIST FILE [NUL.MAP]:MOV1 <Enter>

LIBRARIES[.LIB]:  <Enter>


화면에 나타난 내용을 하나씩 검토해 보기로 한다.

오브젝트 모듈(object modules)은 소스 파일을 어셈블한 결과 출력된 오브젝트

파일을 가리키며, 다른 모듈과 결합할 필요가 있을 때는 "+" 를 사용한다.


OBJECT MODULES [.OBJ]: MOV1 + MOV2 + MOV3 <Enter>


실행 파일(run file)은 링커에 의해 만들어질 실행 가능한 파일을 가리키며, 우리의

목적은 바로 이 실행 파일을 얻는 데 있다. 실행 파일은 기본적으로 그 이름을 [MOV1.EXE]와

같이 출력해 주므로 특별히 다른 이름으로 만들 생각이 없다면 그 줄에서는 단지

<Enter>만 입력하고 넘어가도 된다.

리스트 파일(list file)은 실행 가능한 파일 중에서 세그먼트나 프로시저의 번지나

길이를 리스트한 것이다. 리스트 파일을 만들어 두면, 큰 프로그램을 디버그할 때

소스 프로그램 중에 선언된 세그먼트가 실행 가능 파일 중 어디에 위치하는가를 알

수 있어서 편리 하다.

이 프로그램에서는 라이브러리(libraries)를 결합할 필요가 없기 때문에 그 줄에서는

그냥 <Enter>만 치고 끝낸 것이다.






9. 배치 어셈블

소스 파일을 어셈블하고 그 결과 만들어진 오브젝트 파일을 다시 링크하는 일련의

작업을 일일이 키보드로 입력하다 보면 피곤해진다.

다음과 같은 배치 파일을 만들어 asm.bat(다른 이름을 사용해도 된다)라는 이름으로

저장해 두고 사용하면 매우 편리하게 작업할 수 있을 것이다.


...> copy con asm.bat <Enter>

MASM %1,,%1; <Enter>

LINK  %1 ; <Enter>

^Z*

Ctrl + z *

1 file(s) copied...

...>


이제 다음과 같이 간단히 어셈블 및 링크하여 실행 파일을 만들 수 있다.


...> ASM MOV1 <Enter>




     ## 필자통신

욕심을 부려 자세하게 쓰자면 한이 없다. 너무 진도가 나가지 못하는 것도 우리

모두의 손해가 되므로 지나치게 상세한 셜명은 지양하기로 한 점 양해해 주기 바란다.

만약 설명에 어려운 점이 있으면 언제라도 메일 또는 전화를 기다리겠다. 필자는

몰라서 답답한 사람의 전화를 받으면 몇십 분이나 1시간 이상 계속해서라도 설명을

해 주고 있다.




ID:
PW:

     0 분
     2 분

자유게시판

건강백과 HOME

홈페이지 HOME

조   약     HOME

생활지혜 HOME

서식양식 HOME

법원 전산양식 검색

In Na zum

비공개 HOME

백과넷 포탈 : 건강/법률(메인)/홈피/서식/조약/생활지혜

◁ 2002.9.1.~2021.4.11. ▷

관리자 연락(저작권 의심 신고) : 김병희 010-6204-4973 k8z7@hanmail.net