⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 grade_manage.asm

📁 我的汇编课程设计
💻 ASM
📖 第 1 页 / 共 3 页
字号:
	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 + -