📄 fcbwrit.asm
字号:
stack segment para stack 'stack'
dw 80 dup (?)
stack ends
;-----------------------------------------
dseg segment para 'data'
reclen equ 16
stureclen equ 6*reclen
namepar label byte
maxlen db reclen
namelen db ?
namedta db stureclen dup(' ')
;-----
fcbrec label byte
fcbdriv db 0
fcbname db 'namefile'
fcbext db 'dat'
fcbblk dw 0
fcbrcsz dw ?
fcbflsz dd ?
dw ?
dt ?
fcbsqrc db 0
dd ?
;-----
crlf db 13,10,'$'
errcde db 0
prompt db 'name ?','$'
prompt1 db 'num ?','$'
prompt2 db 'sex ?','$'
prompt3 db 'shengyuan ?','$'
prompt4 db 'score ?','$'
row db 01
opnmsg db '*** open error ***','$'
wrtmsg db '*** write error ***','$'
;---------
displa db ' ****** Welcome ******',0ah,0dh,'$'
displa1 db ' Please input (1-3)',0ah,0dh,'$'
displa2 db ' 1==input 2==search 3===output',0ah,0dh,'$'
dseg ends
;------------------------------------------
cseg segment para 'code'
begin proc far
assume cs:cseg,ds:dseg,ss:stack,es:dseg
push ds
sub ax,ax
push ax
mov ax,dseg
mov ds,ax
mov es,ax
mov ah,6
mov al,0
call scro
call curs
;========
lea dx,displa
mov ah,09h
int 21h
lea dx,displa1
int 21h
lea dx,displa2
int 21h
mov ah,1
int 21h
cmp al,'1'
je inpt
jmp mainout
inpt: call createf
cmp errcde,0
jz contin
ret
contin: call inputf
cmp namelen,0
jne contin
call clsef
mainout: ret
begin endp
;------------------------
createf proc near
mov ah,16h
lea dx,fcbrec
int 21h
cmp al,0
jnz err1
mov fcbrcsz,stureclen
lea dx,namedta
mov ah,1ah
int 21h
ret
err1: lea dx,opnmsg
call errm
ret
createf endp
;------------------------
inputf proc near
namee: mov ah,09
lea dx,prompt
int 21h
mov ah,0ah
lea dx,namepar
int 21h
call disp
cmp namelen,0
je escc
;--------------------------------
numm: mov ah,09
lea dx,prompt1
int 21h
mov ah,0ah
lea dx,namepar+16
int 21h
call disp
cmp namelen,0
je numm
;---------------------------
sexx: mov ah,09
lea dx,prompt2
int 21h
mov ah,0ah
lea dx,namepar+32
int 21h
call disp
cmp namelen,0
je sexx
;---------------------------
shengyuan: mov ah,09
lea dx,prompt3
int 21h
mov ah,0ah
lea dx,namepar+48
int 21h
call disp
cmp namelen,0
je shengyuan
;------------------------------
score: mov ah,09
lea dx,prompt4
int 21h
mov ah,0ah
lea dx,namepar+64
int 21h
call disp
cmp namelen,0
je score
jmp blank
escc: ret
blank: mov bh,0
mov bl,stureclen
mov namedta[bx],' '
call writef
cld
lea di,namedta
mov cx,reclen/2
mov ax,2020h
rep stosw
ret
inputf endp
;--------------------------------
disp proc near
mov ah,09
lea dx,crlf
int 21h
cmp row,18h
jne pass
inc row
ret
pass: mov ah,06
mov al,01
call scro
call curs
ret
disp endp
;-------------------
writef proc near
mov ah,15h
lea dx,fcbrec
int 21h
cmp al,0
jz valid
lea dx,wrtmsg
call errm
mov namelen,0
valid: ret
writef endp
;---------------------
clsef proc near
mov namedta,1ah
call writef
mov ah,10h
lea dx,fcbrec
int 21h
ret
clsef endp
;--------------------
scro proc near
mov bh,1eh
mov cx,0606h
mov dx,184fh
int 10h
ret
scro endp
;---------------------
curs proc near
mov ah,02
mov bh,0
mov dl,0
mov dh,row
int 10h
ret
curs endp
;----------------
errm proc near
mov ah,09
int 21h
mov errcde,01
ret
errm endp
;--------
cseg ends
end begin
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -