본문 바로가기
어셈블리어 공부용/x86 어셈블리어(ASSEMBLY)

어셈블리어 INT 21h 정리

by Redoutable 2019. 8. 17.
반응형

INT 21H - 01H

키보드로부터 문자를 기다린다.

호출

AH = 01H

리턴

AL = 입력된 문자의 ASCII 코드

INT 21H - 02H

현재의 커서 위치에 문자를 출력한다. 속성은 커서 위치의 문자의 속성에 따른다.

호출

AH = 02H

DL = 문자의 ASCII 코드

INT 21H - 07H

키보드로부터 한 문자를 에코없이 입력받는다.

호출

AH = 07H

리턴

AL = 1byte의 ASCII 코드

INT 21H - 09H

문자열을 화면으로 출력한다.

호출

AH = 09H

DS:DX = 문자열의 세그먼트와 오프셋

INT 21H - 0AH

키보드로부터 리턴키가 들어올때 까지 입력받은 문자를 버퍼에 저장한다.

AH = 0AH

DS:DX = 버퍼의 서그먼트와 오프셋

INT 21H - 19H

현재 드라입의 번호를 리턴한다.

호출

AH = 19H

리턴

AL = 드라이브 번호(0=A, 1=B, 2=C, 3=D, ...)

INT 21H - 25H

인터럽트 번호에 해당하는 입터럽트 백터의 내용을 바꾼다.

호출

AH = 25H

AL = 인터럽트 번호

DS:DX = 새로운 인터럽트 백터의 내용(세그먼트와 오프셋)

INT 21H - 2AH

시스템 날짜를 얻는다.

호출

AH = 2AH

리턴

CX = 년(1980~2099)

DH = 월(1~12)

DL = 일(1~31)

AL = 요일을 반환(0=Sun, 1=Mon)

INT 21H - 2BH

시스템의 날자를 설정한다.

호출

AH = 2BH

CX = 년(1980~2099)

DH = 월(1~12)

DL = 일(1~31)

리턴

호출이 성공하면 AL = 00H

호출이 실패하면 AL = FFH

INT 21H - 2CH

시스템의 시간을 얻어온다.

호출

AH = 2CH

리턴

CH = 시(0~23)

CL = 분(0~59)

DH = 초(0~59)

DL = 100분의 1초(0~99)

INT 21H - 2DH

시스템의 시간을 설정한다.

호출

AH = 2DH

CH = 시(0~23)

CL = 분(0~59)

DH = 초(0~59)

DL = 100분의 1초(0~99)

리턴

호출이 성공하면 AL = 00H

호출이 실패하면 AL = FFH

INT 21H - 35H

인터럽트 번호에 해당하는 인터럽트 백터의 값(리턴할 주소)을 얻는다.

호출

AH = 35H

AL = 인터럽트 번호

리턴

ES:BX = 인터럽트 백터의 내용(리턴할 주소의 세그먼트와 오프셋)

INT 21H - 36H

드라이브의 할당 정보를 얻는다.

호출

AH = 36H

DL = 드라이브 번호(0=Default, 1=A)

리턴

호출이 성공하면

AX = 클러스터당 섹터수

BX = 이용가능한 공간의 클러스터 수

CX = 섹터당 바이트수

DX = 드라이브당 클러스터 수

호출이 실패하면 AX = FFFFH

INT 21H - 3BH

현재의 디렉터리를 바꾼다.

호출

AH = 3BH

DS:DX = 디렉터리 이름이 담긴 ASCII 문자열의 세그먼트와 오프셋

리턴

호출이 성공하면 carry flag = 0

호출이 실패하면 carry flag = 1, AX = 에러번호

INT 21H - 3CH

파일을 만든다.

호출

AH = 3CH

CX = 속성 (00=normal, 01=readonly, 02=hidden, 03=system)

DS:DX = 파일 이름의 ASCII 문자열의 세그먼트와 오프셋

리턴

호출이 성공하면 carry flag = 0, AX = 파일 핸들

호출이 실패하면 carry flag = 1, AX = 에러번호

INT 21H - 3DH

파일 핸들에 따라 파일을 오픈한다.

AH = 3DH

AL = 파일의 엑세스 모드

파일 엑세스 모드

8비트로 구성

7 bit : 파일 핸들의 인계(0=자프로세스로 파일 핸들이 인계, 1=파일 핸들이 현재 프로세스에 존재)

4~6 bit : 분할모드(000=FCB오픈과 호환모드, 001=입출력 불가능, 010=출력 불가능, 011=입력 불가능, 100=모두 불가능)

3 bit : reserved

0~2 bit : (000=입력 엑세스, 001=출력 엑세스, 010=입출력 엑세스)

DS:DX = 파일명의 ASCII 문자열의 세그먼트와 오프셋

리턴

호출이 성공하면 carry flag = 0, AX = 파일 핸들

호출이 실패하면 carry flag = 1, AX = 에러번호

INT 21H - 3EH

파일을 닫는다.

호출

AH = 3EH

DX = 파일 핸들

리턴

호출이 성공하면 carry flag = 0

호출이 실패하면 carry flag = 1, AX = 에러번호

INT 21H - 3FH

파일 핸들을 이용하여 파일에서 자료를 읽는다.

호출

AH = 3FH

BX = 파일 핸들

CX = 읽을 바이트수

DS:DX = 읽어들인 자료가 저장될 버퍼의 세그먼트와 오프셋

리턴

호출이 성공하면 carry flag = 0, AX = 읽어들인 바이트 수

호출이 실패하면 carry flag = 1, AX = 에러번호

INT 21H - 40H

파일 핸들을 이용하여 파일에 자료를 쓴다.

호출

AH = 40H

BX = 파일 핸들

CX = 쓸 바이트수

DS:DX = 쓸 자료가 저장되어 있는 버퍼의 세그먼트와 오프셋

리턴

호출이 성공하면 carry flag = 0, AX = 쓴 바이트 수

호출이 실패하면 carry flag = 1, AX = 에러번호

INT 21H - 42H

파일의 현재 포인터를 옮긴다.

호출

AH = 42H

AL = (00H=파일의 시작에서부터, 01H=현재 포인터부터, 02H=화일의 끝에서부터)

BX = 파일 핸들

CX = 파일 포인터를 옮길 거리의 상위 워드

DX = 파일 포인터를 옮길 거리의 하위 워드

리턴

호출이 성공하면 carry flag = 0, DX = 옮겨진 파일 포인터의 상위워드, AX = 옮겨진 파일 포인터의 하위워드

호출이 실패하면 carry flag = 1, AX = 에러번호

INT 21H - 43H

화일의 속성을 얻거나 새로운 속성으로 변경한다. 디스크상의 절대 섹터를 읽어들인다.

호출

AH = 43H

AL = (00H=파일의 속성을 얻는다, 01H=파일의 속성을 변경한다)

CX = 만일 AL=01H라면 화일의 새로운 속성

5 bit = archive

2 bit = system

1 bit = hidden

0 bit = readonly

DS:DX = 파일명의 ASCII 문자열의 세그먼트와 오프셋

리턴

호출이 성공하면 carry flag = 0, CX = 파일의 속성

호출이 실패하면 carry flag = 1, AX = 에러번호

INT 21H - 4BH

다른 프로그램을 실행한다.

호출

AH = 4BH

AL = 부함수(00H=프로그램을 실행, 03H=오버레이 프로그램을 메모리에 올림)

ES:BX = 파라메터 블럭의 세그먼트와 오프셋

DS:DX = 실행 파일 이름의 세그먼트와 오프셋

리턴

호출이 성공하면 carry flag = 0

호출이 실패하면 carry flag = 1, AX = 에러번호

AL=00H 일때 파라메터 블럭의 내용

00H~01H = 환경 블럭의 세그먼트

02H~03H = 명령어 꼬리의 오프셋

04H~05H = 명령어 꼬리의 세그먼트

06H~07H = 자프로세서의 PSP에 복사될 첫번째 FCB의 오프셋

08H~09H = 첫번째 FCB의 세그먼트

0AH~0BH = 두번째 FCB의 오프셋

0CH~0DH = 두번째 FCB의 세그먼트

INT 21H - 4EH

ASCII 문자열에 따라 파일을 찾는다.

호출

AH = 4EH

CX = 찾을 파일의 속성

DS:DX = ASCII 문자열의 세그먼트와 오프셋

리턴

호출이 성공하면 carry flag = 0, 현재 DTA의 내용이 다음과 같이 변경된다.

0~20 byte = reserved

21 byte = 찾은 파일의 속성

22~23 byte = 파일이 생성, 변경된 시간(bit : 0BH~0FH=시, 05H~0AH=분, 00H~04H=2초단위 초)

24~25 byte = 파일이 생성, 변경된 날짜(bit : 09H~0FH=년, 05H~08H=월, 00H~04H=일)

26~29 byte = 파일의 크기

30~42 byte = ASCII 문자열의 파일 이름과 확장자

호출이 실패하면 carry flag = 1, AX = 에러번호

INT 21H - 4FH

4EH가 수행되고 난 후 계속해서 파일을 찾을 떄 사용한다. 그러므로 이 인터럽트를 사용하기 위해서는 4EH를 먼저 사용해야 한다.

호출

AH = 4FH

리턴

호출이 성공하면 carry flag = 0

0~20 byte = reserved

21 byte = 찾은 파일의 속성

22~23 byte = 파일이 생성, 변경된 시간(bit : 0BH~0FH=시, 05H~0AH=분, 00H~04H=2초단위 초)

24~25 byte = 파일이 생성, 변경된 날짜(bit : 09H~0FH=년, 05H~08H=월, 00H~04H=일)

26~29 byte = 파일의 크기

30~42 byte = ASCII 문자열의 파일 이름과 확장자

호출이 실패하면 carry flag = 1, AX = 에러번호

 

SOURCE:

 

 

어셈블리 언어

데이터 형식 타입 설명 BYTE 8비트 부호 없는 정수 SBYTE 8비트 부호 있는 정수 WORD 16비트 부호 없는 정수 SWORD 16비트 부호 있는 정수 DWORD 32비트 부호 없는 정수 SDWORD 32비트 부호 있는 정수 FWORD 48비..

ituner.tistory.com

 

반응형

댓글