📄 grade_manage.asm
字号:
cmp dl,7
jnz edttd1
call etnum
jmp edttd2
edttd1: cmp dl,18
jnz edttd3
call etname
jmp edttd2
edttd3: cmp dl,29
jnz edttd4
call etel
jmp edttd2
edttd4: cmp dl,40
jnz edttd5
call etmt
jmp edttd2
edttd5: call etcp
edttd2: mov ischange,1
call stob
ret
edttd endp
etnum proc near ;编辑学号单元格
numbs: mov cx,10
numinchr:inchr
cmp al,08h
jnz numnext1
call clstd
jmp numbs
numnext1:cmp al,30h
jb numwarn
cmp al,39h
ja numwarn
putchr al
jmp numnext
numwarn:warn
inc cx
numnext:loop numinchr
posred
posset 0,dh,7
ret
etnum endp
etname proc near ;编辑姓名单元格
namebs: mov cx,6
nameinchr:inchr
cmp al,08h
jnz namenext1
call clstd
jmp namebs
namenext1:cmp al,0dh
jnz namenext2
cmp cx,6
jnz namenext3
namenext2:cmp al,41h
jb namewarn
cmp al,5ah
jna namepc
cmp al,61h
jb namewarn
cmp al,7ah
ja namewarn
namepc: putchr al
jmp namenext
namewarn:warn
inc cx
namenext:loop nameinchr
namenext3:posred
posset 0,dh,18
ret
etname endp
etel proc near ;编辑英语单元格
elbs: inchr
cmp al,08h
jnz elnext1
call clstd
jmp elbs
elnext1:cmp al,30h
jnz elnext2
putchr al
jmp elover
elnext2:cmp al,31h
jnz elnext3
putchr al
elinchr2:inchr
cmp al,08h
jnz elnext21
call clstd
jmp elbs
elnext21:cmp al,0dh
jnz elnext22
jmp elover
elnext22:cmp al,30h
jnz elnext23
putchr al
elinchr22:inchr
cmp al,08h
jnz elnext221
call clstd
jmp elbs
elnext221:cmp al,0dh
jnz elnext222
jmp elover
elnext222:cmp al,30h
jnz elnext223
putchr al
jmp elover
elnext223:warn
jmp elinchr22
elnext23:cmp al,31h
jb elnext24
cmp al,39h
ja elnext24
putchr al
jmp elover
elnext24:warn
jmp elinchr2
elnext3:cmp al,32h
jb elnext4
cmp al,39h
ja elnext4
putchr al
elinchr3:inchr
cmp al,08h
jnz elnext31
call clstd
jmp elbs
elnext31:cmp al,0dh
jnz elnext32
jmp elover
elnext32:cmp al,30h
jb elnext33
cmp al,39h
ja elnext33
putchr al
jmp elover
elnext33:warn
jmp elinchr3
elnext4:warn
jmp elbs
elover:posred
posset 0,dh,29
ret
etel endp
etmt proc near ;编辑数学单元格
mtbs: inchr
cmp al,08h
jnz mtnext1
call clstd
jmp mtbs
mtnext1:cmp al,30h
jnz mtnext2
putchr al
jmp mtover
mtnext2:cmp al,31h
jnz mtnext3
putchr al
mtinchr2:inchr
cmp al,08h
jnz mtnext21
call clstd
jmp mtbs
mtnext21:cmp al,0dh
jnz mtnext22
jmp mtover
mtnext22:cmp al,30h
jnz mtnext23
putchr al
mtinchr22:inchr
cmp al,08h
jnz mtnext221
call clstd
jmp mtbs
mtnext221:cmp al,0dh
jnz mtnext222
jmp mtover
mtnext222:cmp al,30h
jnz mtnext223
putchr al
jmp mtover
mtnext223:warn
jmp mtinchr22
mtnext23:cmp al,31h
jb mtnext24
cmp al,39h
ja mtnext24
putchr al
jmp mtover
mtnext24:warn
jmp mtinchr2
mtnext3:cmp al,32h
jb mtnext4
cmp al,39h
ja mtnext4
putchr al
mtinchr3:inchr
cmp al,08h
jnz mtnext31
call clstd
jmp mtbs
mtnext31:cmp al,0dh
jnz mtnext32
jmp mtover
mtnext32:cmp al,30h
jb mtnext33
cmp al,39h
ja mtnext33
putchr al
jmp mtover
mtnext33:warn
jmp mtinchr3
mtnext4:warn
jmp mtbs
mtover:posred
posset 0,dh,40
ret
etmt endp
etcp proc near ;编辑计算机单元格
cpbs: inchr
cmp al,08h
jnz cpnext1
call clstd
jmp cpbs
cpnext1:cmp al,30h
jnz cpnext2
putchr al
jmp cpover
cpnext2:cmp al,31h
jnz cpnext3
putchr al
cpinchr2:inchr
cmp al,08h
jnz cpnext21
call clstd
jmp cpbs
cpnext21:cmp al,0dh
jnz cpnext22
jmp cpover
cpnext22:cmp al,30h
jnz cpnext23
putchr al
cpinchr22:inchr
cmp al,08h
jnz cpnext221
call clstd
jmp cpbs
cpnext221:cmp al,0dh
jnz cpnext222
jmp cpover
cpnext222:cmp al,30h
jnz cpnext223
putchr al
jmp cpover
cpnext223:warn
jmp cpinchr22
cpnext23:cmp al,31h
jb cpnext24
cmp al,39h
ja cpnext24
putchr al
jmp cpover
cpnext24:warn
jmp cpinchr2
cpnext3:cmp al,32h
jb cpnext4
cmp al,39h
ja cpnext4
putchr al
cpinchr3:inchr
cmp al,08h
jnz cpnext31
call clstd
jmp cpbs
cpnext31:cmp al,0dh
jnz cpnext32
jmp cpover
cpnext32:cmp al,30h
jb cpnext33
cmp al,39h
ja cpnext33
putchr al
jmp cpover
cpnext33:warn
jmp cpinchr3
cpnext4:warn
jmp cpbs
cpover:posred
posset 0,dh,51
ret
etcp endp
newitem proc near ;特显子菜单
pushreg
mov ax,0b800h
mov es,ax
posred
mov al,dh
xor ah,ah
mov cl,dl
mov bx,160
mul bx
xor ch,ch
add ax,cx
add ax,cx
mov bx,ax
inc bx
mov cx,8
milp: and byte ptr es:[bx],10001111b
or byte ptr es:[bx],00110000b
add bx,2
loop milp
popreg
ret
newitem endp
bakitem proc near ;恢复子菜单
pushreg
mov ax,0b800h
mov es,ax
posred
mov al,dh
xor ah,ah
mov cl,dl
mov bx,160
mul bx
xor ch,ch
add ax,cx
add ax,cx
mov bx,ax
inc bx
mov cx,8
bilp: and byte ptr es:[bx],10001111b
or byte ptr es:[bx],00010000b
add bx,2
loop bilp
popreg
ret
bakitem endp
fnew proc near ;新建文件
call backdisplay
cmp ischange,0
jz fnew1
win 0,37h,8,18,12,63
posset 0,10,20
outstr savemessage1
outstr savemessage3
outstr savemessage2
fnewinchr:inchr
cmp al,'y'
jnz fnew2
call fsaves
jmp fnew1
fnew2: cmp al,'n'
jnz fnew3
jmp fnew1
fnew3: cmp al,'c'
jnz fnewinchr
call backdisplay
jmp fnewret
fnew1: mov ischange,0
mov isfn,0
mov fncount,0
jmp snew
fnewret:ret
fnew endp
fopen proc near ;打开文件
call backdisplay
cmp ischange,0
jz fopen21
win 0,37h,8,18,12,63
posset 0,10,20
outstr savemessage1
outstr savemessage3
outstr savemessage2
fopeninchr3:inchr
cmp al,'y'
jnz fopen22
call fsaves
jmp fopen21
fopen22:cmp al,'n'
jnz fopen23
jmp fopen21
fopen23:cmp al,'c'
jnz fopeninchr3
call backdisplay
jmp fopenret
fopen21:mov ischange,0
mov isfn,1
mov fncount,0
call clsfn
call backdisplay;
fopenbs:win 0,37h,8,18,12,63
posset 0,10,23
outstr openfn
fopeninchr:inchr
cmp al,0dh
jnz fopen2
cmp fncount,0
jz fopeninchr
posred
posset 0,dh,50
jmp fopeninchr1
fopen2:cmp al,08h
jnz fopen3
mov fncount,0
jmp fopenbs
fopen3:cmp al,5ch
jz fopeninchr
cmp al,2fh
jz fopeninchr
cmp al,3ah
jz fopeninchr
cmp al,3fh
jz fopeninchr
cmp al,2ah
jz fopeninchr
cmp al,22h
jz fopeninchr
cmp al,3ch
jz fopeninchr
cmp al,3eh
jz fopeninchr
cmp al,7ch
jz fopeninchr
cmp al,2eh
jz fopeninchr
cmp al,21h
jb fopeninchr
cmp al,7eh
ja fopeninchr
putchr al
inc fncount
cmp fncount,10
jnz fopeninchr
posred
posset 0,dh,50
fopeninchr1:inchr
cmp al,08h
jnz fopen4
mov fncount,0
jmp fopenbs
fopen4:cmp al,0dh
jnz fopeninchr1
call fillfn
jmp fopen1
fopen1: call backdisplay
cmp scount,0
jz fopen7
call baktd
fopen7: call openf
jnc fopen8
cmp error,2
call backdisplay
win 0,37h,8,18,12,60
posset 0,10,22
outstr filenf
stay
call backdisplay
call newtd
jmp fopenret
fopen8: call readf
call closef
cmp scount,0
jnz fopen5
mov spage,1
mov cpage,1
mov ccount,0
mov tcol,0
call showpage
posset 0,24,0
jmp fopenret
fopen5: mov al,scount
xor ah,ah
mov bl,6
div bl
inc al
mov spage,al
mov tcol,1
mov ccount,1
mov cpage,1
call showpage
posset 0,8,7
call newtd
fopenret:ret
fopen endp
fsaves proc near ;保存文件
cmp isfn,0
jnz fsaves1
call backdisplay
fsavesbs:win 0,37h,8,18,12,63
posset 0,10,23
outstr inputfn
fsavesinchr:inchr
cmp al,0dh
jnz fsaves2
cmp fncount,0
jz fsavesinchr
posred
posset 0,dh,50
jmp fsavesinchr1
fsaves2:cmp al,08h
jnz fsaves3
mov fncount,0
jmp fsavesbs
fsaves3:cmp al,5ch
jz fsavesinchr
cmp al,2fh
jz fsavesinchr
cmp al,3ah
jz fsavesinchr
cmp al,3fh
jz fsavesinchr
cmp al,2ah
jz fsavesinchr
cmp al,22h
jz fsavesinchr
cmp al,3ch
jz fsavesinchr
cmp al,3eh
jz fsavesinchr
cmp al,7ch
jz fsavesinchr
cmp al,2eh
jz fsavesinchr
cmp al,21h
jb fsavesinchr
cmp al,7eh
ja fsavesinchr
putchr al
inc fncount
cmp fncount,10
jnz fsavesinchr
posred
posset 0,dh,50
fsavesinchr1:inchr
cmp al,08h
jnz fsaves4
mov fncount,0
jmp fsavesbs
fsaves4:cmp al,0dh
jnz fsavesinchr1
call fillfn
jmp fsaves1
fsaves1:call backdisplay;
call createf
call writef
call closef
mov isfn,1
mov ischange,0
ret
fsaves endp
clsfn proc near ;清空缓存文件名
push cx
push bx
mov cx,10
lea bx,filename
clsfnlp:mov [bx],' '
inc bx
loop clsfnlp
pop bx
pop cx
ret
clsfn endp
fillfn proc near ;写入缓存文件名
push bx
mov strcount,10
lea bx,filename
mov stradr,bx
call getstr
mov bl,fncount
xor bh,bh
mov byte ptr filename[bx],'$'
pop bx
ret
fillfn endp
ntop proc near ;得到路径
pushreg
lea si,filename
lea di,filepath
mov ax,dseg
mov es,ax
mov cx,10
cld
rep movsb
mov bl,fncount
xor bh,bh
mov byte ptr filepath[bx],0
popreg
ret
ntop endp
createf proc near ;创建文件
call ntop
mov ah,3ch
lea dx,filepath
mov cx,0
int 21h
mov filehandle,ax
ret
createf endp
openf proc near ;打开文件
call ntop
lea dx,filepath
mov ah,3dh
mov al,2
int 21h
jc openf1
mov filehandle,ax
jmp openfover
openf1: mov error,ax
openfover:ret
openf endp
closef proc near ;关闭文件
mov ah,3eh
mov bx,filehandle
int 21h
ret
closef endp
readf proc near ;读文件,并求得scount
mov ah,42h
mov bx,filehandle
xor cx,cx
xor dx,dx
mov al,2
int 21h
mov cx,ax
push cx
mov ah,42h
mov bx,filehandle
xor cx,cx
xor dx,dx
mov al,0
int 21h
pop cx
mov ah,3fh
mov bx,filehandle
lea dx,buffers
int 21h
mov ax,cx
xor dx,dx
mov bx,28
div bx
mov scount,al
ret
readf endp
writef proc near ;写文件
mov al,scount
mov bl,28
mul bl
mov cx,ax
mov ah,40h
mov bx,filehandle
lea dx,buffers
int 21h
ret
writef endp
getstr proc near ;从屏幕中读字符串到缓存,参数:strcount,stradr
pushreg
mov cl,strcount
xor ch,ch
posred
mov bl,160
mov al,dh
mul bl
xor dh,dh
add ax,dx
add ax,dx
mov bx,ax
mov ax,0b800h
mov es,ax
mov dx,stradr
gslp: mov byte ptr al,es:[bx]
inc bx
inc bx
push bx
mov bx,dx
mov byte ptr [bx],al
inc dx
pop bx
loop gslp
popreg
ret
getstr endp
putstr proc near ;从缓存中读字符串到屏幕,参数:strcount,stradr
pushreg
mov cl,strcount
xor ch,ch
posred
mov bl,160
mov al,dh
mul bl
xor dh,dh
add ax,dx
add ax,dx
mov bx,ax
mov ax,0b800h
mov es,ax
mov dx,stradr
pslp: push bx
mov bx,dx
mov byte ptr al,[bx]
inc dx
pop bx
mov byte ptr es:[bx],al
inc bx
inc bx
loop pslp
popreg
ret
putstr endp
getnum proc near ;从屏幕中读数字到缓存tempnum
pushreg
mov cx,3
posred
mov bl,160
mov al,dh
mul bl
xor dh,dh
add ax,dx
add ax,dx
mov bx,ax
mov ax,0b800h
mov es,ax
mov tempnum,0
gnlp: mov dx,10
mov byte ptr al,es:[bx]
inc bx
inc bx
cmp al,' '
jz gnover
push bx
sub al,30h
mov bl,al
mov ax,tempnum
mul dx
xor bh,bh
add ax,bx
mov tempnum,ax
pop bx
loop gnlp
gnover: popreg
ret
getnum endp
putnum proc near ;将数字tempnum输出
pushreg
posred
push dx
call clstd
mov ax,tempnum
cmp ax,9
ja putnum1
add al,30h
putchr al
jmp pnover
putnum1:cmp ax,100
jb putnum2
mov bx,100
xor dx,dx
div bx
add al,30h
putchr al
mov ax,dx
putnum2:mov bl,10
div bl
add al,30h
putchr al
mov al,ah
add al,30h
putchr al
pnover: pop dx
posset 0,dh,dl
popreg
ret
putnum endp
fsaveas proc near ;另存为
lea si,filename
lea di,filenameas
mov ax,dseg
mov es,ax
mov cx,10
cld
rep movsb
mov bl,fncount
xor bh,bh
push bx
mov isfn,0
mov fncount,0
call fsaves
pop bx
mov fncount,bl
lea si,filenameas
lea di,filename
mov ax,dseg
mov es,ax
mov cx,10
cld
rep movsb
ret
fsaveas endp
fexit proc near ;退出
call backdisplay
cmp ischange,0
jz fexit1
win 0,37h,8,18,12,63
posset 0,10,20
outstr savemessage1
outstr savemessage3
outstr savemessage2
fexitinchr:inchr
cmp al,'y'
jnz fexit2
call fsaves
jmp fexit1
fexit2: cmp al,'n'
jnz fexit3
jmp fexit1
fexit3: cmp al,'c'
jnz fexitinchr
call backdisplay
jmp fexitret
fexit1: jmp quit
fexitret:ret
fexit endp
eeadd proc near ;在最后增加一行;
pushreg
call backdisplay
cmp scount,30
jz eeaddover
mov ischange,1
cmp scount,0
jnz eeadd3
posset 0,8,7
eeadd3: call baktd
inc scount
mov al,scount
xor ah,ah
mov bl,6
div bl
cmp ah,0
jnz eeadd1
mov ccount,6
jmp eeadd2
eeadd1: mov ccount,ah
inc al
eeadd2: mov spage,al
mov cpage,al
mov dh,6
add dh,ccount
add dh,ccount
posset 0,dh,7
mov tcol,1
call showpage
call clsst
call newtd
call edttd
eeaddover:popreg
ret
eeadd endp
einsert proc near ;在当前行上插入一行
pushreg
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -