장 – 6
컴퓨터 기초 소개
소개
어떤 경우에는 데이터를 복구하려고 하거나 데이터 및 디스크 문제 해결 작업(또는 다른 시스템 관련 작업일 수 있음)을 수행할 때 DOC의 DEBUG 명령을 사용하는 것이 매우 편리합니다.
또한 특정 경우에 DEBUG를 사용하여 프로그래밍한 다음 특정 작업을 쉽게 수행할 수 있다고 생각할 수도 있습니다. 예를 들어 보겠습니다. 다음 디버그 코딩은 DBR을 백업하기에 충분합니다. 다음 줄을 입력하기만 하면 됩니다.
DEBUG BKDBR.BIN
L 100 2 0 1
R CX
200
W
Q
여기에서 위의 몇 줄만 입력하면 프로그램 작성을 피할 수 있음을 알 수 있습니다. DBR의 백업 복사본을 디스크에 로드하는 코딩의 또 다른 예를 살펴보겠습니다.
항상 기억하십시오! 완전한 지식 없이 이것을 시도하지 마십시오. 무엇을 할 것인지 확인하십시오. 다음 지침을 부주의하게 사용하면 디스크의 모든 정보에 액세스할 수 없게 될 수 있으므로 지침을 잘못 사용하면 빅 데이터 손실이 발생할 수 있습니다.
DEBUG BKDBR.BIN
W 100 2 0 1
Q
이 예제의 코딩을 보면 가장 필요할 때 얼마나 도움이 될지 쉽게 짐작할 수 있습니다. 또한 모든 상황에서 프로그래밍을 할 수 있는 것은 아닙니다. 그러나 문제의 간단한 경우의 한계 내에서 어셈블리 지침을 사용하려면 부트 디스크에 있는 debug.exe/debug.com을 복사하고 코드 작성을 시작하기만 하면 됩니다.
이 장과 이 책에서 설명하는 기능과 예제는 x86 인텔 프로세서 제품군 아키텍처와만 호환됩니다.
우선 다음 섹션에서 사용되는 용어를 이해하고 다양한 단계의 기능과 예를 설명하기 위해 컴퓨터 아키텍처 기본 사항에 대한 약간의 지식이 필요합니다. 몇 가지 컴퓨터 아키텍처 기본 사항을 알려주십시오.
기본 컨셉
중앙 프로세서
이 부분은 중앙 처리 장치 또는 CPU라고도 하며 제어 장치와 산술 및 논리 장치로 구성됩니다. 그 기능은 메모리 셀의 내용을 읽고 쓰고, 메모리 셀과 특수 레지스터 간에 데이터를 전달하고, 프로그램의 명령을 디코딩 및 실행하는 것으로 구성됩니다. 프로세서에는 매우 자주 사용되는 일련의 메모리 셀이 있으므로 CPU의 일부입니다.
이 셀은 레지스터 이름으로 알려져 있습니다. 프로세서에는 이러한 레지스터가 한두 개 정도 있을 수 있습니다. CPU의 산술 및 논리 장치는 숫자 및 기호 계산과 관련된 연산을 실현합니다.
일반적으로 이러한 장치는 두 정수의 덧셈과 뺄셈, 정수 곱셈과 나눗셈, 레지스터 비트 처리, 두 레지스터 내용 비교와 같은 매우 기본적인 연산만 수행할 수 있습니다. 개인용 컴퓨터는 단어 크기, 즉 프로세서가 한 번에 처리할 수 있는 비트 수로 분류할 수 있습니다.
중앙 메모리
반도체로 제작된 셀의 그룹으로, 프로그램의 실행, 연산을 위한 정보의 저장과 같은 일반적인 프로세스에 사용됩니다. 이러한 각 셀에는 숫자 값이 포함될 수 있으며 방향 지정이 가능한 속성이 있습니다. 이것은 각 셀의 고유 번호나 주소로 서로를 구별할 수 있다는 것입니다. 이 메모리의 총칭은 Random Access Memory 또는 RAM입니다.
이 유형의 메모리의 주요 단점은 전기 흐름이 중단될 때 집적 회로가 저장한 정보를 잃는다는 것입니다. 이것은 시스템이 꺼져도 정보가 손실되지 않는 메모리를 생성하는 이유였습니다. 이 메모리는 읽기 전용 메모리 또는 ROM이라는 이름을 받습니다.
PC가 정보를 처리하려면 이 정보가 레지스터라는 특수 셀에 있어야 합니다. 레지스터는 8개 또는 16개의 플립플롭 그룹입니다.
플립플롭은 두 가지 수준의 전압을 저장할 수 있는 장치입니다. 하나는 일반적으로 0.5볼트인 낮은 전압이고 다른 하나는 일반적으로 5볼트입니다. 플립플롭의 낮은 수준의 에너지는 꺼짐 또는 0으로 해석되고 높은 수준은 켜짐 또는
- 이러한 상태는 일반적으로 컴퓨터에서 가장 작은 정보 단위인 비트라고 합니다.
16비트 그룹을 워드라고 합니다. 워드는 바이트라고 하는 8비트 그룹으로 나눌 수 있으며 4비트 그룹을 니블이라고 합니다.
CPU 레지스터
CPU에는 4개의 내부 레지스터가 있으며 각 레지스터는 16비트입니다. 처음 4개, AX, BX, CX 및 DX는 범용 레지스터이며 다음과 같은 경우 8비트 레지스터로도 사용할 수 있습니다. 이러한 방식으로 사용되는 경우 예를 들어 AX 레지스터의 상위 및 하위 바이트인 AH 및 AL로 참조해야 합니다. 이 명명법은 BX, CX 및 DX 레지스터에도 적용됩니다.
특정 이름으로 알려진 레지스터:
Register |
Specific Name |
AX |
Accumulator |
BX |
Base register |
CX |
Counting register |
DX |
Data register |
DS |
Data segment register |
ES |
Extra segment register |
SS |
Battery segment register |
CS |
Code segment register |
BP |
Base pointers register |
SI |
Source index register |
DI |
Destination index register |
SP |
Battery pointer register |
IP |
Next Instruction pointer register |
F |
Flag register |
그러나 우리는 다음 장에서 C를 통한 인터럽트 프로그래밍에서 이 레지스터를 자세히 사용할 것이지만 여기에서 어셈블리 언어의 기본을 배우는 것이 이상적이며 디스크 연산 등을 프로그래밍하는 데 도움이 될 것입니다.
디버그 프로그램을 사용하여 CPU의 내부 레지스터 값을 시각화할 수 있습니다. 디버그 작업을 시작하려면 컴퓨터에 다음 프롬프트를 입력하세요.
C:/>디버그 <Enter>
다음 줄에 대시가 나타납니다. 이것은 디버그 표시기입니다. 현재 디버그 지침은 다음 명령을 사용하여 도입할 수 있습니다.
- r <Enter>
CPU 내부 레지스터의 모든 내용이 표시됩니다. 그것들을 보는 대안은 "r"을 사용하는 것입니다. 값을 보고자 하는 레지스터의 이름을 매개변수로 사용하는 명령. 예:
-rbx <Enter>
이 명령어는 BX 레지스터의 내용만 표시하고 디버그 표시기가 "-"에서 변경됩니다. ":"
프롬프트가 이와 같을 때 새 값과 <Enter>를 입력하여 표시되었던 레지스터 값을 변경하거나 다른 값을 입력하지 않고 Enter 키를 눌러 이전 값을 그대로 둘 수 있습니다.
플래그 레지스터의 값을 변경할 수 있으며 나중에 보게 될 프로그램에서 제어 구조로 사용할 수 있습니다. 레지스터의 각 비트에는 특별한 이름과 의미가 있습니다. 다음 목록은 각 비트의 값(켜기 또는 끄기)과 프로세서 작동과의 관계를 설명합니다.
Overflow
NV = there is no overflow
OV = there is an overflow
Direction
UP = forward
DN = backward
Interrupts
DI = deactivated
EI = activated
Sign
PL = positive
NG = negative
Zero
NZ = it is not zero
ZR = it is zero
Auxiliary Carry
NA = there is no auxiliary carry
AC = there is auxiliary carry
Parity
PO = uneven parity
PE = even parity
Carry
NC = there is no carry
CY = there is carry
어셈블러 구조
어셈블리 언어에서 코드 라인은 두 부분으로 구성됩니다. 첫 번째 부분은 실행할 명령어의 이름이고 두 번째 부분은 명령의 매개변수입니다. 예를 들어:
ADD ah, bh
여기에 "추가" 실행할 명령입니다. 이 경우에는 추가 및 "ah"가 표시됩니다. "bh"뿐만 아니라 매개변수입니다.
언어로 된 지침의 이름은 두 글자, 세 글자 또는 네 글자로 구성됩니다. 이러한 명령어는 프로세서가 수행할 기능을 나타내기 때문에 니모닉 이름 또는 연산 코드라고도 합니다. 작동에 매개변수가 필요하지 않은 명령과 하나의 매개변수만 필요한 명령이 있습니다.
때때로 지침은 다음과 같이 사용됩니다.
ADD al,[170]
두 번째 매개변수의 대괄호는 170 값이 아닌 메모리 셀 번호 170의 내용으로 작업할 것임을 나타냅니다. 이것을 직접 방향이라고 합니다.
이제 디버그의 도움으로 첫 번째 프로그램을 코딩할 준비가 되었습니다. 우리는 우리가 본 것을 설명하기 위해 작동하는 프로그램을 만들 것이며, 우리가 할 일은 프로그램에 직접 도입할 두 가지 값을 추가하는 것입니다.
첫 번째 단계는 디버그를 시작하는 것입니다. 이 단계는 debug <Enter> 운영 체제 프롬프트에서.
디버그에서 프로그램을 어셈블하려면 "a" (조립) 명령을 사용합니다. 이 명령을 사용하면 어셈블을 시작하려는 주소를 매개변수로 지정할 수 있습니다. 매개변수를 생략하면 CS:IP에서 지정한 지역(일반적으로 0100h)에서 어셈블이 시작됩니다. 이 지역은 프로그램이 실행되는 지역입니다. .COM 확장자를 사용하여 시작해야 합니다. 그리고 디버그만이 이러한 특정 유형의 프로그램을 만들 수 있기 때문에 사용할 장소가 될 것입니다.
이 순간에는 "a"를 줄 필요가 없습니다. 매개변수를 명령할 때 CS:IP 레지스터가 사용되면 문제를 피하기 위해 그렇게 하는 것이 좋습니다. 따라서 다음을 입력합니다.
-a0100 <Enter>
이 작업이 완료되면 화면에 0C1B:0100이 표시되고 커서가 이 숫자의 오른쪽에 위치합니다. 16진수 시스템에서 처음 4자리는 다를 수 있지만 마지막 4자리는 0100이어야 합니다. , 시작으로 표시한 주소이기 때문입니다. 이제 지침을 소개할 수 있습니다.
0C1B:0100 mov ax,0002; puts the 0002 value on the ax register
0C1B:0103 mov bx,0004; puts the 0004 value on the bx register
0C1B:0106 add ax,bx; the content of bx is added to the content of ax
0C1B:0108 int 20; provoques the termination of the program.
0C1B:010A
";;" 뒤에 오는 주석은 쓸 필요가 없습니다. 마지막 명령이 입력되면 int 20, <Enter> 아무 것도 쓰지 않고 를 누르면 디버거 프롬프트가 다시 표시됩니다.
마지막으로 작성된 줄은 적절한 어셈블러 명령어가 아니며 대신 운영 체제 중단에 대한 호출입니다. 이러한 중단은 많은 줄을 절약하고 운영 체제 기능에 액세스하는 데 매우 유용합니다.
우리가 작성한 프로그램을 실행하려면 "g" 명령이 사용되며 사용되면 다음과 같은 메시지가 표시됩니다.
"프로그램이 정상적으로 종료되었습니다". 당연히 이와 같은 메시지에서는 프로그램이 추가를 완료했는지 확신할 수 없지만 "r"을 사용하여 이를 확인할 수 있는 간단한 방법이 있습니다. 디버그 명령을 실행하면 프로세서의 모든 레지스터 내용을 볼 수 있습니다. 간단히 다음을 입력합니다.
-r <Enter>
각각의 실제 값이 있는 각 레지스터는 다음과 같이 화면에 나타납니다.
AX=0006 BX=0004 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0C1B ES=0C1B SS=0C1B CS=0C1B IP=010A NV UP EI PL NZ NA PO NC
0C1B:010A OF DB
레지스터에 다른 값이 포함될 가능성이 있지만 AX와 BX는 방금 수정한 것이므로 동일해야 합니다.
프로그램이 실행되는 동안 값을 보는 또 다른 방법은 실행을 끝내고 "g"에 대한 매개변수로 레지스터 값을 표시하려는 주소를 사용하는 것입니다. 이 경우 다음과 같습니다. : g108, 이 명령어는 프로그램을 실행하고 108번지에서 멈추고 레지스터의 내용을 보여줍니다.
레지스터에서 일어나는 일에 대한 후속 조치는 "t"를 사용하여 수행할 수 있습니다. 명령(추적)에서 이 명령의 기능은 어셈블된 것을 한 줄씩 실행하여 매번 레지스터의 내용을 표시하는 것입니다.
디버그를 종료하려면 "q" (종료) 명령.
어셈블러의 장점
어셈블러를 사용하는 첫 번째 이유는 어셈블러가 PC 작동에 대해 더 많이 알 수 있는 기회를 제공하여 보다 일관된 방식으로 소프트웨어를 개발할 수 있게 해주기 때문입니다.
두 번째 이유는 어셈블러를 사용하여 컴퓨터를 완전히 제어할 수 있기 때문입니다. 또 다른 이유는 어셈블리 기반 프로그램이 다른 언어로 만든 것보다 더 빠르고 어떤 경우에는 더 작고 용량이 더 크기 때문입니다.
약속을 지키겠습니다!!
이 장의 앞부분에서 DBR의 백업을 만들고 필요할 때 DBR의 백업을 원래 위치로 로드하는 몇 가지 지침을 예로 사용했습니다. 먼저 백업을 만들기 위한 지침을 검토합니다.
C:\>DEBUG A:\BKDBR.BIN <Enter>
File not found
- L 100 2 0 1 <Enter>
- R CX <Enter>
CX 0000
: 200 <Enter>
- W <Enter>
Writing 00200 bytes
- Q <Enter>
이 예에서는 첫 번째 줄부터 공부를 시작하겠습니다. DEBUG A:\BKDBR.BIN 명령은 A: 플로피 드라이브에 파일이 아직 없는 경우 BKDBR.BIN이라는 이름의 파일을 만들어 디버그 명령을 초기화합니다. 그래서 시작 부분에 "파일을 찾을 수 없습니다"라는 메시지가 나타납니다.
두 번째 명령어 L 100 2 0 1에서 L(load) 명령은 지시된 드라이브의 DBR을 로드하는 것입니다. 방법을 알아볼까요? 이 명령어에서 숫자 100은 DBR이 저장될 버퍼의 주소이고 다음 숫자 2는 드라이브 C(C:)에 사용됩니다. 드라이브 번호는 다음과 같이 지정됩니다.
Drive Letter |
Number Used |
A: |
0 |
B: |
1 |
C: |
2 |
D: |
3 |
. |
. |
. |
. |
and so on |
. |
다음 숫자 0은 읽을 섹터 수의 시작 섹터 번호입니다. 여기서 우리는 0을 사용하여 첫 번째 섹터, 즉 DBR 섹터를 읽습니다. 다음 숫자 1은 읽을 섹터 수를 알리는 데 사용됩니다.
여기서 우리는 하나의 섹터만 읽기를 원하기 때문에 1을 주었습니다. 그러나 다른 유형의 작업에서 필요에 따라 시작 및 종료 섹터의 수와 위치를 사용할 수 있습니다. 따라서 C: 드라이브의 첫 번째 섹터에서 시작하여 메모리 위치 100까지 하나의 섹터를 로드합니다.
그리고 R CX Instruction은 BKDBR.BIN 파일에 쓰고자 하는 데이터의 길이를 변경하거나 정의하는 데 사용됩니다. 이 명령어는 CX 레지스터의 현재 값을 표시하고 사용자가 변경할 수 있도록 합니다. DEBUG 명령은 16진법을 사용하고 DBR의 크기는 16진법으로 200(h) 바이트, 십진법으로 512바이트이기 때문에 여기에 200을 입력했습니다.
W 명령은 DEBUG에 위치 100에서 BKDBR.BIN 파일로 200(h) 바이트를 쓰도록 지시합니다. 그리고 마지막으로 명령 Q를 사용하여 DEBUG를 종료하고 DOS 프롬프트로 돌아갑니다.
경고!!! 경고!!! 경고!!!
모든 디스크의 DBR을 복원하는 절차에서 무엇을, 어떻게 수행하고 있는지 알고 있어야 합니다. 실수로 다른 디스크의 불법 또는 DBR을 저장하면 대부분의 경우 디스크의 전체 데이터에 액세스할 수 없게 될 수 있습니다.
코딩의 첫 번째 명령어를 입력할 때:
DEBUG A:\BKDBR.BIN <Enter>
파일은 DEBUG 프로그램을 시작하는 지정된 위치에 있어야 합니다. 이제 DEBUG 프롬프트 전에 "파일을 찾을 수 없습니다"라는 오류 메시지가 표시되면 Q(종료) 명령을 사용하여 프로세스를 즉시 중지합니다. 이는 BKDBR.BIN 파일을 DEBUG 프로그램에서 찾거나 열 수 없음을 의미하기 때문에 이 프로세스를 계속하면 일부 정크 정보가 DBR에 기록되고 전체 파티션에 액세스할 수 없게 됩니다. |
이제 BKDBR.BIN이라는 이름의 백업 파일에서 DBR을 복원하기 위한 지침의 코딩에서 수행한 작업을 살펴보겠습니다. 백업을 복원하는 DEBUG 명령은 다음과 같습니다.
C:\> DEBUG A:\BKDBR.BIN <Enter>
- W 100 2 0 1 <Enter>
- Q <Enter>
|
이 명령어는 메모리 위치 100의 플로피 드라이브(a:)에 있는 BKDBR.BIN 파일의 정보 1섹터를 드라이브(C:)인 두 번째 드라이브의 섹터 0인 첫 번째 섹터에 씁니다.
프로그램 저장 및 로드
필요할 때마다 전체 프로그램을 입력하는 것은 실용적이지 않은 것 같으며, 이를 피하기 위해 디스크에 프로그램을 저장할 수 있으며 이미 조립되어 있으므로 실행할 필요가 없다는 엄청난 이점이 있습니다. 다시 디버그하여 실행하십시오.
메모리에 이미 저장된 프로그램을 저장하는 단계는 다음과 같습니다.
- 기본적으로 16진법 시스템에서 초기 주소에서 최종 주소를 뺀 프로그램의 길이를 구합니다.
- 프로그램 이름과 확장자를 지정합니다.
- CX 레지스터에 프로그램의 길이를 입력합니다.
- Debug를 명령하여 디스크에 프로그램을 기록합니다.
다음 프로그램을 예로 사용하면 이러한 단계를 수행하는 방법에 대해 더 명확하게 알 수 있습니다. 프로그램이 최종적으로 조립되면 다음과 같이 보일 것입니다.
0C1B:0100 mov ax,0002
0C1B:0103 mov bx,0004
0C1B:0106 add ax,bx
0C1B:0108 int 20
0C1B:010 A
-h 10a 100
020a 000a
-n test.com
-rcx
CX 0000
:000a
-w
000A 바이트 쓰기
프로그램 "h"의 길이를 얻으려면 두 숫자의 덧셈과 뺄셈을 16진수로 보여주기 때문에 명령이 사용됩니다. 길이를 얻기 위해 프로그램의 최종 주소(10A)와 프로그램의 초기 주소(100) 값을 매개변수로 제공합니다. 명령이 보여주는 첫 번째 결과는 매개변수의 추가이고 두 번째는 빼기입니다.
"n" 명령을 사용하면 프로그램 이름을 지정할 수 있습니다. "rcx" 명령을 사용하면 초기 주소에서 최종 주소를 뺀 결과인 "h"(이 경우 000a)가 있는 파일 크기에서 얻은 값으로 CX 레지스터의 내용을 변경할 수 있습니다.
마지막으로 "w" 명령은 디스크에 프로그램을 기록하여 쓴 바이트 수를 나타냅니다. 또한 이미 로드된 파일을 저장하려면 두 단계가 필요합니다.
- 로드할 파일의 이름을 지정합니다.
- "l"을 사용하여 로드합니다. (로드) 명령.
다음 단계의 올바른 결과를 얻으려면 위의 프로그램이 이미 생성되어 있어야 합니다.
디버그 내부에서 다음을 작성합니다.
-n test.com
-l
-u 100 109
0C3D:0100 B80200 MOV AX,0002
0C3D:0103 BB0400 MOV BX,0004
0C3D:0106 01D8 ADD AX,BX
0C3D:0108 CD20 INT 20
마지막 "u" 명령은 프로그램이 메모리에 로드되었는지 확인하는 데 사용됩니다. 그것이 하는 일은 코드를 디스어셈블하고 디스어셈블된 것을 보여주는 것입니다. 매개변수는 디스어셈블할 위치와 위치를 DEBUG에 표시합니다. DEBUG는 항상 주소 100H의 메모리에 있는 프로그램을 로드합니다.
세그먼트
x86 프로세서의 아키텍처는 정보를 관리하기 위해 메모리 세그먼트를 사용해야 하며, 이 세그먼트의 크기는 64kb입니다.
이러한 세그먼트가 있는 이유는 프로세서가 관리할 수 있는 숫자의 최대 크기가 16비트 또는 레지스터라는 워드로 주어짐을 고려할 때 메모리의 65536개 이상의 지역에 액세스할 수 없기 때문입니다. 이 레지스터 중 하나만 사용하지만 이제 메모리가 그룹 또는 세그먼트로 분할되면 각각 65536개의 로컬리티가 있고 배타적 레지스터의 주소를 사용하여 각 세그먼트를 찾은 다음 특정 슬롯의 각 주소를 만듭니다. 두 개의 레지스터가 있고 4294967296바이트의 메모리에 액세스할 수 있습니다.
어셈블러가 데이터를 관리할 수 있으려면 각 정보 또는 명령이 해당 세그먼트에 해당하는 영역에서 찾아야 합니다. 어셈블러는 DS, ES, SS 및 CS 레지스터와 레지스터 내부에서 지정된 정보 조각의 주소에 의해 제공된 세그먼트의 현지화를 고려하여 이 정보에 액세스합니다. 이 때문에 우리가 어셈블하는 각 줄에서 디버그를 사용하여 프로그램을 만들 때 다음과 같은 내용이 나타납니다.
1CB0:0102 MOV AX,BX
여기서 첫 번째 숫자 1CB0은 사용 중인 메모리 세그먼트에 해당하고 두 번째 숫자는 이 세그먼트 내부의 주소를 나타내며 해당 주소에서 저장될 명령이 따릅니다.
어셈블러는 각 어셈블된 명령어가 필요로 하는 바이트 수를 기본으로 하여 세그먼트의 크기를 조정합니다. 전체 세그먼트를 사용하는 것은 메모리 낭비가 되기 때문입니다. 예를 들어 프로그램이 데이터를 저장하는 데 10kb만 필요한 경우 데이터 세그먼트는 처리할 수 있는 64kb가 아니라 10kb만 됩니다.
데이터 이동
여기에서 여러분의 지식과 편의를 위해 데이터 작업에 대한 몇 가지 어셈블리 언어 지침을 나열하고 있습니다. 인터럽트 및 기타 BIOS 작업의 도움으로 프로그래밍을 할 때 기본이 필요할 것입니다.
어셈블리 언어에 대한 자세한 소개와 철저한 연구는 이 책의 한계를 넘어선다. 다음으로 중요한 프로그래밍 장을 진행하려면 어셈블리의 기본 지식이 필요하지만 모든 지침을 이해하는 것이 어렵다고 느끼더라도 걱정할 필요는 없지만 지침의 기본 개념을 습득하는 것이 좋습니다.
모든 프로그램에서 메모리와 CPU 레지스터의 데이터를 이동해야 하며 이를 수행하는 방법에는 여러 가지가 있습니다. 메모리의 데이터를 일부 레지스터로, 레지스터에서 레지스터로, 레지스터에서 스택으로, 스택에서 레지스터로, 외부 장치로 또는 그 반대로 데이터를 전송할 수 있습니다.
이러한 데이터 이동에는 규칙 및 제한 사항이 적용됩니다. 다음은 그 중 일부입니다.
- 한 메모리 위치에서 다른 메모리 위치로 데이터를 직접 이동할 수 없습니다. 먼저 소스 위치의 데이터를 레지스터로 이동한 다음 레지스터에서 대상 위치로 이동해야 합니다.
- 상수를 세그먼트 레지스터로 직접 이동할 수 없습니다. 먼저 CPU의 레지스터로 이동해야 합니다.
- 바이트 또는 워드 체인을 복사하는 MOVS 명령어를 통해 데이터 블록을 이동할 수 있습니다. 한 위치에서 다른 위치로 n 바이트를 복사하는 MOCSB와 한 위치에서 다른 위치로 n 단어를 복사하는 MOVSW입니다. 마지막 두 명령어는 이동할 데이터 그룹으로 DS:SI에 의해 정의된 주소에서 값을 가져오고 데이터의 새로운 현지화로 ES:DI를 사용합니다.
데이터를 이동하기 위해 배터리라고 하는 구조도 있습니다. 여기서 데이터는 푸시 명령으로 도입되고 팝 명령으로 추출됩니다. 스택에서 도입되는 첫 번째 데이터는 우리가 취할 수 있는 마지막 데이터입니다. 이것은 우리 프로그램에서 다음 명령어를 사용하는 경우입니다.
PUSH AX
PUSH BX
PUSH CX
스택에서 가져오는 순간 각 레지스터에 올바른 값을 반환하려면 다음 순서로 수행해야 합니다.
POP CX
POP BX
POP AX
외부 장치와의 통신을 위해 out 명령은 포트로 정보를 보내는 데 사용되며 in 명령은 포트에서 받은 정보를 읽는 데 사용됩니다.
OUT 명령의 구문은 다음과 같습니다.
OUT DX,AX
여기서 DX는 통신에 사용될 포트 값을 포함하고 AX는 전송할 정보를 포함합니다.
IN 명령의 구문은 다음과 같습니다.
IN AX,DX
여기서 AX는 들어오는 정보가 보관되는 레지스터이고 DX는 정보가 도착할 포트의 주소를 포함합니다.
MOV Instruction
메모리 셀, 레지스터 및 누산기 간의 데이터 전송에 사용됩니다. 구문은 다음과 같습니다.
MOV Destination, Source
이 명령어에 허용되는 다양한 데이터 이동은 다음 표에 나와 있습니다.
S. No. |
Destination |
Source |
1. |
memory |
accumulator |
2. |
accumulator |
memory |
3. |
segment register |
memory/register |
4 |
memory/register |
segment register |
5. |
Register |
register |
6. |
Register |
memory |
7. |
memory |
register |
8. |
Register |
immediate data |
9. |
memory |
immediate data |
예를 들어 보겠습니다.
MOV AX,0006
MOV BX,AX
MOV AX,4C00
INT 21
이 프로그램은 0006H 값을 AX 레지스터로 옮긴 후 AX(0006h) 의 내용을 BX 레지스터로 옮기고 마지막으로 4C00h 값을 AX 레지스터로 옮기고 21h 인터럽트의 4C 옵션으로 실행을 종료한다. . 인터럽트 13H와 인터럽트 21H에 대한 간략한 소개는 나중에 하겠습니다.
방해
인터럽트는 CPU가 실행을 일시 중단하고 상태를 저장하고 특정 위치로 전송하도록 하는 하드웨어 기능입니다. 전송 위치는 인터럽트에 대한 응답으로 조치를 취하도록 의도된 프로그램의 주소를 지정합니다. 인터럽트의 결과로 실행되는 프로그램을 인터럽트 처리 프로그램이라고 합니다.
예를 들면: DOS가 일부 정보를 BIOS에 보내려고 하거나 BIOS가 컴퓨터 시스템에 일부 정보를 보내려는 경우 DOS 또는 BIOS는 인터럽트를 생성합니다. 인터럽트가 발생할 때마다 컴퓨터는 수행 중인 작업을 중단하고 먼저 인터럽트를 생성한 작업을 처리합니다.
인터럽트를 생성할 수 있는 각 장치에는 이러한 인터럽트를 생성하는 장치를 식별하기 위해 고유한 인터럽트 번호가 부여됩니다. 이 책에서 인터럽트 13H의 모든 기능과 하위 기능, 인터럽트 13H의 확장 및 인터럽트 21H에 대해 논의할 것입니다.
기본적으로 중단에는 다음 세 가지 유형이 있습니다.
- 내부 하드웨어 중단
- 외부 하드웨어 중단
- 소프트웨어 중단
내부 하드웨어 중단
내부 인터럽트는 프로그램 실행 중에 발생하는 특정 이벤트에 의해 생성됩니다. 이러한 유형의 중단은 하드웨어에 의해 전체적으로 관리되며 수정할 수 없습니다.
이러한 유형의 중단의 명확한 예는 컴퓨터 내부 시계의 카운터를 구현하는 것입니다. 하드웨어는 시간을 최신 상태로 유지하기 위해 1초 동안 여러 번 이 중단을 호출합니다.
이 중단을 직접 관리할 수는 없지만 소프트웨어로 시간 업데이트를 제어할 수는 없지만 컴퓨터에 미치는 영향을 우리에게 유리하게 사용할 수는 있습니다.
예를 들어: 지속적으로 업데이트되는 가상 시계를 만들려면 카운터의 실제 값을 읽고 이를 사용자가 이해할 수 있는 형식으로 변환하는 프로그램만 작성하면 됩니다.
외부 하드웨어 중단
외부 방해는 키보드, 프린터, 통신 카드 등과 같은 주변 장치에 의해 생성됩니다. 또한 보조 프로세서에 의해 생성됩니다. 외부 방해를 비활성화할 수 없습니다.
이러한 인터럽트는 CPU에 직접 전송되지 않고 이러한 유형의 인터럽트를 독점적으로 처리하는 기능을 가진 집적 회로로 전송됩니다.
소프트웨어 중단
소프트웨어 중단은 INT 명령어로 원하는 중단 횟수를 호출하는 어셈블러에 의해 직접 활성화될 수 있습니다.
인터럽트를 사용하면 프로그램 생성에 도움이 되며 이를 사용하면 프로그램이 짧아집니다. 그것들을 이해하는 것이 더 쉽고 일반적으로 더 작은 크기 때문에 더 나은 성능을 보입니다. 이러한 유형의 중단은 운영 체제 DOS 중단과 BIOS 중단이라는 두 가지 범주로 구분할 수 있습니다.
이 둘의 차이점은 운영 체제 중단이 사용하기 더 쉽지만 이러한 중단은 BIOS를 사용하여 목표를 달성하기 때문에 더 느리다는 것입니다. 반면에 BIOS 중단은 훨씬 빠르지만 하드웨어의 일부이기 때문에 매우 구체적이고 회로의 제조업체 브랜드에 따라 다를 수 있다는 단점이 있습니다.
사용할 중단 유형의 선택은 전적으로 프로그램에 제공하려는 특성에 따라 다릅니다.
C를 사용한 인터럽트 처리를 통해 C 언어의 도움으로 데이터 복구 프로그래밍에 인터럽트를 사용할 것이기 때문에 인터럽트 13H, 인터럽트 13H 확장 및 인터럽트에 대해서만 설명합니다. 특히 21H 루틴. C 언어에서는 더 쉬운 기능을 사용하여 대부분의 작업을 수행할 수 있기 때문에 다른 모든 인터럽트와 그 기능에 대해 논의하는 것은 그다지 중요하지 않습니다. 그러나 데이터 복구 프로그래밍을 위해서는 Interrupt 13H 및 그 확장 기능에 대한 지식이 필요합니다. |
Interrupt 20H와 Interrupt 21H에 대해 간단히 소개하겠습니다. 대괄호로 표시된 값(예: 0x20)은 사용 방법을 나타냅니다.
INT 20H ( 0x20) --> Terminate process
Call with: CS = segment address of program segment prefix
Returns: Nothing
댓글:
현재 프로세스를 종료합니다. 이것은 프로그램이 최종 종료를 수행하는 데 사용할 수 있는 여러 방법 중 하나입니다. 또한 INT 21H의 함수(00H 또는 31H 또는 4CH)를 사용하거나 단순히 INT 27H를 사용하여 반환 코드를 상위 프로세스에 전달할 수 있기 때문에 일반적으로 INT 21H의 함수 31H 및 4CH가 선호되는 최종 종료를 수행할 수 있습니다.
파일 제어 블록(FCB)을 사용하여 파일을 작성한 경우 먼저 파일을 닫아야 합니다. 그렇지 않으면 최종 종료 작업에서 프로세스에서 사용한 모든 메모리가 손실될 수 있으므로 데이터가 손실될 수 있습니다. 해제되고 파일 버퍼가 플러시되고 프로세스가 소유한 파일 또는 장치에 대한 열린 핸들이 닫힙니다.
따라서 파일에 대한 핸들이 열려 있으면 데이터가 손실될 수 있습니다.
INT 21H (0x21)
Function 00H (0x00) --> Terminate process
Call with: AH = 00H
CS = segment address of program segment prefix
Returns: Nothing
댓글:
이 인터럽트는 현재 프로세스를 종료합니다. 이것은 프로그램이 최종 종료를 수행하는 데 사용할 수 있는 여러 방법 중 하나입니다. 자세한 내용은 INT 20H를 참조하십시오.
INT 21H (0x21)
Function 01H (0x01) --> Character input with echo
Call with: AH = 01H
Returns: AL = 8-bit input data
댓글:
이 인터럽트는 키보드와 같은 표준 입력 장치에서 문자를 읽고 표준 출력 장치로 에코합니다. 준비된 문자가 없으면 사용할 수 있을 때까지 기다립니다.
INT 21H (0x21)
Function 02H (0x02) --> Character output
Call with: AH = 02H
DL = 8-bit data for output
Returns: Nothing
댓글:
표준 출력 장치에 문자를 출력합니다. 출력을 리디렉션할 수 있습니다. 출력이 리디렉션되면 디스크 가득 참을 감지할 방법이 없습니다.
출력이 리디렉션되지 않았거나 핸들이 논리 장치 CON을 얻은 경우 표준 출력(0001H)에 대해 미리 정의된 핸들을 사용하여 쓰기(INT 21H, 기능 40H)를 수행하여 문자열을 디스플레이로 보낼 수도 있습니다.
INT 21H (0x21)
Function 03H (0x03) --> Auxiliary input
Call with: AH = 03H
Returns: AL = 8-bit input data
댓글:
표준 보조 장치에서 문자를 읽습니다. 기본값은 첫 번째 직렬 포트(COM1)입니다.
보조 장치가 프로그램이 처리할 수 있는 것보다 빠르게 데이터를 보내면 문자가 손실될 수 있습니다. 이 함수 호출을 통해 사용자 프로그램이 보조 장치의 상태를 읽거나 문자 손실과 같은 I/O 오류를 감지할 수 있는 방법이 없습니다.
INT 21H (0x21)
Function 04H (0x04) --> Auxiliary output
Call with: AH = 04H
DL = 8-bit data for output
Returns: Nothing
댓글:
INT 21H의 이 기능은 표준 보조 장치에 문자를 출력합니다. 기본값은 첫 번째 직렬 포트(COM1)입니다. 문자열은 표준 보조 장치(00034)에 대해 미리 정의된 핸들을 사용하거나 논리 장치 AUX를 열어 얻은 핸들을 사용하여 쓰기(INT 21H 기능 40H)를 수행하여 보조 장치로 보낼 수도 있습니다.
INT 21H (0x21)
Function 05H (0x05) --> Printer output
Call with: AH = 05H
DL = 8-bit data for output
Returns: Nothing
댓글:
이 기능은 표준 목록 장치에 문자를 보냅니다. 기본 장치는 첫 번째 병렬 포트(LPT1)의 프린터입니다. 표준 프린터 장치(0004H)에 대해 미리 정의된 핸들을 사용하거나 논리 장치 PRN 또는 LPT1을 열어 얻은 핸들을 사용하여 쓰기(INT 21H 기능 40H)를 수행하여 문자열을 프린터로 보낼 수도 있습니다.
INT 21H (0x21)
Function 06H (0x06) --> Direct console I/O
Call with: AH = 06H
DL = function requested such that,
If output request, 00H-FEH
If input request, 0FFH
Returns: Nothing, If called with DL = 00H-0FEH
If called with DL = FFH and a character is ready
Zero flag = clear
AL = 8-bit input data
If called with DL = FFH and no character is ready
Zero flag = set
댓글:
표준 입력 장치에서 문자를 읽거나 표준 출력 장치에 문자를 씁니다. I/O가 리디렉션될 수 있지만 I/O가 리디렉션된 경우 EOF 또는 디스크 꽉 참을 감지할 방법이 없습니다. INT 21H의 이 기능은 운영 체제의 간섭 없이 가능한 모든 문자와 제어 코드를 읽고 써야 하는 프로그램에서 사용됩니다.
INT 21H (0x21)
Function 07H (0x07) --> Unfiltered character input
without Echo
Call with: AH = 07H
Returns: AL = 8-bit input data
댓글:
이 함수는 표준 출력 장치에 반향하지 않고 표준 입력 장치에서 문자를 읽습니다.
INT 21H (0x21)
Function 08H (0x08) --> Character input without
echo
Call with: AH = 08H
Returns: AL = 8-bit input data
댓글:
이 함수는 표준 출력 장치에 반향하지 않고 표준 입력 장치에서 문자를 읽습니다.
INT 21H (0x21)
Function 09H (0x09) --> Display string
Call with: AH = 09H
DS:DX = segment: offset of string
Returns: Nothing
댓글:
표준 출력 장치에 문자열을 보냅니다. 출력이 리디렉션될 수 있습니다. 출력이 리디렉션된 경우 디스크 꽉 참을 감지할 방법이 없습니다. 리디렉션되지 않은 경우 표준 출력(0001H)에 대해 미리 정의된 핸들을 사용하여 쓰기(INT 21H 기능 40H)를 수행하거나 논리 장치 CON을 열어 얻은 핸들을 사용하여 문자열을 디스플레이에 보낼 수도 있습니다.
INT 21H (0x21)
Function 0AH (0x0A or 10) --> Buffered keyboard
input
Call with: AH = 0AH
DS:DX = segment: offset of buffer
Returns: Data placed in buffer, Returns Nothing
댓글:
표준 입력 장치에서 최대 ASCII 캐리지 리턴(0DH)을 포함한 바이트 문자열을 읽고 사용자가 지정한 버퍼에 넣습니다. 문자는 표준 출력 장치에 반향됩니다. 함수에서 사용하는 버퍼의 형식은 다음과 같습니다.
Byte |
Contents |
0 |
Maximum number of characters to read, set by program |
1 |
Number of characters actually read (excluding carriage return), set by MS-DOS |
2+ |
String read from keyboard or standard input, terminated by a carriage return (0DH) |
INT 21H (0x21)
Function 0BH (0x0B or 11) --> Check input status
Call with: AH = 0BH
Returns: AL = 00H (if no character is available)
FFH (if at least one character is available)
댓글:
키보드와 같은 표준 입력 장치에서 문자를 사용할 수 있는지 확인합니다. 이 기능은 IOCTL INT 21H 기능 44H 하위 기능 06H와 동일합니다.
INT 21H (0x21)
Function 0CH (0x0C or 12) --> Flush input buffer
and then Input
Call with: AH = 0CH
AL = number of input to be invoked after resetting
buffer (must be 01H, 06H, 07H, 08H or 0AH)
If AL = 0AH
DS: DX = segment: offset of input buffer
Returns: If called with AL = 01H, 06H, 07H, or 08H,
AL = 8-bit input data
If called with AL= 0AH,
Nothing (data placed in buffer)
댓글:
표준 입력 버퍼를 지운 다음 문자 입력 기능 중 하나를 호출합니다. 입력을 리디렉션할 수 있습니다. 01H, 06H, 07H, 08H 또는 0AH를 제외한 AL의 기능 번호는 입력 버퍼를 플러시하고 호출 프로그램에 제어를 반환합니다.
INT 21H (0x21)
Function 0DH (0x0D or 13) -> Disk reset
Call with: AH = 0DH
Returns:Nothing
댓글:
이 함수는 모든 파일 버퍼를 플러시합니다. 이 함수는 아직 열려 있는 파일의 디스크 디렉터리를 업데이트하지 않습니다.
INT 21H (0x21)
Function 0EH (0x0E or 14) -> Select disk
Call with: AH = 0EH
DL = drive code (0 = A, 1= B, etc.)
Returns: AL = number of logical drives in system
댓글:
지정된 드라이브를 현재 또는 기본 디스크 드라이브로 선택하고 시스템의 총 논리 드라이브 수를 반환합니다.
응용 프로그램은 드라이브 문자 A-Z(0 = A, 1 = B 등)로 제한되어야 합니다. 논리 드라이브는 플로피 디스크 및 하드 디스크 드라이브 등과 같은 블록 장치의 총 수를 의미합니다. 일반적으로 하나의 물리적 하드 디스크 드라이브는 두 개 이상의 논리 드라이브로 분할됩니다.
INT 21H (0x21)
Function 0FH (0x0F or 15) -> Open file
Call with: AH = 0FH
S: DX = segment: offset of file control block
Returns: If function successful and file found
AL = 00H
And FCB filled in by MS-DOS is as follows:
Drive field (offset 00H) =1 for drive A, 2 for drive B, etc. Current block field (offset 0CH) = 00H
Record size field (offset 0EH) = 0080H
Size field (offset 10H) = file size from directory
Data field (offset 14H) = date stamp from directory
Time field (offset 16H) = time stamp from directory
If function unsuccessful and file not found
AL = 0FFH
댓글:
파일을 열고 후속 읽기/쓰기 작업에 사용할 수 있도록 합니다. 프로그램이 128바이트 이외의 레코드 크기를 사용하려는 경우 파일이 성공적으로 열린 후 다른 디스크 작업 전에 레코드 크기 필드를 FCB 오프셋 0EH로 설정해야 합니다.
INT 21H (0x21)
Function 10H (0x10 or 16) -> Close file
Call with: AH = 10H
DS: DX = segment: offset of file control block
Returns: If function successful (directory update successful)
AL = 00H
If function unsuccessful (file not found in directory)
AL = FFH
댓글:
파일을 닫을 때 사용합니다. 파일을 닫고 파일과 관련된 모든 MS-DOS 내부 디스크 버퍼를 디스크로 플러시하고 파일이 수정되거나 확장된 경우 디스크 디렉터리를 업데이트합니다.
INT 21H (0x21)
Function 11H (0x11 or 17) -> Find first file
Call with: AH = 11H
DS: DX = segment: offset of file control block
Returns: If function successful and matching file found
AL = 00H
그리고 현재 DTA(디스크 전송 영역) 주소의 버퍼는 기능을 위해 입력된 FCB 유형에 따라 미개봉 일반 FCB 또는 확장 FCB로 채워집니다.
If function unsuccessful (no matching filename found)
AL = FFH
댓글:
지정된 드라이브의 현재 디렉토리에서 일치하는 파일 이름을 검색합니다. 와일드카드(? 및 *)를 사용할 수 있습니다. 이 함수는 일치하는 첫 번째 파일 이름을 반환합니다.
INT 21H (0x21)
Function 12H (0x12 or 18) -> Find next file
Call with: AH = 12H
DS: DX = segment: offset of file control block
Returns: If function successful and matching filename found
AL = 00H
And buffer at current disk transfer area (DTA) address set up as an unopened normal FCB or extended FCB, depending on which type of FCB was originally input to INT21H function 11H
If function unsuccessful and matching filenames not found
AL = FFH
댓글:
이전 함수의 컴패니언입니다. INT 21H 기능 11H가 성공하면 다음으로 일치하는 파일 이름이 있는 경우 이를 반환합니다. 이 기능은 입력으로 사용된 FCB가 INT 21H 기능 11H에 대한 이전 호출 및 INT 21H 기능 12H에 대한 가능한 후속 호출에 의해 적절하게 초기화되었으며 검색 중인 파일 이름 또는 확장자가 하나 이상의 와일드카드 문자를 포함한다고 가정합니다.
INT 21H (0x21)
Function 13H (0x13 or 19) -> Delete file
Call with: AH = 13H
DS: DX = segment: offset of file control block
Returns: If function is successful and file or files deleted
AL = 00H
If function is unsuccessful and no matching files were found or at least one matching file was read-only,
AL = FFH
댓글:
기본 또는 지정된 디스크 드라이브의 현재 디렉토리에서 일치하는 모든 파일을 삭제합니다. 와일드카드(? 및 *)를 사용할 수도 있습니다.
INT 21H (0x21)
Function 14H (0x14 or 20) -> Sequential read
Call with: AH = 14H
DS: DX = segment: offset of previously opened
file control block
Returns: AL = 00H if read successful
01H if end of file
02H if segment wrap
03H if partial record read at end of
file
댓글:
이 함수는 파일에서 데이터의 다음 순차 블록을 읽은 다음 파일 포인터를 적절하게 증가시킵니다. 읽을 데이터의 바이트 수는 파일 제어 블록(FCB)의 레코드 크기 필드(오프셋 0EH)에 의해 지정됩니다.
기록은 INT 21H 기능 1AH에 대한 가장 최근 호출에 의해 지정된 현재 디스크 전송 영역(DTA) 주소에서 메모리로 읽힙니다. 레코드의 크기와 버퍼의 위치가 세그먼트 오버플로 또는 랩어라운드가 발생하는 것과 같은 경우 함수는 02H의 반환 코드와 함께 실패합니다.
INT 21H (0x21)
Function 15H (0x15 or 21) --> Sequential write
Call with: AH = 15H
DS: DX = segment: offset of previously opened file control block
Returns: AL = 00H, if write successful
01H, if disk is file
02H, if segment wrap
댓글:
이 함수는 데이터의 다음 순차 블록을 파일에 쓴 다음 파일 포인터를 적절하게 증가시킵니다. 기록할 데이터의 바이트 수는 파일 제어 블록(FCB)의 레코드 크기 필드(오프셋 0EH)에 의해 지정됩니다.
INT 21H (0x21)
Function 16H (0x16 or 22) --> Create file
Call with: AH = 16H
DS: DX = segment: offset of unopened file control block
Returns: If function is successful and file was created or truncated
AL = 00H
And FCB filled in by MS-DOS as follows:
Drive field (offset 00H) = 1 for drive A, 2 for drive B, etc.
Current block field (offset0CH) = 00H
Record size field (offset 0EH) = 0080H
Size field (offset 10H) = file size from directory
Date field (offset 14H) = date stamp from directory
Time field (offset 16H = time stamp from directory
If function unsuccessful (directory full)
AL = FFH
댓글:
이 함수는 현재 디렉토리에 새 디렉토리 항목을 생성하거나 동일한 이름을 가진 기존 파일을 0 길이로 자릅니다. 또한 후속 읽기/쓰기 작업을 위해 파일을 엽니다. 지정된 이름의 기존 파일은 길이가 0으로 잘리고 해당 파일의 모든 데이터가 복구 불가능하게 손실되므로 이 함수는 주의해서 사용해야 합니다.
INT 21H (0x21)
Function 17H (0x17 or 23) --> Rename file
Call with: AH = 17H
DS: DX = segment: offset of special file control block
Returns: If function is successful and one or more files renamed
AL = 00H
If function is unsuccessful and no matching files, or new filename matched an existing file
AL = FFH
댓글:
이 함수는 지정된 드라이브에 있는 디스크의 현재 디렉토리에서 일치하는 모든 파일의 이름을 변경합니다.
이와 함께 와일드 카드를 사용할 수도 있습니다. 특수 파일 제어 블록에는 드라이브 코드, 파일 이름 및 확장자가 일반적인 위치(바이트 0~0BH)에 있고 두 번째 파일 이름은 첫 번째 파일 다음에 6바이트(오프셋 11H)로 시작됩니다.
INT 21H
Function 18H (0x18 or 24) --> Reserved
INT 21H (0x21)
Function 19H (0x19 or 25) --> Get current disk
Call with: AH = 19H
Returns: AL = drive code (0 for A drive, 1 for B drive etc.)
댓글:
이 함수는 현재 또는 기본 디스크 드라이브의 드라이브 코드를 반환합니다.
INT 21H (0x21)
Function 1AH (0x1A or 26) --> Set DTA address
Call with: AH = 1AH
DS: DX = segment: offset of disk transfer area.
Returns: Nothing
댓글:
이 함수는 후속 FCB 관련 함수 호출에 사용할 디스크 전송 영역(DTA)의 주소를 지정합니다.
INT 21H (0x21)
Function 1BH (0x1B or 27) --> Get default drive
data
Call with: AH = 1BH
Returns: If function successful
AL = sectors per cluster
DS: DX = segment offset of media ID byte
CX = size of physical sector in bytes
DX = number of clusters for default drive
If function unsuccessful (invalid drive or critical error)
AL = FFH
댓글:
이 함수는 기본 디스크 드라이브에 대한 선택된 정보와 해당 파일 할당 테이블에서 미디어 식별 바이트에 대한 포인터를 가져옵니다.
미디어 ID 바이트의 의미는 다음과 같습니다.
Media Descriptor ID |
Medium |
0F0H |
3.5-inch Floppy Disk, double-sided, 18 sectors (or other) |
0F8H |
fixed disk |
0F9H |
5.25-inch Floppy Disk, double-sided, 15 sectors |
0F9H |
3.5-inch Floppy Disk, double-sided, 9 sectors |
0FCH |
5.25-inch Floppy Disk, single-sided, 9 sectors |
0FDH |
5.25-inch Floppy Disk, double-sided, 9 sectors |
0FDH |
8-inch Floppy Disk, single sided, single density |
0FEH |
5.25-inch Floppy Disk, single-sided, 8 sectors |
0FEH |
8-inch Floppy Disk, Single Sided, Single Density |
0FEH |
8-inch Floppy Disk, Double Sided, Double Density |
0FFH |
5.25-inch Floppy Disk, double-sided, 8 sectors |
INT 21H (0x21)
Function 1CH (0x1C or 28) --> Get drive data
Call with: AH = 1CH
DL = Drive Code
Returns: If function is successful
AL = sectors per cluster
DS: BX = segment: offset of media ID byte
CX = size of physical sector in bytes
DX = number of clusters for default or specified drive
If function is unsuccessful and invalid drive or critical error
AL = FFH
댓글:
이 함수는 지정된 디스크 드라이브에 대한 할당 정보와 해당 파일 할당 테이블에서 미디어 식별 바이트에 대한 포인터를 얻습니다. 미디어 ID 정보는 INT 21H, 기능 1BH에 제공된 미디어 디스크립터 ID 바이트 테이블을 참조하십시오.
INT 21H (0x21)
Function 1DH (0x1D or 29) --> Reserved
INT 21H (0x21)
Function 1EH (0x1E or 30) --> Reserved
INT 21H (0x21)
Function 1FH (0x1F or 31) --> Reserved
INT 21H (0x21)
Function 20H (0x20 or 32) --> Reserved
INT 21H (0x21)
Function 21H (0x21 or 33) --> Random read
Call with: AH = 21H
DS: DX = segment: offset of previously opened
file control block
Returns: AL = 00H if read successful
01H if end of file
02H if segment wrap, read canceled
03H if partial record read at end of
file
댓글:
이 기능은 파일에서 메모리로 선택한 레코드를 읽습니다. 레코드는 INT 21H 기능 1AH에 대한 가장 최근 호출에 의해 지정된 현재 디스크 전송 영역 주소에서 메모리로 읽혀집니다.
INT 21H (0x21)
Function 22H (0x22 or 34) --> Random write
Call with: AH = 22H
DS: DX = segment: offset of previously opened
file control block
Returns: AL = 00H if write successful
01H if disk full
02H if segment wrap, write canceled
댓글:
이 기능은 메모리의 데이터를 파일의 선택된 레코드에 씁니다.
INT 21H (0x21)
Function 23H (0x23 or 35) --> Get file size
Call with: AH = 23H
DS: DX = segment: offset of unopened file
control block
Returns: If function is successful and matching filename found
AL = 00H
And FCB relative-record field (offset 21H) set to the number of records in the file, rounded up if necessary to the next complete record
If function is unsuccessful and no matching file found
AL = FFH
댓글:
이 함수는 현재 디렉토리에서 일치하는 파일을 검색합니다. 하나가 발견되면 레코드 수 측면에서 파일 크기로 FCB를 업데이트합니다. 이 함수에 대한 기본 레코드 크기가 없으므로 이 함수를 호출하기 전에 FCB 레코드 크기 필드(오프셋 0EH)에 적절한 값을 배치해야 합니다.
INT 21H (0x21)
Function 24H (0x24 or 36) --> Set relative record
number
Call with: AH = 24H
DS: DX = segment: offset of previously opened
file control block
Returns: AL is destroyed (other register not affected)
FCB relative-record field (offset 21H) updated
댓글:
이 기능은 파일 제어 블록(FCB)의 상대 레코드 번호 필드를 열린 FCB에 기록된 현재 파일 위치에 해당하도록 설정합니다.
INT 21H (0x21)
Function 25H (0x25 or 37) --> Set interrupt vector
Call with: AH = 25H
AL = interrupt number
DS: DX = segment: offset of interrupt handling
routine
Returns: Nothing
댓글:
이 함수는 인터럽트 처리 루틴을 가리키도록 CPU 인터럽트 벡터를 초기화합니다. 잘 작동하는 응용 프로그램에서 인터럽트 벡터 테이블을 직접 편집하는 것보다 우선적으로 사용해야 합니다.
INT 21H (0x21)
Function 26H (0x26 or 38) --> Create new Program
Segment Prefix (PSP)
Call with: AH = 26H
DX = segment: of new program segment
prefix (PSP)
Returns: Nothing
댓글:
이 함수는 현재 실행 중인 프로그램의 프로그램 세그먼트 접두사(PSP)를 여유 메모리의 지정된 세그먼트 주소에 복사한 다음 새 PSP를 업데이트하여 다른 프로그램에서 사용할 수 있도록 합니다.
INT 21H (0x21)
Function 27H (0x27 or 39) --> Random block read
Call with: AH = 27H
CX = number of records to read
DS: DX = segment: offset of previously opened
file control block
Returns: AL = 00H if all requested records read
01H if end of file
02H if segment wrap
03H if partial record read at end of
file
CX = actual number of records read
댓글:
이 함수는 지정된 파일 위치에서 시작하여 파일에서 메모리로 하나 이상의 순차적 레코드를 읽습니다. 버퍼의 크기와 위치가 세그먼트 오버플로 또는 랩어라운드가 발생하는 것과 같은 경우 반환 코드 02H와 함께 함수가 실패하고 파일 끝에서 부분 레코드를 읽으면 레코드의 나머지 부분이 0으로 채워집니다.
INT 21H (0x21)
Function 28H (0x28 or 40) --> Random block write
Call with: AH = 28H
CX = number of records to write
DS: DX = segment: offset of previously opened
file control block
Returns: AL = 00H if all requested records written
01H if disk full
02H if segment wrap
CX = actual number of records written
댓글:
이 함수는 지정된 파일 위치에서 시작하여 메모리에서 파일로 하나 이상의 순차 레코드를 씁니다. 버퍼의 크기와 위치가 세그먼트 오버플로 또는 랩어라운드가 발생할 정도인 경우 반환 코드 02H와 함께 함수가 실패합니다.
INT 21H (0x21)
Function 29H (0x29 or 41) --> Parse filename
Call with: AH = 29H
AL = flags to control parsing
Bit 0 = 1, if leading separators will be
scanned off (ignored).
= 0, if leading separators will not be
scanned off
Bit 1 = 1, if drive ID byte in FCB will be
modified only if a drive was
specified in the string being parsed.
= 0, if the drive ID byte in FCB will be
modified regardless, if no drive
specifier is present in the parsed string, FCB drive code field is set to 0 (default)
Bit 2 = 1, if filename field in FCB will be
modified only if a filename is
specified in the string being parsed.
= 0, if filename field in FCB will be modified regardless, if no filename is presenting the parsed string, FCB filename is set to ASCIIZ blanks.
Bit 3 = 1, if extension field in FCB will be
modified, only if an Extension is
specified in the string being parsed.
= 0, if extension field in FCB will be
modified regardless, if no extension
is present in the parsed string, FCB
extension is set to ASCIIZ blanks
DS: SI = segment: offset of string
ES: DI = segment: offset of file control block
Returns: AL = 00H, if no wildcard characters
Encountered 01H, if parsed string
contained wildcard characters FFH,
if drive specifier invalid
DS: SI = segment: offset of first character
after parsed filename
ES: DI = segment: offset of formatted
unopened file control block
댓글:
이 함수는 텍스트 문자열을 파일 제어 블록(FCB)의 다양한 필드로 구문 분석합니다.
이 기능은 문자(: . ; , = + 탭 공백)를 구분 문자로 간주하고 모든 제어 문자와 문자(: . ; , = + 탭 공백 < > | / " [ ])를 종결 문자로 간주합니다.
INT 21H (0x21)
Function 2AH (0x2A or 42) --> Get day and date
Call with: AH = 2AH
Returns: CX = year (1980 through 2099)
DH = month (1 through 12)
DL = day (1 through 31)
AL = day of the week (0 = Sunday,
1= Monday, etc.)
댓글:
이 함수는 시스템 일, 요일, 월 및 연도를 가져옵니다.
INT 21H (0x21)
Function 2BH (0x2B or 43) --> Set date
Call with: AH = 2BH
CX = year (1980 through 2099)
DH = month (1 through 12)
DL = day (1 through 31)
Returns: AL = 00H if date set successfully
FFH if date not valid (ignored)
댓글:
이 함수는 시스템 시계 드라이버를 특정 날짜로 초기화하지만 시스템 시간은 변경되지 않습니다.
INT 21H (0x21)
Function 2CH (0x2C or 44) --> Get time
Call with: AH = 2CH
Returns: CH = hours (0 through 23)
CL = minutes (0 through 59)
DH = seconds (0 through 59)
DL = hundredths of seconds (0 through 99)
댓글:
시스템 실시간 시계 드라이버에서 시간을 가져오는 데 사용되며 시, 분, 초 및 1/100초로 변환됩니다.
INT 21H (0x21)
Function 2DH (0x2D or 45) --> Set time
Call with: AH = 2DH
CH = hours (0 through 23)
CL = minutes (0 through 59)
DH = seconds (0 through 59)
DL = hundredths of seconds (0 through 99)
Returns: AL = 00H, if time set successfully
FFH, if time not valid (ignored)
댓글:
이 함수는 시스템 실시간 시계를 지정된 시, 분, 초, 100분의 1초로 초기화합니다. 시스템 날짜는 영향을 받지 않습니다.
INT 21H (0x21)
Function 2EH (0x2E or 46) --> Set verify flag
Call with: AH = 2EH
AL = 00H, if turning off verify flag
01H, if turning on verify flag
DL = 00H
Returns: Nothing
댓글:
이 기능은 데이터의 자동 읽기 후 쓰기 검증을 위해 운영 체제 플래그를 끄거나 켭니다. 쓰기 후 읽기 확인은 디스크 작업을 느리게 하기 때문에 확인 플래그의 기본 설정은 OFF입니다.
INT 21H (0x21)
Function 2FH (0x2F or 47) --> Get DTA address
Call with: AH = 2FH
Returns:ES: BX = segment: offset of disk transfer area
댓글:
이 함수는 FCB 파일 읽기/쓰기 작업을 위한 디스크 전송 영역(DTA)의 현재 주소를 가져옵니다.
INT 21H (0x21)
Function 30H (0x30 or 48) --> Get MS-DOS
version number
Call with: AH = 30H
AL = 00H
Returns: AL = major version number (MS-DOS 3.10=3, etc.)
AH = minor version number (MS-DOS 3.10= 0AH, etc.)
BH = Original Equipment Manufacturer’s
(OEM’s) serial number (OEM-dependent-usually 00H for IBM’s
PC-DOS, 0FFH or other values for MS-DOS)
BL: CX = 24-bit user serial number (optional, OEM-dependent)
댓글:
호스트 MS-DOS 운영 체제의 버전 번호를 반환합니다.
INT 21H (0x21)
Function 31H (0x31 or 49) --> Terminate and Stay
Resident (TSR)
Call with: AH = 31H
AL = return code
DX = amount of memory in paragraphs, to reserve
Returns Nothing
댓글:
이 함수는 부모 프로세스에 반환 코드를 전달하여 현재 실행 중인 프로그램의 실행을 종료하지만 로드될 다음 임시 프로그램에 의해 오버레이되도록 프로그램 메모리의 일부 또는 전체를 예약합니다. 이 기능은 프로그램 세그먼트 접두어의 세그먼트를 포함하도록 CS를 지원하기 때문에 INT 27H보다 우선적으로 사용해야 합니다.
INT 21H (0x21)
Function 32H (0x32 or 50) --> Reserved
INT 21H (0x21)
Function 33H (0x33 or 51) --> Get or set break flag, get boot Drive
Call with: If getting break flag
AH = 33H
AL = 00H
If setting break flag
AH = 33H
AL = 01H
DL = 00H if turning break flag OFF
01H if turning break flag ON
If getting boot drive
AH = 33H
AL = 05H
Returns: If called with AL = 00H or 01H
DL = 00H break flag is OFF
01H break flag is ON
If called with AL = 05H
DL = boot drive (1 = A, 2 = B, etc.)
댓글:
이 함수는 운영 체제의 중단 플래그 상태를 가져오거나 변경하며, 이는 함수 호출 중 Ctrl-C 검사에 영향을 줍니다.
INT 21H (0x21)
Function 34H (0x34 or 52) --> Reserved
INT 21H (0x21)
Function 35H (0x35 or 53) --> Get interrupt vector
Call with: AH = 35H
AL = interrupt number
Returns: ES: BX = segment: offset of interrupt handler
댓글:
이 함수는 지정된 기계 인터럽트에 대한 현재 인터럽트 핸들러 루틴의 주소를 얻습니다.
INT 21H (0x21)
Function 36H (0x36 or 54) --> Get drive allocation
Information
Call with: AH = 36H
DL = drive code (0 default, 1 = A, etc.)
Returns: If function successful
AX = sector per cluster
BX = number of available cluster
CX = bytes per sector
DX = cluster per drive
If function unsuccessful (drive invalid)
AX = FFFFH
댓글:
이 기능은 디스크 드라이브에 대한 선택된 정보를 가져옵니다.
이 기능은 드라이브의 용량과 남은 여유 공간 및 기타 여러 중요한 사항을 계산할 수 있는 데이터 복구 및 디스크 문제 해결 프로그래밍에서 매우 중요합니다.
INT 21H (0x21)
Function 37H (0x37 or 55) --> Reserved
INT 21H (0x21)
Function 38H (0x38 or 56) --> Get or set country
information
Call with: If getting country information
AH = 38H
AL = 0, to get current country information
1-FEH, to get information for
countries with code <255
FFH, to get information for countries
with code >=255
BX = country code, if AL = FFH
DS:DX = segment: offset of buffer for returned information
If setting current country code
AH = 38H
AL = 1-FEH, country code for countries with code <255
FFH, for countries with code >=255
BX = country code, if AL = 0FFH
DX = FFFFH
Returns:
If function is successful
Carry flag = clear
And, if getting internationalization information
BX = country code
DS: DX = segment: offset of buffer holding internationalization Information.
If function is unsuccessful
Carry flag = set
AX = error code
댓글:
이 기능은 현재 또는 지정된 국가에 대한 국제 정보를 얻거나 현재 국가 코드를 설정합니다.
INT 21H (0x21)
Function 39H (0x39 or 57) --> Create directory
Call with: AH = 39H
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
댓글:
이 함수는 지정된 드라이브와 경로를 사용하여 디렉토리를 생성합니다.
ASCIIZ는 Null 또는 Zero, Byte로 끝나는 ASCII 문자 시퀀스로 알려져 있습니다. |
INT 21H (0x21)
Function 3AH (0x3A or 58) --> Delete directory
Call with: AH = 3AH
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
댓글:
이 함수는 지정된 드라이브와 경로를 사용하여 디렉토리를 제거합니다. 경로명의 요소가 존재하지 않거나 디렉토리가 비어 있지 않거나 액세스가 거부되거나 지정된 디렉토리가 현재 디렉토리인 경우 디렉토리 삭제 기능이 실패합니다.
INT 21H (0x21)
Function 3BH (0x3B or 59) --> Set current
directory
Call with: AH = 3BH
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
댓글:
이 함수는 지정된 드라이브 및 경로를 사용하여 현재 또는 기본 디렉토리를 설정합니다. 지정된 경로나 경로의 요소가 없으면 함수가 실패합니다.
INT 21H (0x21)
Function 3CH (0x3C or 60) --> Create file
Call with: AH = 3CH
CX = file attribute, where attribute
significance bits may be Combined.
비트의 중요성은 다음 표에 나와 있습니다.
Bit(s) |
Significance (if set) |
0 |
Read-only |
1 |
Hidden |
2 |
System |
3 |
Volume label |
4 |
Reserved (0) |
5 |
Archive |
6 – 15 |
Reserved (0) |
DS: DX = segment: offset of ASCIIZ
pathname
Returns: If function successful
Carry flag = clear
AX = handle
If function unsuccessful
Carry flag = set
AX = error code
댓글:
ASCIIZ 경로 이름이 주어지면 이 함수는 지정된 또는 기본 디스크 드라이브의 지정된 또는 기본 디렉토리에 새 파일을 생성합니다. 지정된 파일이 이미 있는 경우 길이가 0으로 잘립니다. 두 경우 모두 파일이 열리고 파일에 대한 후속 액세스를 위해 프로그램에서 사용할 수 있는 핸들이 반환됩니다.
경로 이름의 요소가 존재하지 않거나 파일이 루트 디렉토리에 생성 중이고 루트 디렉토리가 가득 차거나 액세스가 거부되거나 읽기 전용 속성을 가진 파일이 이미 지정된 디렉토리에 있는 경우 파일 생성 기능이 실패합니다.
INT 21H (0x21)
Function 3DH (0x3D or 61) --> Open file
Call with: AH = 3DH
AL = access mode
액세스 모드 비트의 중요성은 다음 표에 나와 있습니다.
Bits |
Significance |
0 – 2 |
Access Mode
000 = read access
001 = write access
010 = read/write access |
3 |
Reserved (0) |
4 – 6 |
Sharing Mode
000 = compatibility mode
001 = deny all
010 = deny write
011 = deny read
100 = deny none |
7 |
Inheritance flag
0 = child process inherits handle
1 = child does not inherit handle |
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function successful
Carry flag = clear
AX = handle
If function unsuccessful
Carry flag = set
AX = error code
댓글:
ASCIIZ 경로 이름이 주어지면 이 함수는 지정된 또는 기본 디스크 드라이브의 지정된 또는 기본 디렉토리에서 지정된 파일을 엽니다. 파일에 대한 후속 액세스를 위해 프로그램에서 사용할 수 있는 핸들이 반환됩니다.
INT 21H (0x21)
Function 3EH (0x3E or 62) --> Close file
Call with: AH = 3EH
BX = handle
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
댓글:
이 함수는 파일과 관련된 모든 내부 버퍼를 디스크로 플러시하고, 파일을 닫고, 이전에 열렸거나 주어진 핸들의 성공으로 생성된 핸들을 재사용을 위해 해제합니다. 파일이 수정된 경우 파일의 디렉토리 항목에서 시간 및 날짜 스탬프와 파일 크기가 업데이트됩니다.
INT 21H (0x21)
Function 3FH (0x3F or 63) --> Read file or device
Call with: AH = 3FH
BX = handle
CX = number of bytes to read
DS: DX = segment: offset of buffer
Returns: If function successful
Carry flag = clear
AX = byte transferred
If function unsuccessful
Carry flag = set
AX = error code
댓글:
이 함수는 파일에서 버퍼로 현재 파일 포인터 위치에 있는 데이터를 전송한 다음 이전 열기 또는 만들기 작업에서 주어진 유효한 파일 핸들에 대한 파일 포인터 위치, 버퍼 주소 및 길이(바이트)를 업데이트합니다.
INT 21H (0x21)
Function 40H (0x40 or 64) --> Write file or device
Call with: AH = 40H
BX = handle
CX = number of bytes to write
DS: DX = segment: offset of buffer
Returns: If function successful
Carry flag = clear
AX = byte transferred
If function unsuccessful
Carry flag = set
AX = error code
댓글:
이 함수는 버퍼에서 파일로 데이터를 전송한 다음 이전 열기 또는 만들기 작업에서 주어진 유효한 파일 핸들에 대한 파일 포인터 위치, 버퍼 주소 및 길이(바이트)를 업데이트합니다. 함수가 CX = 0으로 호출되면 파일이 잘리거나 현재 파일 포인터 위치로 확장됩니다.
INT 21H (0x21)
Function 41H (0x41 or 65) --> Delete file
Call with: AH = 41H
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
댓글:
이 함수는 기본 또는 지정된 디스크 및 디렉터리에서 파일을 삭제합니다. 이 함수는 루트 디렉터리에 있는 파일 이름의 첫 번째 문자를 문자 E5H(0xE5)로 바꾸고 파일의 클러스터를 파일 할당 테이블의 새 데이터에 사용할 수 있도록 만들어 파일을 삭제합니다. 그때까지는 해당 클러스터에 저장된 실제 데이터를 덮어쓰지 않습니다.
INT 21H (0x21)
Function 42H (0x42 or 66) --> Set file pointer
Call with: AH = 42H
AL = method code
00H absolute offset from start of file
01H signed offset from current file
pointer
02H signed offset from end of file
BX = handle
CX = most significant half of offset
DX = least significant half of offset
Returns: if function is successful
Carry flag = clear
DX = most significant half of resulting file
pointer
AX = least significant half of resulting file
pointer
If function is unsuccessful
Carry flag = set
AX = error code
댓글:
이 함수는 파일 시작, 파일 끝 또는 현재 파일 위치를 기준으로 파일 포인터 위치를 설정합니다.
INT 21H (0x21)
Function 43H (0x43 or 67) --> Get or set file
attributes
Call with: AH = 43H
AL = 00H to get attributes
01H to set attributes
CX = file attribute, if AL=01H. Bits can be combined
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function successful
Carry flag = clear
CX = file attribute
If function unsuccessful
Carry flag = set
AX = error code
댓글:
이 함수는 파일(읽기 전용, 숨김, 시스템 또는 아카이브) 또는 디렉토리의 속성을 얻거나 변경합니다. 다른 속성에 대한 비트의 중요성은 이전에 제공된 비트 중요성 표를 참조하십시오.
INT 21H (0x21)
Function 44H (0x44 or 68) --> Input/Output
Control (I/O Ctrl)
이 기능은 응용 프로그램과 장치 드라이버 간의 직접적인 통신 경로를 제공합니다. 이를 통해 프로그램은 하드웨어 종속 정보를 얻고 다른 MS-DOS 함수 호출에서 지원하지 않는 작업을 요청할 수 있습니다.
입력 및 출력 제어의 하위 기능은 다음 표에 나와 있습니다.
Sub function |
Operation Name |
00H |
Get Device Information |
01H |
Set Device Information |
02H |
Receive Control Data from Character Device Driver |
03H |
Send Control Data to Character Device Driver |
04H |
Receive Control Data from Block Device Driver |
05H |
Send Control Data to Block Device Driver |
06H |
Check Input Status |
07H |
Check Output Status |
08H |
Check If Block Device Is Removable |
09H |
Check If Block Device Is Remote |
0AH (10) |
Check If Handle Is Remote |
0BH (11) |
Change Sharing Retry Count |
0CH (12)
|
Generic I/O Control for Character Devices
Value |
Description |
CL = 45H |
Set Iteration Count |
CL = 4AH |
Select Code Page |
CL = 4CH |
Start Code Page Preparation |
CL = 4DH |
End Code Page Preparation |
CL = 5FH |
Set Display Information |
CL = 65H |
Get Iteration Count |
CL = 6AH |
Query Selected Code Page |
CL = 6BH |
Query Prepare List |
CL = 7FH |
Get Display Information |
|
0DH (13)
|
Generic I/O Control for Block Devices
Value |
Description |
CL = 40H |
Set Device Parameters |
CL = 41H |
Write Track |
CL = 42H |
Format and Verify Track |
CL = 47H |
Set Access Flag |
CL = 60H |
Get Device Parameters |
CL = 61H |
Read Track |
CL = 62H |
Verify Track |
CL = 67H |
Get Access Flag |
|
0EH (14) |
Get Logical Drive Map |
0FH (15) |
Set Logical Drive Map |
INT 21H (0x21)
Function 44H (0x44 or 68), sub function 00H (0x00)
I/O Ctrl --> get device information
Call with: AH = 44H
AL = 00H
BX = handle
Returns: If function successful
Carry flag = clear
DX = device information word
If function unsuccessful
Carry flag = set
AX = error code
댓글:
이 하위 함수는 지정된 핸들과 관련된 파일 또는 장치에 대한 장치 정보 단어를 반환합니다.
INT 21H (0x21)
Function 44H (0x44 or 68), sub function 01H (0x01)
I/O Ctrl --> set device information
Call with: AH = 44H
AL = 01H
BX = handle
DX = device information word
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
댓글:
INT 21H의 기능 44H의 이 하위 기능은 문자 장치와 관련된 핸들에 대한 특정 플래그를 설정합니다. 이 하위 기능은 파일과 연결된 핸들에 사용할 수 없습니다.
INT 21H (0x21)
Function 44H (0x44 or 68), Sub function 02H (0x02)
I/O Ctrl --> read control data character device
driver
Call with: AH = 44H
AL = 02H
BX = handle
CX = number of bytes to read
DS: DX = segment: offset of buffer
Returns: If function is successful
Carry flag = clear
AX = bytes read
And buffer contains control data from driver
If function is unsuccessful
Carry flag = set
AX = error code
댓글:
문자 장치 드라이버에서 제어 데이터를 읽습니다. 데이터의 길이와 내용은 각 장치 드라이버에 지정되며 표준 형식을 따르지 않습니다. 이 기능은 반드시 물리적 장치로부터 입력을 받는 것은 아닙니다.
INT 21H (0x21)
Function 44H (0x44 or 68), Sub function 03H (0x03)
I/O Ctrl --> write control data character-device
driver
Call with: AH = 44H
AL = 03H
BX = handle
CX = number of bytes to write
DS: DX = segment: offset of data
Returns: If function successful
Carry flag = clear
AX = bytes transferred
If function unsuccessful
Carry flag = set
AX = error code
댓글:
이 하위 기능은 응용 프로그램에서 문자 장치 드라이버로 제어 데이터를 전송합니다. 데이터의 길이와 내용은 각 장치 드라이버에 따라 다르며 표준 형식을 따르지 않습니다. 이 기능은 물리적 장치로 출력되는 경우 반드시 발생하지는 않습니다.
INT 21H (0x21)
Function 44H (0x44 or 68), Sub function 04H (0x04)
I/O Ctrl --> Read control data block-device driver
Call with: AH = 44H
AL = 04H
BL = device code (0= default, 1=A, 2=B, etc.)
CX = number of bytes to read
DS: DX = segment: offset of buffer
Returns: If function successful
Carry flag = clear
AX = bytes transferred
And buffer contains control data from device driver
If function unsuccessful
Carry flag = set
AX = error code
댓글:
이 하위 기능은 블록 장치 드라이버에서 응용 프로그램의 버퍼로 직접 제어 데이터를 전송합니다. 데이터의 길이와 내용은 각 장치 드라이버에 따라 다르며 표준 형식을 따르지 않습니다. 이 기능이 반드시 물리적 장치에서 입력되는 것은 아닙니다.
INT 21H (0x21)
Function 44H (0x44 or 68), Sub function 05H (0x05)
I/O Ctrl --> write control data block-device driver
Call with: AH = 44H
AL = 05H
BL = device code (0= default, 1=A, 2=B, etc.)
CX = number of bytes to write
DS: DX = segment: offset of data
Returns: If function successful
Carry flag = clear
AX = bytes transferred
If function unsuccessful
Carry flag = set
AX = error code
댓글:
이 하위 기능은 응용 프로그램에서 블록 장치 드라이버로 직접 제어 데이터를 전송합니다. 제어 데이터의 길이와 내용은 각 장치 드라이버에 따라 다르며 표준 형식을 따르지 않습니다. 이 기능이 반드시 물리적 장치로 출력되는 것은 아닙니다.
INT 21H (0x21)
Function 44H (0x44 or 68), Sub function 06H (0x06)
I/O Ctrl --> check input status
Call with: AH = 44H
AL = 06H
BX = handle
Returns: If function successful
Carry flag = clear
And for a device:
AL = 00H, if device not ready
FFH, if device ready
For a file:
AL = 00H, if file pointer at EOF
FFH, if file pointer not at EOF
If function unsuccessful
Carry flag = set
AX = error code
댓글:
핸들과 연결된 장치 또는 파일이 입력할 준비가 되었는지 여부를 나타내는 코드를 반환합니다.
INT 21H (0x21)
Function 44H (0x44 or 68), Sub function 07H (0x07)
I/O Ctrl --> check output status
Call with: AH = 44H
AL = 07H
BX = handle
Returns: If function successful
Carry flag = clear
And for a device:
AL = 00H, if device not ready
FFH, if device ready
For a file:
AL = FFH
If function unsuccessful
Carry flag = set
AX = error code
댓글:
핸들과 연결된 장치가 출력할 준비가 되었는지 여부를 나타내는 코드를 반환합니다.
INT 21H (0x21)
Function 44H (0x44 or 68), Sub function 08H (0x08)
I/O Ctrl --> check if block device is removable
Call with: AH = 44H
AL = 08H
BL = drive number (0 = default, 1=A, 2=B, etc.)
Returns: If function successful
Carry flag = clear
AL = 00H, if medium is removable
01H, if medium is not removable
If function unsuccessful
Carry flag = set
AX = error code
댓글:
이 하위 기능은 지정된 블록 장치에 플로피 디스크와 같은 이동식 저장 매체가 포함되어 있는지 확인합니다. 특정 드라이브에서 파일이 예상대로 발견되지 않으면 프로그램은 이 하위 기능을 사용하여 사용자에게 다른 디스크를 삽입하라는 메시지를 표시해야 하는지 여부를 결정할 수 있습니다.
INT 21H (0x21)
Function 44H (0x44 or 68), Sub function 09H (0x09)
I/O Ctrl --> check if block device is remote
Call with: AH = 44H
AL = 09H
BL = drive number (0 = default, 1=A, 2=B, etc.)
Returns: If function successful
Carry flag = clear
DX = device attribute word
bit 12 = 0, if drive is local
= 1, if drive is remote
If function unsuccessful
Carry flag = set
AX = error code
댓글:
이 하위 기능은 지정된 블록 장치가 로컬(프로그램을 실행하는 컴퓨터에 연결됨)인지 원격(네트워크 서버로 리디렉션됨)인지 확인합니다.
INT 21H (0x21)
Function 44H (0x44 or 68), Sub function 0AH (0x0A or 10) I/O Ctrl --> check if handle is remote
Call with: AH = 44H
AL = 0AH
BX = handle
Returns: If function successful
Carry flag = clear
DX = attribute word for file or device
bit 15 = 0 if local
1 if remote
If function unsuccessful
Carry flag = set
AX = error code
댓글:
지정된 핸들이 로컬(프로그램을 실행하는 PC에 위치) 또는 원격(네트워크 서버에 위치)에 있는 파일 또는 장치를 참조하는지 확인합니다.
INT 21H (0x21)
Function 44H (0x44 or 68), Sub function 0BH (0x0B or 11) I/O Ctrl --> change sharing retry count
Call with: AH = 44H
AL = 0BH
CX = delays per retry (default = 1)
DX = number of retries (default = 3)
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
댓글:
이 하위 기능은 MS-DOS가 파일 공유 위반으로 인한 오류 후 요청 프로세스에 오류를 반환하기 전에 디스크 작업을 재시도하는 횟수를 설정합니다. 이 하위 기능은 파일 공유 모듈이 로드되지 않으면 사용할 수 없습니다.
INT 21H (0x21)
Function 44H (0x44 or 68), Sub function 0CH (0x0C or 12) I/O Ctrl generic I/O control for
character devices
Call with: AH = 44H
AL = 0CH
BX = handle
CH =category (major) code:
00H = unknown
01H = COM1, COM2, COM3,OR COM4
03H = CON (keyboard and display)
05H = LPT1, LPT2, OR LPT3
CL = function (minor) code:
45H = Set Iteration Count
4AH = Select Code Page
4CH = Start Code Page Preparation
4DH = End Code Page Preparation
5FH = Set Display Information
65H = Get Iteration Count
6AH = Query Selected Code Page
6BH = Query Prepare List
7FH = Get Display Information
DS: DX = segment: offset of parameter block
Returns: If function successful
Carry flag = clear
And if called with CL = 65H, 6AH, 6BH or 7FH
DS: DX = segment: offset of parameter block
If function unsuccessful
Carry flag = set
AX = error code
댓글:
응용 프로그램과 문자 장치 드라이버 간의 통신을 위한 범용 메커니즘을 제공합니다.
INT 21H (0x21)
Function 44H (0x44 or 68), Sub function 0DH (0x0D or 13) I/O Ctrl --> generic I/O control for block
devices
Call with: AH = 44H
AL = 0DH
BL = drive code (0 =default, 1=A, 2=B, etc.)
CH = category (major) code:
08H = disk drive
CL = function (minor) code:
40H = Set Drive Parameters
41H = Write Track
42H = Format and Verify Track
47H = Set Access Flag
60H = Get Device Parameters
61H = Read Track
62H = Verify track
67H = Get Access Flag
DS: DX = segment: offset of parameter block
Returns: If function successful
Carry flag = clear
And if called with CL = 60H or 61H
DS: DX = segment: offset of parameter block
If function unsuccessful
Carry flag = set
AX = error code
댓글:
이 하위 기능은 응용 프로그램과 블록 장치 드라이버 간의 통신을 위한 범용 메커니즘을 제공합니다. 프로그램이 논리 드라이브에 대한 장치 매개변수를 검사하거나 변경하고 하드웨어 독립적인 방식으로 디스크 트랙을 읽고, 쓰고, 포맷하고, 확인할 수 있도록 합니다.
INT 21H (0x21)
Function 44H (0x44 or 68), Sub function 0EH (0x0E or 14) I/O Ctrl -->> get logical drive map
Call with: AH = 44H
AL = 0EH
BL = drive code (0 = default, 1=A, 2=B, etc.)
Returns: If function successful
Carry flag = clear
AL = mapping code
00H, if only one logical drive code
assigned to the block device
01H-1AH logical drive code (1=A,
2=B, etc.) mapped to the block device
If function unsuccessful
Carry flag = set
AX =error code
댓글:
지정된 블록 드라이브에 액세스하는 데 가장 최근에 사용된 논리 드라이브 코드를 반환합니다.
INT 21H (0x21)
Function 44H (0x44 or 68), Sub function 0FH (0x0F or 15) I/O Ctrl --> set logical drive map
Call with: AH = 44H
AL = 0FH
BL = drive code (0 = default, 1=A, 2=B, etc.)
Returns: If function successful
Carry flag = clear
AL = mapping code
00H, if only one logical drive code
assigned to the block device
01H-1AH, logical drive code (1=A,
2=B, etc.) mapped to the
block device
If function unsuccessful
Carry flag = set
AX = error code
댓글:
이 하위 기능은 블록 장치를 참조하는 데 사용할 다음 논리 드라이브 코드를 설정합니다.
INT 21H (0x21)
Function 45H (0x45 or 69) --> Duplicate handle
Call with: AH = 45H
BX = handle to be duplicated
Returns: If function successful
Carry flag = clear
AX = new handle
If function unsuccessful
Carry flag = set
AX = error code
댓글:
이 함수는 현재 열려 있는 장치 또는 파일에 대해 주어진 핸들에 대해 동일한 위치에 있는 동일한 장치 또는 파일을 참조하는 새 핸들을 반환합니다.
INT 21H (0x21)
Function 46H (0x46 or 70) --> Redirect handle
Call with: AH = 46H
BX = handle for file or device
CX = handle to be redirected
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
댓글:
주어진 핸들이 두 개 있는 경우 이 함수는 두 번째 핸들이 첫 번째 핸들과 동일한 위치에 있는 동일한 장치 또는 파일을 참조하도록 합니다. 그런 다음 두 번째 핸들이 리디렉션된다고 합니다.
INT 21H (0x21)
Function 47H (0x47 or 71) --> Get current
directory
Call with: AH = 47H
DL = drive code (0 =default, 1=A,
2=B, etc.)
DS: SI = segment: offset of 64-byte buffer
Returns: If function is successful
Carry flag = clear
And buffer is filled in with full pathname from root of current directory.
If function is unsuccessful
Carry flag = set
AX = error code
댓글:
이 함수는 루트에서 현재 디렉토리까지의 경로와 해당 디렉토리의 이름을 설명하는 ASCIIZ 문자열을 얻습니다.
INT 21H (0x21)
Function 48H (0x48 or 72) --> Allocate memory
block
Call with: AH = 48H
BX = number of paragraphs of memory
needed
Returns: If function successful
Carry flag = clear
Ax = base segment address of allocated
block
If function unsuccessful
Carry flag = set
AX = error code
BX = size of largest available block
(paragraphs)
댓글:
메모리 블록을 할당하고 할당된 영역의 시작 부분에 대한 포인터를 반환합니다.
INT 21H (0x21)
Function 49H (0x49 or 73) --> Release memory
block
Call with: AH = 49H
ES = segment of block to be released
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
댓글:
이 기능은 메모리 블록을 해제하고 다른 프로그램에서 사용할 수 있도록 하는 데 사용됩니다. 프로그램이 이에 속하지 않는 메모리 블록을 해제하거나 레지스터 ES에 전달된 세그먼트 주소가 기존 메모리 블록에 대한 유효한 기본 주소가 아닌 경우 함수가 실패하거나 예측할 수 없는 시스템 오류가 발생할 수 있습니다.
INT 21H (0x21)
Function 4AH (0x4A or 74) --> Resize memory
block
Call with: AH = 4AH
BX = desired new block size in paragraphs
ES = segment of block to be modified
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
BX = maximum block size available
(paragraphs)
댓글:
이 함수는 응용 프로그램의 필요에 따라 메모리 블록을 동적으로 축소하거나 확장합니다.
INT 21H (0x21)
Function 4BH (0x4B or 75) --> Execute program (EXEC)
Call with: AH = 4BH
AL = sub function
00H = Load and Execute Program
03H = Load Overlay
ES: BX = segment: offset of parameter block
DS: DX = segment: offset of ASCIIZ program
pathname
Returns: If function successful
Carry flag = clear
Registers are preserved in the usual fashion.
If function unsuccessful
Carry flag = set
AX = error code
댓글:
이 기능을 사용하면 응용 프로그램이 다른 프로그램을 실행할 수 있으며 완료되면 다시 제어할 수 있습니다. 일반적이지 않지만 오버레이를 로드하는 데 사용할 수도 있습니다.
INT 21H (0x21)
Function 4CH (0x4C or 76) --> Terminate process
with Return code
Call with: AH = 4CH
AL = return code
Returns: Nothing
댓글:
이 함수는 현재 프로세스를 종료하고 반환 코드를 부모 프로세스에 전달합니다. 이것은 프로그램이 최종 종료를 수행하는 데 사용할 수 있는 여러 방법 중 하나입니다.
INT 21H (0x21)
Function 4DH (0x4D or 77) --> Get return code
Call with: AH = 4DH
Returns: AH = exit type
00H, if normal termination by INT 20H, INT 21H
Function 00H, or INT 21H Functions 4CH
01H if termination by user’s entry of Ctrl-C
02H if termination by critical-error handler
03H if termination by INT21H Function 31H or
INT 27H |
AL = return code passed by child process
(0 if child terminated by INT 20H,
INT 21H Function 00H, or INT 27H)
댓글:
이 함수는 EXEC 호출(INT 21H Function 4BH)의 성공적인 실행 후 부모 프로세스에서 자식 프로세스의 반환 코드와 종료 유형을 가져오는 데 사용됩니다.
INT 21H (0x21)
Function 4EH (0x4E or 78) --> Find first file
Call with: AH = 4EH
CX = search attribute (bits may be combined)
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function successful and matching file found
Carry flag = clear
그리고 다음과 같이 현재 디스크 전송 영역에서 검색 결과가 반환됩니다.
Byte(s) |
Description |
00H-14H |
Reserved (0) |
15H |
Attribute of matched file or directory |
16H-17H |
File time
bits 00H-04H = 2-second increments (0-29)
bits 05H-0AH = minutes (0-59)
bits 0BH-0FH = hours (0-23) |
18H-19H
|
File date
bits 00H-04H = day (1-31)
bits 05H-08H = month (1-12)
bits 09H-0FH = year (relative to 1980) |
1AH-1DH |
File size |
1EH-2AH |
ASCIIZ filename and extension |
If function is unsuccessful
Carry flag = set
AX = error code
댓글:
이 함수는 ASCIIZ 문자열 형식으로 주어진 파일 사양에 대해 일치하는 첫 번째 파일에 대해 기본 또는 지정된 드라이브의 기본 또는 지정된 디렉토리를 검색합니다. 속성의 비트 중요도는 이전에 제공된 비트 중요도 표를 참조하십시오.
INT 21H (0x21)
Function 4FH (0x4F or 79) --> Find next file
Call with: AH = 4FH
Returns: If function is successful and matching file found
Carry flag = clear
If function is unsuccessful
Carry flag = set
AX = error code
댓글:
이전에 INT 21H Function 4EH에 대한 성공적인 호출이 있는 경우 이 함수는 기본 또는 지정된 드라이브에서 원래 파일 사양과 일치하는 다음 파일을 찾습니다.
INT 21H (0x21)
Function 50H (0x50 or 80) --> Reserved
INT 21H (0x21)
Function 51H (0x51 or 81) --> Reserved
INT 21H (0x21)
Function 52H (0x52 or 82) --> Reserved
INT 21H (0x21)
Function 53H (0x53 or 83) --> Reserved
INT 21H (0x21)
Function 54H (0x54 or 84) --> Get verify flag
Call with: AH = 54H
Returns: AL = current verify flag value
00H if verify off
01H if verify on
댓글:
이 함수는 시스템 확인(쓰기 후 읽기) 플래그의 현재 값을 가져옵니다.
INT 21H (0x21)
Function 55H (0x55 or 85) --> Reserved
INT 21H (0x21)
Function 56H (0x56 or 86) --> Rename file
Call with: AH = 56H
DS: DX = segment: offset of current ASCIIZ
pathname
ES: DI = segment: offset of new ASCIIZ
pathname
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
댓글:
이 기능은 파일의 이름을 바꾸거나 해당 디렉토리 항목을 동일한 디스크의 다른 위치로 이동합니다. MS-DOS 버전 3.0 이상에서는 이 기능을 사용하여 디렉터리 이름을 변경할 수도 있습니다.
경로 이름의 요소가 존재하지 않거나 새 경로 이름을 가진 파일이 이미 존재하거나 현재 경로 이름 지정에 새 경로 이름과 다른 디스크 드라이브가 포함되어 있거나 파일이 루트 디렉토리로 이동되고 루트가 디렉토리가 꽉 찼거나 사용자에게 권한이 충분하지 않으면 파일 이름을 바꾸는 기능이 실패합니다.
INT 21H (0x21)
Function 57H (0x57 or 87) --> Get or set file date and time
Call with: If getting date and time
AH = 57H
AL = 00H
BX = handle
If setting date and time
AH = 57H
AL = 01H
BX = handle
CX = time
bits 00H-04H = 2-second increments (0-29)
bits 05H-0AH = minutes (0-59)
bits 0BH-0FH = hours (0-23)
DX = date
bits 00H-04H = day (1-31)
bits 05H-08H = month (1-12)
bits 09H-0FH = year (relative to 1980)
Returns: If function successful
Carry flag = clear
and, if called with AL = 00H
CX = time
DX = date
If function unsuccessful
Carry flag = set
AX = error code
댓글:
이 함수는 파일의 루트 디렉토리 항목에서 날짜 및 시간 스탬프를 얻거나 수정합니다.
INT 21H (0x21)
Function 58H (0x58 or 88) --> Get or set allocation strategy
Call with: If getting strategy code
AH = 58H
AL = 00H
If setting strategy code
AH = 58H
AL = 01H
BX = desired strategy code
00H = first fit
01H = best fit
02H = last fit
Returns: If function successful
Carry flag = clear
and, if called with AL = 00H
AX = current strategy code
If function unsuccessful
Carry flag = set
AX = error code
댓글:
메모리 블록 할당을 위한 현재 MS-DOS 전략을 나타내는 코드를 얻거나 변경합니다. 기본 MS-DOS 메모리 할당 전략은 First Fit(코드 0)입니다.
첫 번째 맞춤 메모리 할당에서 MS-DOS는 사용 가능한 메모리 블록을 낮은 주소에서 높은 주소로 검색하여 블록 할당 요청을 충족할 만큼 충분히 큰 첫 번째 메모리를 할당합니다.
최적의 할당 전략의 경우 MS-DOS는 사용 가능한 모든 메모리 블록을 검색하고 위치에 관계없이 요청을 충족할 가장 작은 사용 가능한 블록을 할당합니다.
Last fit 메모리 할당 전략에서 MS-DOS는 상위 주소에서 하위 주소로 사용 가능한 메모리 블록을 검색하여 블록 할당 요청을 충족하기에 충분히 큰 가장 높은 메모리 블록을 할당합니다.
INT 21H (0x21)
Function 59H (0x59 or 89) --> Get extended error
Information
Call with: AH = 59H
BX = 00H
Returns: AX = extended error code
오류 코드 표는 다음과 같습니다.
Error Code |
Error |
01H |
function number invalid |
02H |
file not found |
03H |
path not found |
04H |
too many open files |
05H |
access denied |
06H |
handle invalid |
07H |
memory control blocks destroyed |
08H |
insufficient memory |
09H |
memory block address invalid |
0AH (10) |
environment Invalid |
0BH (11) |
format invalid |
0CH (12) |
access code invalid |
0DH (13) |
data invalid |
0EH (14) |
unknown unit |
0FH (15) |
disk drive invalid |
10H (16) |
attempted to remove current directory |
11H (17) |
not same device |
12H (18) |
no more files |
13H (19) |
disk write-protected |
14H (20) |
unknown unit |
15H (21) |
drive not ready |
16H (22) |
unknown command |
17H (23) |
data error (CRC) |
18H (24) |
bad request structure length |
19H (25) |
seek error |
1AH (26) |
unknown media type |
1BH (27) |
sector not found |
1CH (28) |
printer out of paper |
1DH (29) |
write fault |
1EH (30) |
read fault |
1FH (31) |
general failure |
20H (32) |
sharing violation |
21H (33) |
lock violation |
22H (34) |
disk change invalid |
23H (35) |
FCB unavailable |
24H (36) |
sharing buffer exceeded |
25H-31H |
reserved |
32H (50) |
unsupported network request |
33H (51) |
remote machine not listening |
34H (52) |
duplicate name on network |
35H (53) |
network name not found |
36H (54) |
network busy |
37H (55) |
device no longer exists on network |
38H (56) |
net BIOS command limit exceeded |
39H (57) |
error in network adapter hardware |
3AH (58) |
incorrect response from network |
3BH (59) |
unexpected network error |
3CH (60) |
remote adapter incompatible |
3DH (61) |
print queue full |
3EH (62) |
not enough space for print file |
3FH (63) |
print file canceled |
40H (64) |
network name deleted |
41H (65) |
network access denied |
42H (66) |
incorrect network device type |
43H (67) |
network name not found |
44H (68) |
network name limit exceeded |
45H (69) |
net BIOS session limit exceeded |
46H (70) |
file sharing temporarily paused |
47H (71) |
network request not accepted |
48H (72) |
print or disk redirection paused |
49H-4FH |
reserved |
50H (80) |
file already exists |
51H (81) |
reserved |
52H (82) |
cannot make directory |
53H (83) |
fail on INT 24H (critical error) |
54H (84) |
too many redirections |
55H (85) |
duplicate redirection |
56H (86) |
invalid password |
57H (87) |
invalid parameter |
58H (88) |
network device fault |
59H (89) |
function not supported by network |
5AH (90) |
required system component not installed |
BH = error class
01H |
if out of resource (such as storage or handles) |
02H |
if not error, but temporary situation (such as locked region in file) that can be expected to end |
03H |
if authorization problem |
04H |
if internal error in system software |
05H |
if hardware failure |
06H |
if system software failure not the fault of the active process (such as missing configuration files) |
07H |
if application program error |
08H |
if file or item not found |
09H |
if file or item of invalid type or format |
0AH (10) |
if file or item locked |
0BH (11) |
if wrong disk in drive, bad spot on disk, or storage medium problem |
0CH (12) |
if item already exists |
0DH (13) |
unknown error |
BL = recommend action
01H |
Retry reasonable number of times, then prompt user to select abort or ignore |
02H |
retry reasonable number of times with delay between retries, then prompt user to select abort or ignore |
03H |
get correct information from user (typically caused by incorrect file name or device specification) |
04H |
abort application with cleanup (i.e., terminate the program in as orderly a manner as possible: releasing locks, closing files, etc.) |
05H |
perform immediate exit without cleanup |
06H |
ignore error |
07H |
retry after user intervention to remove cause of error |
CH = error locus
01H unknown
02H block device (disk or disk emulator)
03H network
04H serial device
05H memory
ES: DI = ASCIIZ volume label of disk to
insert, if AX = 0022H (invalid disk change)
댓글:
이 함수는 권장되는 수정 조치를 포함하여 이전에 실패한 INT 21H 함수 호출 후 자세한 오류 정보를 얻습니다.
INT 21H (0x21)
Function 5AH (0x5A or 90) --> Create temporary
file
Call with: AH = 5AH
CX = attribute (bits may be combined)
DS: DX = segment: offset of ASCIIZ path
Returns: If function is successful
Carry flag = clear
AX = handle
DS: DX = segment: offset of complete ASCIIZ
pathname
If function is unsuccessful
Carry flag = set
AX = error code
댓글:
이 함수는 기본 또는 지정된 디스크 드라이브의 현재 또는 지정된 디렉토리에 고유한 이름을 가진 파일을 생성하고 파일에 대한 후속 액세스를 위해 프로그램에서 사용할 수 있는 핸들을 반환합니다. 파일에 대해 생성된 이름은 프로그램에서 지정한 버퍼에도 반환됩니다.
경로 이름의 요소가 존재하지 않거나 파일이 루트 디렉토리에 생성 중이고 루트 디렉토리가 가득 차면 기능이 실패합니다.
INT 21H (0x21)
Function 5BH (0x5B or 91) --> Create new file
Call with: AH = 5BH
CX = attribute (bits may be combined)
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function is successful
Carry flag = clear
AX = handle
If function is unsuccessful
Carry flag = set
AX = error code
댓글:
이 함수는 지정된 또는 기본 드라이브의 지정된 또는 기본 디렉터리에 파일을 만들고 지정된 ASCIIZ 경로 이름에 대한 파일에 대한 후속 액세스를 위해 프로그램에서 사용할 수 있는 핸들을 반환합니다.
동일한 이름과 경로를 가진 파일이 이미 존재하거나 지정된 경로의 요소가 존재하지 않거나 파일이 루트 디렉토리에 생성 중이고 루트 디렉토리가 가득 찼거나 사용자에게 액세스 권한이 충분하지 않은 경우 기능이 실패합니다.
INT 21H (0x21)
Function 5CH (0x5C or 92) --> Lock or unlock file region
Call with: AH = 5CH
AL = 00H if locking region
01H if unlocking region
BX = handle
CX = high part of region offset
DX = low part of region offset
SI = high part of region length
DI = low part of region length
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
댓글:
이 함수는 파일의 지정된 영역을 잠그거나 잠금 해제합니다. 파일 공유 모듈(예: SHARE.EXE)이 로드되지 않으면 이 기능을 사용할 수 없습니다.
INT 21H (0x21)
Function 5DH (0x5D or 93) --> Reserved
INT 21H (0x21)
Function 5EH (0x5E or 94), sub function 00H (0x00)
--> Get machine name
Call with: AH = 5EH
AL = 00H
DS: DX = segment: offset of buffer to receive
string
Returns: If function is successful
Carry flag = clear
CH = 00H if name not defined
<> 00H if name defined
CL = netBIOS name number (if CH <> 0)
DX: DX = segment: offset of identifier (if CH <> 0)
If function is unsuccessful
Carry flag = set
AX = error code
댓글:
이 하위 함수는 로컬 컴퓨터를 식별하는 ASCIIZ 문자열의 주소를 반환합니다. 이 함수 호출은 Microsoft 네트워크가 실행 중일 때만 사용할 수 있습니다.
INT 21H (0x21)
Function 5EH (0x5E or 94), sub function 02H (0x02)
--> Set printer setup string
Call with: AH = 5EH
AL = 02H
BX = redirection list index
CX = length of setup string
DS: SI = segment: offset of setup string
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
댓글:
이 하위 기능은 특정 네트워크 프린터로 향하는 모든 파일 앞에 보낼 문자열을 지정하여 다른 네트워크 노드의 사용자가 동일한 프린터에서 개별 작동 모드를 지정할 수 있도록 합니다.
INT 21H (0x21)
Function 5EH (0x5E or 94), sub function 03H (0x03)
--> Get printer setup string
Call with: AH = 5EH
AL = 03H
BX = redirection list index
ES: DI = segment: offset of buffer to receive
setup string
Returns: If function successful
Carry flag = clear
CX = length of printer setup string
ES: DI = segment: offset of buffer to receive
setup string
If function unsuccessful
Carry flag = set
AX = error code
댓글:
이 함수는 특정 네트워크 프린터에 대한 프린터 설정 문자열을 얻는 데 사용됩니다.
INT 21H (0x21)
Function 5FH (0x5F or 95), sub function 02H (0x02)
--> Get redirection list entry
Call with: AH = 5FH
AL = 02H
BX = redirection list index
DS: SI = segment: offset of 16-byte buffer to
receive local device name
ES: DI = segment: offset of 128-byte buffer to
receive network name
Returns: If function successful
Carry flag = clear
BH = device status flag
Bit 0 = 0 if device valid
= 1 if not valid
BL = device type
03H, if printer
04H, if drive
CX = stored parameter value
DX = destroyed
BP = destroyed
DS: SI = segment: offset of ASCIIZ local
device name
ES: DI = segment: offset of ASCIIZ network
name
If function unsuccessful
Carry flag = set
AX = error code
댓글:
이 하위 기능을 사용하면 로컬 논리 이름을 네트워크 파일, 디렉터리 또는 프린터와 연결하는 시스템 리디렉션 목록을 검사할 수 있습니다. 이 함수 호출은 Microsoft Networks가 실행 중이고 파일 공유 모듈이 로드된 경우에만 사용할 수 있습니다.
INT 21H (0x21)
Function 5FH (0x5F or 95), sub function 03H (0x03) --> Redirect device
Call with: AH = 5FH
AL = 03H
BL = device type
03H, if printer
04H, if drive
DS: SI = segment: offset of ASCIIZ local
device name
ES: DI = segment: offset of ASCIIZ network
name, followed by ASCIIZ password
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
댓글:
로컬 장치 이름을 네트워크 이름과 연결하여 네트워크를 통한 리디렉션을 설정합니다. 이 함수 호출은 Microsoft 네트워크가 실행 중이고 파일 공유 모듈(SHARE.EXE)이 로드된 경우에만 사용할 수 있습니다.
INT 21H (0x21)
Function 5FH (0x5F or 95), sub function 04H (0x04)
--> Cancel device redirection
Call with: AH = 5FH
AL = 04H
DS: SI = segment: offset of ASCIIZ local
device name
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
댓글:
이 하위 기능은 로컬 장치 이름과 네트워크 이름의 연결을 제거하여 이전 리디렉션 요청을 취소합니다. 이 함수 호출은 Microsoft 네트워크가 실행 중이고 SHARE.EXE와 같은 파일 공유 모듈이 로드된 경우에만 사용할 수 있습니다.
INT 21H (0x21)
Function 60H (0x60 or 96) --> Reserved
INT 21H (0x21)
Function 61H (0x61 or 97) --> Reserved
INT 21H (0x21)
Function 62H (0x62 or 98) --> Get Program Segment
Prefix (PSP) address
Call with: AH = 62H
Returns: BX = segment address of program segment
prefix
댓글:
이 함수는 현재 실행 중인 프로그램에 대한 프로그램 세그먼트 접두사(PSP)의 세그먼트(단락) 주소를 가져옵니다.
INT 21H (0x21)
Function 64H (0x64 or 100) --> Reserved
INT 21H
Function 65H (0x65 or 101) --> Get extended
country Information
Call with: AH = 65H
AL = sub function
00H = Get General
Internationalization Information
02H = Get Pointer to Uppercase
Table
04H = Get Pointer to Filename
Uppercase Table
06H = Get Pointer to Collating Table
07H = Get Pointer to Double-Byte
Character Set (DBCS) Vector
BX = code page of interest (-1 = active
CON device)
CX = length of buffer to receive
information (must be >=5)
DX = country ID (-1 = default)
ES: DI = address of buffer to receive
information
Returns: If function successful
Carry flag = clear
And requested data placed in calling program’s buffer
If function unsuccessful
Carry flag = set
AX = error code
댓글:
지정된 국가 및/또는 코드 페이지에 대한 정보를 가져옵니다. 정보 바이트에 대한 정보는 이전에 제공된 국제화 표를 참조하십시오.
INT 21H (0x21)
Function 66H (0x66 or 102) --> Get or set code
page
Call with: AH = 66H
AL = sub function
01H = Get Code Page
02H = Select Code Page
BX = code page to select, if AL = 02H
Returns: If function is successful
Carry flag = clear
And, if called with AL = 01H
BX = active code page
DX = default code page
If function is unsuccessful
Carry flag = set
AX = error code
댓글:
이 함수는 현재 코드 페이지를 가져오거나 선택합니다.
INT 21H (0x21)
Function 67H (0x67 or 103) --> Set handle count
Call with: AH = 67H
BX = number of desired handles
Returns: If function is successful
Carry flag = clear
If function is unsuccessful
Carry flag = set
AX = error code
댓글:
이 함수는 현재 프로세스에서 핸들을 사용하여 동시에 열 수 있는 최대 파일 및 장치 수를 설정합니다.
INT 21H (0x21)
Function 68H (0x68 or 104) --> Commit file
Call with: AH = 68H
BX = handle
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
댓글:
이 기능은 지정된 핸들과 연결된 MS DOS의 내부 버퍼에 있는 모든 데이터가 물리적으로 장치에 기록되도록 합니다. 핸들이 파일을 참조하고 파일이 수정된 경우 파일의 루트 디렉토리 항목에 있는 시간 및 날짜 스탬프와 파일 크기가 업데이트됩니다.
INT 21H (0x21)
Function 69H (0x69 or 105) --> Reserved
INT 21H (0x21)
Function 6AH (0x6A or 106) --> Reserved
INT 21H (0x21)
Function 6BH (0x6B or 107) --> Reserved
INT 21H (0x21)
Function 6CH (0x6C or 108) --> Extended open file
Call with: AH = 6CH
AL = 00H
BX = open mode
Bit(s) |
Significance |
0-2 |
Access type
000 = read-only
001 = write-only
010 = read/write |
3 |
Reserved (0) |
4-6 |
Sharing mode
000 = compatibility
001 = deny read/write (deny all)
010 = deny write
011 = deny read
100 = deny none |
7 |
Inheritance
0 = child process inherits handle
1 = child does not inherit handle |
8-12 |
Reserved (0) |
13 |
Critical error handling
0 = execute INT 24H
1 = return error to process |
14 |
Write-through
0 = writes may be buffered and deferred
1 = physical write at request time |
15 |
Reserved (0) |
CX = file attribute (bits may be combined;
if ignored if openrefer Bits Significance table.
DX = open flag
Bit(s) |
Significance |
0-3 |
Action if file exists
0000 = fail
0001 = open file
0010 = replace file |
4-7 |
Action if file does not exists
0000 = fail
0001 = create file |
8-15 |
Reserved (0) |
DS: SI = segment: offset of ASCIIZ pathname
Returns:mIf function successful
Carry flag = clear
AX = handle
CX = action taken
1 = file existed and was
opened
2 = file did not exists and
was created
3 = file existed and was
replaced
If function unsuccessful
Carry flag = set
AX = error code
댓글:
이 함수는 지정된 ASCIIZ 경로 이름에 대해 지정된 또는 기본 디스크 드라이브의 지정된 또는 기본 디렉토리에 있는 파일을 열거나 생성하거나 대체하고 파일에 대한 후속 액세스를 위해 프로그램에서 사용할 수 있는 핸들을 반환합니다.
경로 이름의 요소가 존재하지 않거나 파일이 루트 디렉토리에 생성 중이고 루트 디렉토리가 가득 차거나 파일이 생성되고 동일한 이름과 읽기 전용 속성을 가진 파일이 이미 존재하는 경우 지정된 디렉토리 또는 사용자의 액세스 권한이 충분하지 않으면 기능이 실패합니다.