📄 stu1.asm
字号:
stack segment para stack 'stack'
dw 80 dup (?)
stack ends
;-----------------------------------------
dseg segment para 'data'
reclen equ 32
namepar label byte
maxlen db reclen
namelen db ?
namedta db reclen dup(' ')
namefld db reclen dup(' '),13,10,'$'
;-----
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 6
opnmsg db '*** open error ***','$'
wrtmsg db '*** write error ***','$'
openmsg db '*** open error ***','$'
readmsg db '*** read 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,7
int 21h
cmp al,'1'
je inpt
cmp al,'2'
je ssss
cmp al,'3'
je printt
jmp mainout
;---
inpt: call createf
cmp errcde,0
jz contin
ret
contin: call inputf
cmp namelen,0
jne contin
call clsef
;-----
printt: call openf
cmp errcde,0
jnz mainout
loop1: call readf
cmp errcde,0
jnz mainout
call dispp
jmp loop1
;----
ssss: call openf
cmp errcde,0
jnz mainout
call searchf
cmp errcde,0
jnz mainout
call dispp
ret
;------
mainout: ret
begin endp
;------------------------
createf proc near
mov ah,16h
lea dx,fcbrec
int 21h
cmp al,0
jnz err1
mov fcbrcsz,reclen
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 dispi
cmp namelen,0
jne blank
ret
blank: mov bh,0
mov bl,reclen
mov namedta[bx],' '
call writef
cld
lea di,namedta
mov cx,reclen/2
mov ax,2020h
rep stosw
ret
inputf endp
;--------------------------------
readf proc near
mov ah,14h
lea dx,fcbrec
int 21h
cmp namefld,1ah
jne tests
mov errcde,01
jmp rend
tests: cmp al,0
jz rend
mov errcde,01
cmp al,1
jz rend
lea dx,readmsg
call errm
rend: ret
readf endp
;--------------------------------
openf proc near
lea dx,fcbrec
mov ah,0fh
int 21h
cmp al,0
jnz error
mov fcbrcsz,reclen
mov ah,1ah
lea dx,namefld
int 21h
mov ah,06
mov al,0
call scro
call curs
ret
error: mov errcde,01
lea dx,openmsg
call errm
ret
openf endp
;--------------------------------
dispi proc near
mov ah,09
lea dx,crlf
int 21h
cmp row,36
jne pass
inc row
ret
pass: mov ah,06
mov al,01
call scro
call curs
ret
dispi endp
;-------------------
dispp proc near
mov ah,09
lea dx,namefld
int 21h
cmp row,24
jae bottom
jmp dend
bottom: mov ah,06
mov al,01
call scro
call curs
dend: ret
dispp endp
;------------------------
searchf proc near
searchf 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,0
mov dx,364fh
int 10h
ret
scro endp
;---------------------
curs proc near
mov ah,02
mov bh,6
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 + -