Computer

[asm] INT 21H

NONE_31D 2019. 10. 1. 23:52

#시작하기 전에, 왜 기존에 썼던게 날아갔는지 모르겠어요. 오프로 정리해뒀던 문서까지 날아가서 멘탈 조금 깨질 것 같네요 야호

 


어셈블리도 다른 언어들이 함수를 미리 선언한 후 사용하는 것처럼 인터럽트를 사용하여 정의한 함수를 호출할 수 있다. INT 21H는 MS-DOS API로, MS-DOS 및 기타 도스 호환 운영 체제에 쓰이는 API이다.도스 API의 대부분은 INT 21H를 통해 호출할 수 있다. 해당 도스 서비스에는 키보드 입력, 비디오 출력, 디스크 파일 접근, 프로그램 실행, 메모리 할당 등이 있다. 

 

도스에 쓰이는 다른 인터럽트 벡터는 다음과 같다. 

인터럽트 내용
20h 프로그램 끝내기
21h 주요 DOS API
22h 프로그램 끝내기 주소
23h  Ctrl-C 핸들러 주소
24h 심각한 오류 핸들러 주소
25h 절대 디스크 읽기
26h 절대 디스크 쓰기
27h 종료 후 상주
28h
유휴 호출
29h 고속 콘솔 출력
2Ah 네트워크 및 중요 섹션
2Bh 사용 안 함
2Ch 사용 안 함
2Dh 사용 안 함
2Eh 임시 항목 다시 불러오기 (Reload transient)
2Fh 다중 송신

 

특히 어셈블리를 쓰면서 21H 서비스를 많이 사용하게 된다. 21H 서비스는 INT 호출시 AH 레지스터에 저장된 값에 따라 호출되는 함수가 달라진다. 

 

21H 서비스 목록

AH 레지스터 내용
00 프로그램 종료
01 표준 입력장치로 한 문자 입력받은 후 출력장치로 출력. AL레지스터에 8비트 문자 리턴
02 한 문자 출력, DL레지스터로 8비트 문자 리턴
03 보조 장치에서 한 문자 입력, AL레지스터에 8비트 문자 리턴
04 보조 장치에서 한 문자 출력, DL레지스터로 8비트 문자 리턴
05 DL레지스터에 저장한 문자를 프린터로 출력 (한 문자)
06 콘솔 장치에 문자 입출력, 제로 플래그에 따라 입력/출력 판단.
07 한 문자 입력, AL에 입력한 문자가 저장됨. (브레이크 감지 X)
08 한 문자 입력, AL에 입력한 문자가 저장됨. (브레이크 감지 O)
09 문자열 출력, 문자열의 끝은 $ 로 판단. DS:DX = 문자열 세그먼트:오프셋
0A 버퍼화된 문자열 입력.
0B 문자열의 입력 상태 검사. AL = 0xFF : 입력된 값 존재 0x00: 입력 없음
0C 입력 버퍼를 비우고, 한 문자 or 문자열을 입력받음.
19 현재 드라이버의 번호를 리턴한다
2C 시스템의 시간을 얻어온다
35 AL에 저장된 번호에 해당하는 인터럽트 벡터의 값을 얻는다.
3B 현재 디렉터리를 바꾼다. DS:DX = 디렉터리 명이 담긴 문자열
3C 파일 생성. DS:DX = 파일 명이 담긴 문자열
3D 파일 오픈 AL = 파일 엑세스 모드
3E 파일 닫기. DX = 파일 핸들

 

아래 링크에서 더 자세한 정보 확인 가능.

 

https://ko.wikipedia.org/wiki/MS-DOS_API#%EB%8F%84%EC%8A%A4%EC%97%90_%EC%93%B0%EC%9D%B4%EB%8A%94_%EC%9D%B8%ED%84%B0%EB%9F%BD%ED%8A%B8_%EB%B2%A1%ED%84%B0

https://ituner.tistory.com/124

 

[ 어셈블리 ] INT 21H에 대한 설명

INT 21H - 01H 키보드로부터 문자를 기다린다. 호출 AH = 01H 리턴 AL = 입력된 문자의 ASCII 코드 INT 21H - 02H 현재의 커서 위치에 문자를 출력한다. 속성은 커서 위치의 문자의 속성에 따른다. 호출 AH = 02H..

ituner.tistory.com

 

'Computer' 카테고리의 다른 글

BOF 기초 정리  (0) 2019.11.27
운영체제 12주차  (0) 2019.11.22
GDB 실습하면서 정리하는 명령어  (0) 2019.09.25
메모리 구조  (0) 2019.09.24
Register - 간단 개념 정리  (0) 2019.09.23