Assembler






, ,
DOS - FCB (File
Control Block),
.
 

DOS.
FCB. .5.5
FCB. FCB,
FCB, ,
"" . . ,
,
FCB.
. -
.
FCB.
 
FCB .
, .
,
. - ,
-

.
.
,
, .

. , ,
.
,
. ,
, DOS 1
, .

Ŀ
0
Ŀ
1

9

0
Ĵ
0E
Ŀ
10

14
Ŀ
16

20
Ŀ ( )
21


. 5.5
 

.
.
.
 
,
. ,
. , ,
.
- ,
.
 

. DOS
FCB .

.
. ,

,
.
 
,
FCB DOS. . 5.6 ,
. -
FCB DOS, 21H.

.
Microsoft (R) Macro Assembler Version 5.00 1/1/80 04:02:12
. 5.6 Page 1-1
 
 
PAGE ,132
TITLE . 5.6
0000 CODE SEGMENT
005C ORG 05CH ; FCB
005C FCB LABEL BYTE ; FCB
005C ?? FCB_DRIVE DB ? ;
005D 0008[ FCB_NAME DB 8 DUP (?) ;
??
]
0065 0003[ FCB_EXT DB 3 DUP (?) ;
??
]
 
0068 ???? FCB_BLOCK DW ? ;
006A ???? FCB_RECORD_SIZE DW ? ;
006C ???????? FCB_FILE_SIZE DD ? ;
0070 ???? FCB_DATE DW ? ;
0072 000A[ FCB_RESV DB 10 DUP (?) ;
??
]
007C ?? FCB_CURRENT_RECORD DB ? ;
007D ???????? FCB_RANDOM_RECORD DD ? ;
;
0090 ORG 090H
0090 DISK_TRANSFER_ADDRESS LABEL BYTE ;
 
0100 ORG 100H
ASSUME CS:CODE,DS:CODE,ES:CODE
0100 E9 01CD R JMP PROGRAM_START ;
 
= 0020 RECORD_SIZE EQU 32 ;
0103 03 00 00 00 00 KEYBOARD_BUFFER DB 3, 0, 0, 0, 0 ;
0108 94 A0 A9 AB 20 E3 A6 FILE_ERROR_MSG DB ' ', 10, 13, '$'
A5 20 E1 E3 E9 A5 E1
E2 A2 E3 A5 E2 0A 0D
24
011E 8D A5 A2 AE A7 AC AE BAD_OPEN_MSG DB ' ', 10, 13, '$'
A6 AD AE 20 AE E2 AA
E0 EB E2 EC 20 E4 A0
A9 AB 0A 0D 24
0138 8E E8 A8 A1 AA A0 20 BAD_WRITE_MSG DB ' ', 10, 13, '$'
AF E0 A8 20 A7 A0 AF
A8 E1 A8 20 A2 20 E4
A0 A9 AB 0A 0D 24
0153 8E E8 A8 A1 AA A0 20 BAD_READ_MSG DB ' ', 10, 13, '$'
AF E0 A8 20 E7 E2 A5
AD A8 A8 20 E4 A0 A9
AB A0 0A 0D 24
016D 8E E8 A8 A1 AA A0 20 BAD_CLOSE_MSG DB ' ', 10, 13, '$'
 
. 5.6 DOS ()
AF E0 A8 20 A7 A0 AA
E0 EB E2 A8 A8 20 E4
A0 A9 AB A0 0A 0D 24
 
0189 8F E0 A8 20 A2 A2 AE INPUT_BAD_MSG DB ' ', 10, 13, '$'
A4 A5 20 E2 E0 A5 A1
E3 A5 E2 E1 EF 20 A4
A2 A0 20 E1 A8 AC A2
AE AB A0 0A 0D 24
01AB 82 A2 AE A4 20 A4 AE CHAR_BAD_MSG DB ' : |', 10, 13, '$'
AB A6 A5 AD 20 A1 EB
E2 EC 3A 20 E1 A8 AC
A2 AE AB 7C E1 A8 AC
A2 AE AB 0A 0D 24
 
;----- ( )
 
01CD PROGRAM_START:
01CD B4 1A MOV AH, 1AH ;
01CF 8D 16 0090 R LEA DX, DISK_TRANSFER_ADDRESS
01D3 CD 21 INT 21H
 
;-----
 
01D5 B4 11 MOV AH, 11H ;
01D7 8D 16 005C R LEA DX, FCB ;
01DB CD 21 INT 21H
01DD 0A C0 OR AL, AL
01DF 75 0A JNZ NO_FILE ;
01E1 8D 16 0108 R LEA DX, FILE_ERROR_MSG ;
01E5 ERROR_EXIT: ;
01E5 B4 09 MOV AH, 9H ;
01E7 CD 21 INT 21H ;
01E9 CD 20 INT 20H
 
;-----
01EB NO_FILE:
01EB B4 16 MOV AH, 16H ;
01ED 8D 16 005C R LEA DX, FCB
01F1 CD 21 INT 21H
01F3 0A C0 OR AL, AL ;
01F5 74 06 JZ CREATE_OK
01F7 8D 16 011E R LEA DX, BAD_OPEN_MSG ;
01FB EB E8 JMP ERROR_EXIT ;
 
;----- FCB
01FD CREATE_OK:
01FD C6 06 007C R 00 MOV FCB_CURRENT_RECORD, 0 ;
0202 C7 06 007D R 0000 MOV WORD PTR FCB_RANDOM_RECORD, 0 ;
0208 C7 06 007F R 0000 MOV WORD PTR FCB_RANDOM_RECORD+2, 0
020E C7 06 006A R 0020 MOV WORD PTR FCB_RECORD_SIZE, RECORD_SIZE
 
. 5.6 DOS ()
;-----
 
0214 B0 41 MOV AL, 'A' ;
0216 CHARACTER_LOOP: ;
 
0216 8D 3E 0090 R LEA DI, DISK_TRANSFER_ADDRESS
021A B9 0020 MOV CX, RECORD_SIZE
021D F3/ AA REP STOSB ;
021F 50 PUSH AX ;
0220 8D 16 005C R LEA DX, FCB
0224 B4 15 MOV AH, 15H ;
0226 CD 21 INT 21H ;
0228 0A C0 OR AL, AL ;
022A 58 POP AX ;
022B 74 06 JZ WRITE_OK
022D 8D 16 0138 R LEA DX, BAD_WRITE_MSG ;
0231 EB B2 JMP ERROR_EXIT
0233 WRITE_OK:
0233 FE C0 INC AL ;
0235 3C 5B CMP AL, 'Z'+1 ;
0237 75 DD JNE CHARACTER_LOOP ;
 
;-----
0239 KEYBOARD_LOOP: ;
0239 8D 16 0103 R LEA DX, KEYBOARD_BUFFER ;
023D B4 0A MOV AH, 0AH ;
023F CD 21 INT 21H ;
0241 80 3E 0104 R 02 CMP KEYBOARD_BUFFER+1, 2 ; ?
0246 74 0A JE KEY_INPUT_OK
0248 8D 16 0189 R LEA DX, INPUT_BAD_MSG ;
024C KEYBOARD_ERROR:
024C B4 09 MOV AH, 9H
024E CD 21 INT 21H ;
0250 EB E7 JMP KEYBOARD_LOOP ;
0252 KEY_INPUT_OK:
0252 8D 16 01AB R LEA DX, CHAR_BAD_MSG ;
;
0256 A0 0105 R MOV AL, KEYBOARD_BUFFER+2 ;
0259 3C 24 CMP AL, '$' ;
025B 75 03 JNE CHANGE_RECORD ;
025D EB 5C 90 JMP PROGRAM_EXIT
 
;-----
0260 CHANGE_RECORD:
0260 3C 41 CMP AL, 'A' ; ,
0262 7C E8 JL KEYBOARD_ERROR ; A-Z
0264 3C 5A CMP AL, 'Z'
0266 77 E4 JA KEYBOARD_ERROR
0268 2A E4 SUB AH, AH ;
026A 2C 41 SUB AL, 'A' ;
026C A3 007D R MOV word ptr FCB_RANDOM_RECORD, AX ; FCB
026F 8D 16 005C R LEA DX, FCB
0273 B4 21 MOV AH, 21H ;
0275 CD 21 INT 21H
 
. 5.6 DOS ()
0277 0A C0 OR AL, AL ;
0279 74 07 JE RANDOM_RECORD_OK
027B 8D 16 0153 R LEA DX, BAD_READ_MSG ;
 
027F E9 01E5 R JMP ERROR_EXIT
 
;-----
 
0282 RANDOM_RECORD_OK:
0282 C6 06 00B0 R 0A MOV DISK_TRANSFER_ADDRESS+32, 10 ;
0287 C6 06 00B1 R 0D MOV DISK_TRANSFER_ADDRESS+33, 13 ;
028C C6 06 00B2 R 24 MOV DISK_TRANSFER_ADDRESS+34, '$' ;
0291 B4 09 MOV AH, 9H
0293 8D 16 0090 R LEA DX, DISK_TRANSFER_ADDRESS
0297 CD 21 INT 21H ;
 
;-----
 
0299 A0 0106 R MOV AL, KEYBOARD_BUFFER+3 ; ,
029C B9 001F MOV CX, RECORD_SIZE-1 ;
029F 8D 3E 0091 R LEA DI, DISK_TRANSFER_ADDRESS+1
02A3 F3/ AA REP STOSB ; 31
02A5 B4 22 MOV AH, 22H
02A7 8D 16 005C R LEA DX, FCB
02AB CD 21 INT 21H ;
;
02AD 0A C0 OR AL, AL ;
02AF 74 07 JZ RANDOM_WRITE_OK
02B1 8D 16 0138 R LEA DX, BAD_WRITE_MSG ;
02B5 E9 01E5 R JMP ERROR_EXIT
02B8 RANDOM_WRITE_OK:
02B8 E9 0239 R JMP KEYBOARD_LOOP ;
 
;-----
 
02BB PROGRAM_EXIT:
02BB B4 10 MOV AH, 10H ;
02BD 8D 16 005C R LEA DX, FCB
02C1 CD 21 INT 21H
02C3 0A C0 OR AL, AL ;
02C5 74 07 JZ CLOSE_OK
02C7 8D 16 016D R LEA DX, BAD_CLOSE_MSG ;
02CB E9 01E5 R JMP ERROR_EXIT
02CE CLOSE_OK:
02CE CD 20 INT 20H ;
02D0 CODE ENDS
END
 
. 5.6 DOS ()
 
.
26 32 .
: 1 - "AAAA...A",
2 - "BBBB...B" ..
. Mincho"'> .

26 .
: 31 ,
, , .

"$".
 
.
.

.
,
,
, .
 
, . 5.6, - .COM.

.EXE. .COM
INT
20H. .COM
100H. 100H
PSP
, ,
.
 
FCB 05CH,

. FCB
, DOS.
, , , DOS

. FCB,
05CH.
, FCB 06CH.
,
FCB 05CH.
:
 
A> FIG5=6 TEST.FIL
 
FIG5=6 - .
FIG5=6.COM. TEST.FIL ,
.
"TEST.FIL"
FCB 05CH.
,
.
, .
 
05CH,
FCB.
FCB. FCB ,
. ,
,
FCB_RECORD_SIZE.
 
080H
. 128
DTA (Disk
Transfer Area) DOS
. , , DOS
DTA. DOS
DTA
080H. , 1AH
21H. ,
, 128 .
, 90H.
, FCB 05CH
80H. DTA ,
,
FCB .
.
-
,
.
 
100H
.
,
,
, .
, .
.
 

. 90H.
32 ,
.
 
21H DOS
, ,
FCB. , DC:DX
FCB, .
, ,
.
.
, ,
. ,
, ,
.
 
,
NO_FILE. FCB ,
.
, , -

,
.
DOS , ,
.
.
DOS ,
( , )
FCB, . ,
, DOS
, . DOS
FCB ,
"". "" ""
.
,
, ,
.
 

. ,
(AH=0FH).
,
FCB. ,
32 , DOS
128 .
 
CHARACTER_LOOP 26
.
DTA REP STOSB.
(AH=0AH).
.
 
KEYBOARD_LOOP
= .
,
DOS.
, , .

. ,
,
.
 
"$"
. "A" "Z"

. 31
.
.
 
.
,
DOS ,
 
??????
 
, DOS
.
DOS .
, DOS
.
.
 
. 5.6
DOS.
,
,
DOS.

, DOS. , DOS
24H ,
,
.

.
,

.
 
, , ,
:
,

, .
, -,
.