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

📄 grade_manage.asm

📁 我的汇编课程设计
💻 ASM
📖 第 1 页 / 共 3 页
字号:
; Template for DOS .exe file
win macro opr1,opr2,opr3,opr4,opr5,opr6    ;建立窗口
         pushreg
         mov ah,6
         mov al,opr1
         mov bh,opr2
         mov ch,opr3
         mov cl,opr4
         mov dh,opr5
         mov dl,opr6
         int 10h
         popreg
endm

posset macro opr1,opr2,opr3	;设置光标
	push ax
	push bx
	push dx
	mov ah,2
	mov bh,opr1
	mov dh,opr2
	mov dl,opr3
	int 10h
	pop dx
	pop bx
	pop ax
endm

posred macro		;读取光标位置,返回:dh所在行,dl所在列
	push ax
	push bx
	push cx
	mov ah,3
	mov bh,0
	int 10h
	pop cx
	pop bx
	pop ax
endm

inchr macro		;读取字符,返回:al,字符值,ah,扫描码
        mov ah,0
        int 16h
endm

putchr macro opr1	;输出字符
	push dx
	push ax
	mov ah,2
	mov dl,opr1
	int 21h
	pop ax
	pop dx
endm

warn macro		;鸣警
	push dx
	push ax
	mov ah,2
	mov dl,07h
	int 21h
	pop ax
	pop dx
endm

outstr  macro opr1	;输出字符串
        mov ah,9
        lea dx,opr1
        int 21h
endm

pushreg macro		;保存寄存器值
	push ax
	push bx
	push cx
	push dx
endm

popreg macro		;恢复寄存器值
	pop dx
	pop cx
	pop bx
	pop ax
endm

thead macro		;填写表头
        posset 0,6,7
        outstr stu_num
        posset 0,6,18
        outstr stu_name
        posset 0,6,29
        outstr english
        posset 0,6,40
        outstr math
        posset 0,6,51
        outstr computer
        posset 0,6,62
        outstr total
endm

stay macro		;暂停
	push ax
	mov ah,0
        int 16h
        pop ax
endm

ahelp macro		;显示HELP
	call savedisplay
	win 0,57h,7,15,17,65
	posset 0,9,22
	outstr help1
	posset 0,11,18
	outstr help2
	posset 0,12,18
	outstr help3
	posset 0,13,18
	outstr help4
	posset 0,14,53
	outstr help5
	posset 0,15,53
	outstr help6
	stay
	call backdisplay
endm

afile macro		;显示FILE
        call savedisplay
	win 0,1ah,1,1,5,10
	posset 0,1,2
	outstr new
	posset 0,2,2
	outstr open
	posset 0,3,2
	outstr save
	posset 0,4,2
	outstr saveas
	posset 0,5,2
	outstr exit
	win 0,00h,6,2,6,11
	win 0,00h,2,11,6,11
	posset 0,1,2
	mov bl,1
aflp:	call bakitem
        posset 0,bl,2
	call newitem
	inchr
	cmp ah,48h
	jnz afnext1
	jmp aflp
afnext1:cmp ah,50h
        jnz afnext2
        inc bl
        cmp bl,5
        jna aflp
        mov bl,1
        jmp aflp
afnext2:cmp al,0
        jnz afnext3
        call backdisplay
        call fuckey
afnext3:cmp al,0dh
        jnz afnext4
        posred
        dec dh
        mov dl,dh
        xor dh,dh
        add dl,dl
        lea bx,jmp_file
        add bx,dx
        jmp [bx]
afnext4:call backdisplay
endm

aedit macro		;显示EDIT
	call savedisplay
	win 0,1ah,1,11,3,20
	posset 0,1,12
	outstr eadd
	posset 0,2,12
	outstr insert
	posset 0,3,12
	outstr delete
	win 0,00h,4,12,4,21
	win 0,00h,2,21,4,21
	posset 0,1,12
	mov bl,1
aelp:	call bakitem
        posset 0,bl,12
	call newitem
	inchr
	cmp ah,48h
	jnz aenext1
	jmp aelp
aenext1:cmp ah,50h
        jnz aenext2
        inc bl
        cmp bl,3
        jna aelp
        mov bl,1
        jmp aelp
aenext2:cmp al,0
        jnz aenext3
        call backdisplay
        call fuckey
aenext3:cmp al,0dh
        jnz aenext4
        posred
        dec dh
        mov dl,dh
        xor dh,dh
        add dl,dl
        lea bx,jmp_edit
        add bx,dx
        jmp [bx]
aenext4:call backdisplay
endm

asort macro		;显示SORT
	call savedisplay
	win 0,1ah,1,21,4,30
	posset 0,1,22
	outstr english
	posset 0,2,22
	outstr math
	posset 0,3,22
	outstr computer
	posset 0,4,22
	outstr total
	win 0,00h,5,22,5,31
	win 0,00h,2,31,5,31
	posset 0,1,22
	mov bl,1
aslp:	call bakitem
        posset 0,bl,22
	call newitem
	inchr
	cmp ah,48h
	jnz asnext1
	jmp aslp
asnext1:cmp ah,50h
        jnz asnext2
        inc bl
        cmp bl,4
        jna aslp
        mov bl,1
        jmp aslp
asnext2:cmp al,0
        jnz asnext3
        call backdisplay
        call fuckey
asnext3:cmp al,0dh
        jnz asnext4
        posred
        dec dh
        mov dl,dh
        xor dh,dh
        add dl,dl
        lea bx,jmp_sort
        add bx,dx
        jmp [bx]
asnext4:call backdisplay
endm

alook macro		;显示LOOK
	call savedisplay
	win 0,1ah,1,31,2,40
	posset 0,1,32
	outstr stu_num
	posset 0,2,32
	outstr stu_name
	win 0,00h,3,32,3,41
	win 0,00h,2,41,3,41
	posset 0,1,32
	mov bl,1
allp:	call bakitem
        posset 0,bl,32
	call newitem
	inchr
	cmp ah,48h
	jnz alnext1
	jmp allp
alnext1:cmp ah,50h
        jnz alnext2
        inc bl
        cmp bl,2
        jna allp
        mov bl,1
        jmp allp
alnext2:cmp al,0
        jnz alnext3
        call backdisplay
        call fuckey
alnext3:cmp al,0dh
        jnz alnext4
        posred
        dec dh
        mov dl,dh
        xor dh,dh
        add dl,dl
        lea bx,jmp_look
        add bx,dx
        jmp [bx]
alnext4:call backdisplay
endm

equstu macro		;两个学生结构体间赋值,参数student2给stduent1
	LOCAL equstu1
	pushreg
	mov cx,28
	mov bx,student2
	mov dx,student1
equstu1:mov byte ptr al,[bx]
	inc bx
	push bx
	mov bx,dx
	inc dx
	mov byte ptr [bx],al
	pop bx
	loop equstu1
	popreg
endm

excstu macro 		;两个学生结构体交换;参数:excstu1,excstu2
	push bx
	mov bx,excstu1
	mov student2,bx
	lea bx,temp
	mov student1,bx
	equstu
	mov bx,excstu2
	mov student2,bx
	mov bx,excstu1
	mov student1,bx
	equstu
	lea bx,temp
	mov student2,bx
	mov bx,excstu2
	mov student1,bx
	equstu
	pop bx
endm

stotn macro opr1	;比较dx所指学生成绩存到tempnum
	posset 0,23,0
	mov strcount,3
	mov stradr,dx
	add stradr,opr1
	call putstr
	call getnum 
endm

debug macro opr1	;仅供调试
	pushreg
	posred
	push dx
	posset 0,1,1
	putchr opr1
	stay
	pop dx
	posset 0,dh,dl
	popreg
endm

student struct		;学生结构体定义
	num db '          '
	nm db '      '
	el db '   '
	mt db '   '
	cp db '   '
	tt db '   '
student ends

        assume  cs:cseg, ds:dseg, ss:sseg

        ; code
cseg    segment
start:
        mov ax,dseg
        mov ds,ax
        mov ah,0
        mov al,3
        int 10h
snew:  
        mov scount,0
        mov ccount,0
        mov tcol,0
        mov spage,1
        mov cpage,1
        
;	push ax
;	posred
;	push dx
;	posset 0,1,1
;	mov ah,2
;	mov dl,scount
;	add dl,30h
;	int 21h
;	pop dx
;	posset 0,dh,dl
;	pop ax
;	stay
        
        call window
        call table               
        posset 0,24,0
        call showpage                                
        call getkey
        
quit:   mov     ax, 4C00h
        int     21h

window proc near	;创建窗体
        win 0,2fh,0,0,24,79
        win 0,1ah,0,0,0,79
        posset 0,0,1
        outstr menu
        win 0,1ah,24,0,24,79
        posset 0,24,1
        outstr staus
        posset 0,23,0
        win 0,22h,23,0,23,5
        call windate
        call winpage
	ret
window endp

windate proc near	;显示时间
	mov ah,2ah
        int 21h
        mov  bl,10
        mov  ax,0
        mov  al,dh
        div  bl 
        add  ax,3030h
        mov  [date+6],al                    
        mov  [date+7],ah
        mov  ax,0
        mov  al,dl
        div  bl
        add  ax,3030h
        mov  [date+9],al
        mov  [date+10],ah
        win 0,1dh,0,67,0,79
        posset 0,0,67
        outstr date	
	ret
windate endp

winpage proc near	;显示页码
	pushreg
	lea bx,pg
	mov al,cpage
	add al,30h
	mov byte ptr [bx+5],al
	mov al,spage
	add al,30h
	mov byte ptr [bx+7],al
	win 0,1dh,24,69,24,79
	posset 0,24,71
	outstr pg
	popreg
	ret
winpage endp

table proc near		 ;画表格
	call rline
	call cline
        mov bx,0b800h
        mov es,bx
        
        mov head,1154
        mov cx,6
        
tp2:    push cx
        mov cx,5      
        mov bx,head
        
tp1:    mov es:[bx],206;197
        inc bx
        mov byte ptr es:[bx],00100001b
        add bx,21
        loop tp1
        
        pop cx
        add head,320
        loop tp2
        
        mov cx,5
        mov bx,834
tp3:    mov es:[bx],203;194
        inc bx
        mov byte ptr es:[bx],00100001b
        add bx,21
        loop tp3
        
        mov cx,5
        mov bx,3074
tp4:    mov es:[bx],202;193
        inc bx
        mov byte ptr es:[bx],00100001b
        add bx,21
        loop tp4
        
        mov cx,6      
        mov bx,1132       
tp5:    mov es:[bx],204;195
        inc bx
        mov byte ptr es:[bx],00100001b
        add bx,319   
        loop tp5
        
        mov cx,6      
        mov bx,1264
tp6:    mov es:[bx],185;180
        inc bx
        mov byte ptr es:[bx],00100001b
        add bx,319   
        loop tp6
        
        mov bx,812
        mov es:[bx],201;218
        inc bx
        mov byte ptr es:[bx],00100001b
        
        mov bx,944
        mov es:[bx],187;191
        inc bx
        mov byte ptr es:[bx],00100001b
        
        mov bx,3052
        mov es:[bx],200;192
        inc bx
        mov byte ptr es:[bx],00100001b
        
        mov bx,3184
        mov es:[bx],188;217
        inc bx
        mov byte ptr es:[bx],00100001b
        thead
	ret
table endp

rline proc near          ;画表格横线
        push ax
        push bx
        push cx
        push es
 
        mov bx,0b800h
        mov es,bx
        
        mov head,814
        mov cx,8
        
rp2:    push cx
        mov cx,65      
        mov bx,head
        
rp1:    mov es:[bx],205;196
        inc bx
        mov byte ptr es:[bx],00100001b
        inc bx
        loop rp1
        
        pop cx
        add head,320
        loop rp2
        
        pop es
        pop cx
        pop bx
        pop ax
        ret
rline endp

cline proc near          ;画表格竖线
        push ax
        push bx
        push cx
        push es
 
        mov bx,0b800h
        mov es,bx
        
        mov head,812
        mov cx,7
        
cp2:    push cx
        mov cx,15      
        mov bx,head
        
cp1:    mov es:[bx],186;179
        inc bx
        mov byte ptr es:[bx],00100001b
        add bx,159   
        loop cp1
        
        pop cx
        add head,22
        loop cp2
        
        pop es
        pop cx
        pop bx
        pop ax
        ret
cline endp

savedisplay proc near	;保存屏幕
        pushreg
        posred
        mov row,dh
        mov col,dl       
        push ds
        mov ax,0002h
        int 33h
        mov bx,0
        mov cx,3840
sdloop1:
        mov ax,0b800h
        mov ds,ax
        mov dl,ds:[bx]
        mov ax,dseg
        mov ds,ax
        mov bak[bx],dl
        inc bx
        loop sdloop1
        mov ax,0001h
        int 33h
        pop ds
        popreg
        ret
savedisplay endp

backdisplay proc near	;恢复屏幕
        pushreg
        push ds
        mov bx,0
        mov cx,3840       
bdloop11:
        mov ax,dseg
        mov ds,ax
        mov dl,bak[bx]
        mov ax,0b800h
        mov ds,ax
        mov ds:[bx],dl
        inc bx
        loop bdloop11
        pop ds
        posset 0,row,col      
        popreg
        ret
backdisplay endp

getkey proc near	;响应键盘
gklp:	inchr
        cmp al,0
        jnz gknext1
        call fuckey
        jmp gknext
gknext1:cmp al,1bh
	jnz gknext2
	jmp quit 
gknext2:cmp al,08h
	jnz gknext
	cmp scount,0
	jz gknext
	posred
	cmp dl,62
	jz gknext
	call clstd
	call edttd
	jmp gknext
gknext:	jmp gklp
        ret
getkey endp

fuckey proc near	;识别菜单键,参数ah,扫描码
	cmp ah,23h
	jnz fknext1
        ahelp
        jmp fknext
fknext1:cmp ah,21h
	jnz fknext2
	afile	
	jmp fknext
fknext2:cmp ah,12h
        jnz fknext3
        aedit
        jmp fknext
fknext3:cmp ah,1fh
        jnz fknext4
        asort
        jmp fknext
fknext4:cmp ah,26h
        jnz fknext5
        alook
        jmp fknext
fknext5:cmp ah,50h
        jnz fknext6
        cmp scount,0
        jz fknext
        call down
        jmp fknext
fknext6:cmp ah,4bh
        jnz fknext7
        cmp scount,0
        jz fknext
        call left
        jmp fknext
fknext7:cmp ah,4dh
        jnz fknext8
        cmp scount,0
        jz fknext
        call right
        jmp fknext
fknext8:cmp ah,48h
        jnz fknext9
        cmp scount,0
        jz fknext
        call up 
        jmp fknext
fknext9:cmp ah,51h
	jnz fknext10
	mov ah,cpage
	cmp ah,spage
	jz fknext
	inc cpage
	call showpage
	call baktd
	posset 0,8,7
	call newtd
	mov ccount,1
	mov tcol,1
	jmp fknext
fknext10:cmp ah,49h
	jnz fknext
	mov ah,cpage
	cmp ah,1
	jz fknext
	dec cpage
	call showpage
	call baktd
	posset 0,8,7
	call newtd
	mov ccount,1
	mov tcol,1
fknext:	ret
fuckey endp

down proc near		;向下键
        mov bl,ccount
	cmp bl,pcount
	jz down1
	call baktd
	inc ccount
	posred
	inc dh
	inc dh
	posset 0,dh,dl
        call newtd
down1:	ret
down endp

left proc near		;向左键
	cmp tcol,1
	jz left1
	call baktd
	dec tcol
	posred
	sub dl,11
	posset 0,dh,dl
	call newtd
left1:	ret
left endp

right proc near		;向右键
	cmp tcol,6
	jz right1
	call baktd
	inc tcol
	posred
	add dl,11
	posset 0,dh,dl
	call newtd
right1:	ret
right endp

up proc near		;向上键
	cmp ccount,1
	jz up1
	call baktd
	dec ccount
	posred
	dec dh
	dec dh
	posset 0,dh,dl
	call newtd
up1:	ret
up endp

newtd 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,10
ntlp:	and byte ptr es:[bx],10001111b
        or byte ptr es:[bx],01010000b
        add bx,2
        loop ntlp
        popreg
	ret
newtd endp

baktd 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,10
btlp:	and byte ptr es:[bx],10001111b
        or byte ptr es:[bx],00100000b
        add bx,2
        loop btlp
        popreg
	ret
baktd endp

clstd proc near		;清空单元格
	pushreg
	posred
	cmp dl,17
	ja clstd1
	mov dl,7	
	jmp clstds	
clstd1: cmp dl,28
	ja clstd2
	mov dl,18
	jmp clstds
clstd2: cmp dl,39
	ja clstd3
	mov dl,29
	jmp clstds
clstd3: cmp dl,50
	ja clstd4
	mov dl,40
	jmp clstds
clstd4: cmp dl,61
	ja clstd5
	mov dl,51
	jmp clstds
clstd5:	mov dl,62
clstds:	mov cx,10
	posset 0,dh,dl
ct1:	putchr ' '
	loop ct1
	posset 0,dh,dl
	popreg
	ret
clstd endp

edttd proc near		;编辑单元格
	posred

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -