본문 바로가기

Programming Language/Assembly

MS-DOS API로 배우는 어셈블리어

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

윈도우에 Windows API가 있다면, MS-DOS에는 MS-DOS API가 있습니다. 차이가 있다면 WinAPI는 C언어로 된 반면, MS-DOS API는 어셈블리어를 사용한다는 차이가 있겠지요.
WinAPI에서는 함수를 호출하는 방식으로 API를 사용하지만, MS-DOS API는 레지스터에 특정 값을 넣고, 인터럽트를 발생시키는 방식으로 API를 사용합니다.

MS-DOS API의 인터럽트


인터럽트 벡터설명버전비고
20h 프로그램 끝내기 1.0 이상 도스 커널에 추가됨
21h 주요 도스 API 1.0 이상 도스 커널에 추가됨
22h 프로그램 끝내기 주소 1.0 이상 프로그램 호출시 주소 반환
23h Control-C 핸들러 주소 1.0 이상 기본 핸들러는 도스 셸에 있음 (일반적으로 COMMAND.COM)
24h 심각한 오류 핸들러 주소 1.0 이상 기본 핸들러는 도스 셸에 있음 (일반적으로 COMMAND.COM)
25h 절대 디스크 읽기 1.0 이상 도스 커널에 추가됨, 도스 3.31에서 강화되어 최대 2 GB 파티션 지원
26h 절대 디스크 쓰기 1.0 이상 도스 커널에 추가됨, 도스 3.31에서 강화되어 최대 2 GB 파티션 지원
27h 종료 후 상주 1.0 이상 도스 1.0 및 도스 2.0 이상의 도스 커널에서 COMMAND.COM에 추가됨
28h 유휴 호출 2.0 이상 입력을 기다릴 때 도스 커널이 호출함
29h 고속 콘솔 출력 2.0 이상 내장 콘솔 장치 드라이버나, ANSI.SYS와 같은 대안 드라이버에 의해 추가됨
2Ah 네트워크 및 중요 섹션 3.0 이상 네트워크 소프트웨어와의 상호 작용을 목적으로 도스 커널이 호출함
2Bh 사용 안 함
2Ch 사용 안 함
2Dh 사용 안 함
2Eh 임시 항목 다시 불러오기(Reload transient) 2.0 이상 COMMAND.COM에 추가됨
2Fh 다중 송신 3.0 이상 하부 함수 번호에 따라 도스 커널 및
다양한 프로그램(PRINT, MSCDEX, DOSKEY, APPEND 등)에 추가됨

출처: http://ko.wikipedia.org/wiki/MS-DOS_API

이상 16개의 소프트웨어적인 인터럽트가 제공되지만, 그 중에서 가장 많이 쓰이는 것은 INT 21H입니다. INT 21H는 AH 레지스터의 값에 따라 다음과 같이 기능이 분화됩니다.

AH 레지스터에 따른 INT 21H의 기능


AH 설명 버전
00h 프로그램 끝내기 1.0 이상
01h 문자 입력 1.0 이상
02h 문자 출력 1.0 이상
03h 보조 입력 1.0 이상
04h 보조 출력 1.0 이상
05h 프린터 출력 1.0 이상
06h 직접 콘솔 입출력 1.0 이상
07h echo 없이 직접 콘솔 입력 1.0 이상
08h echo 없이 콘솔 입력 1.0 이상
09h 문자열 표시 1.0 이상
0Ah 버퍼 처리된 키보드 입력 1.0 이상
0Bh 입력 상태 가져오기 1.0 이상
0Ch 입력 버퍼 및 입력 플러시(flush) 처리 1.0 이상
0Dh 디스크 초기화 1.0 이상
0Eh 기본 드라이브 설정 1.0 이상
0Fh 파일 열기 1.0 이상
10h 파일 닫기 1.0 이상
11h 첫 번째 파일 찾기 1.0 이상
12h 다음 파일 찾기 1.0 이상
13h 파일 삭제 1.0 이상
14h 연속 읽기 1.0 이상
15h 연속 쓰기 1.0 이상
16h 파일 만들기/끊기 1.0 이상
17h 파일 이름 변경 1.0 이상
18h 예비 1.0 이상
19h 기본 드라이브 가져오기 1.0 이상
1Ah 디스크 전송 주소 설정 1.0 이상
1Bh 기본 드라이브에 대한 할당 정보 가져오기 1.0 이상
1Ch 지정된 드라이브에 대한 할당 정보 가져오기 1.0 이상
1Dh 예비 1.0 이상
1Eh 예비 1.0 이상
1Fh 기본 드라이브에 대한 디스크 변수 블록 가져오기 1.0 이상
20h 예비 1.0 이상
21h 랜덤 읽기 1.0 이상
22h 랜덤 쓰기 1.0 이상
23h 레코드의 파일 크기 가져오기 1.0 이상
24h 랜덤 레코드 번호 설정 1.0 이상
25h 인터럽트 벡터 설정 1.0 이상
26h PSP 만들기 1.0 이상
27h 랜덤 블록 읽기 1.0 이상
28h 랜덤 블록 쓰기 1.0 이상
29h 파일 이름 분석(Parse) 1.0 이상
2Ah 날짜 가져오기 1.0 이상
2Bh 날짜 설정 1.0 이상
2Ch 시간 가져오기 1.0 이상
2Dh 시간 설정 1.0 이상
2Eh 유효 플래그 설정 1.0 이상
2Fh 디스크 전송 주소 가져오기 2.0 이상
30h 도스 버전 가져오기 2.0 이상
31h 종료 후 상주 2.0 이상
32h 지정된 드라이브에 대한 디스크 변수 블록 가져오기 2.0 이상
33h Ctrl-Break 가져오기 또는 설정 2.0 이상
34h InDOS 플래그 포인터 가져오기 2.0 이상
35h 인터럽트 벡터 가져오기 2.0 이상
36h 디스크 남은 공간 가져오기 2.0 이상
37h 스위치 문자 가져오기 또는 설정 2.0 이상
38h 국가 정보 가져오기 또는 설정 2.0 이상
39h 하위 디렉터리 만들기 2.0 이상
3Ah 하위 디렉터리 제거 2.0 이상
3Bh 현재 디렉터리 변경 2.0 이상
3Ch 파일 만들기 또는 끊기 2.0 이상
3Dh 파일 열기 2.0 이상
3Eh 파일 닫기 2.0 이상
3Fh 파일 또는 장치 읽기 2.0 이상
40h 파일 또는 장치 쓰기 2.0 이상
41h 파일 삭제 2.0 이상
42h 파일 포인터 이동 2.0 이상
43h 파일 특성 가져오기 또는 설정 2.0 이상
44h 장치에 대한 입출력 제어 2.0 이상
45h 핸들 복제 2.0 이상
46h 핸들 우회 2.0 이상
47h 현재 디렉터리 가져오기 2.0 이상
48h 메모리 할당 2.0 이상
49h 메모리 해제 2.0 이상
4Ah 메모리 다시 할당 2.0 이상
4Bh 프로그램 실행 2.0 이상
4Ch 반환 코드로 끝내기 2.0 이상
4Dh 프로그램 반환 코드 가져오기 2.0 이상
4Eh 첫 번째 파일 찾기 2.0 이상
4Fh 다음 파일 찾기 2.0 이상
50h 현재의 PSP 설정 2.0 이상
51h 현재의 PSP 가져오기 2.0 이상
52h 도스 내부 포인터 가져오기 (SYSVARS) 2.0 이상
53h 디스크 변수 블록 만들기 2.0 이상
54h 유효 플래그 가져오기 2.0 이상
55h 프로그램 PSP 만들기 2.0 이상
56h 파일 이름 변경 2.0 이상
57h 파일 날짜 및 시간 가져오기 또는 설정 2.0 이상
58h 할당 전략 가져오기 또는 설정 2.11 이상
59h 확장 오류 정보 가져오기 3.0 이상
5Ah 고유 파일 만들기 3.0 이상
5Bh 파일 새로 만들기 3.0 이상
5Ch 파일 잠금 / 잠금 해제 3.0 이상
5Dh 파일 공유 기능 3.0 이상
5Eh 네트워크 기능 3.0 이상
5Fh 네트워크 우회 기능 3.0 이상
60h 파일 이름 제한 3.0 이상
61h 예비 3.0 이상
62h 현재의 PSP 가져오기 3.0 이상
63h DBCS 리드 바이트 테이블 포인터(lead byte table pointer) 가져오기 3.0 이상
64h 외부 이벤트 플래그 대기 설정 3.2 이상
65h 확장 국가 정보 가져오기 3.3 이상
66h 코드 페이지 가져오기 또는 설정 3.3 이상
67h 핸들 수 설정 3.3 이상
68h 파일 위탁(commit) 3.3 이상
69h 미디어 ID 가져오기 또는 설정 4.0 이상
6Ah 파일 위탁(commit) 4.0 이상
6Bh 예비 4.0 이상
6Ch 파일 확장 열기/만들기 4.0 이상

'Programming Language > Assembly' 카테고리의 다른 글

점프 명령어 JMP  (0) 2013.04.06
두 번째 예제: Hello, World!  (0) 2013.03.31
첫 예제: 1개의 문자 출력  (0) 2013.03.31
MASM PWB 사용하기  (0) 2013.03.31
MASM 설치하기 (MS-DOS 버전)  (0) 2013.03.31