ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [ 어셈블리 ] INT 21H에 대한 설명
    Operation System/Embeded System 2009. 5. 24. 10:23

    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 = 에러번호

    출처 : http://www.tbs.sage.or.kr/blog/40

     

Designed by Tistory.