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

📄 keti2.asm

📁 1、汇编课程设计 2、包括如下:(1)、简单文件管理 (2)、学生成绩管理 (3)、简单加法器 3、文档中附有代码
💻 ASM
字号:
.model	small
.stack	100h
.data
	handle	dw	?
        filenampl       label   byte
	naxlen	db	30
	namlen	db	?
	filenam	db	30 dup(?)
		db	'$'
        M_nampl        label   byte
	M_maxlen	db	10
	M_namlen	db	?
	M_nam		db	10 dup(?)
			db	'$'
	Numpl		label	byte
	Nummaxlen	db	10
	Numlen		db	?
	Num		db	10 dup(?)
			db	'$'
        Maxscore        equ     100
	N_COURSE	label	byte
        COURSE          equ      4
	EVEN
	score		dw	COURSE dup(0)
	all		dw	0000
	ave		dw	0000
	inf_record	dw	0001   ;第N条记录
	allscore		dw	0000   ;总分
	EVEN
	row		db	00
	col		db	00
	fileend		db	00   ;文件结束标志     	
        num_cou         db      00   ;第N门课
        ;EVEN
        ; one_char      db      01
        ;two_char       db      02
        ;onechar        db      ?
	;
	menu	db	'	             KETI2(BY 031YZJ)',10,13
		db	'             **********************************',10,13
		db	'             *     1.Save new information.    *',10,13
		db	'             *     2.Print information.       *',10,13
		db	'             *     3.Exit.		      *',10,13
		db	'             ********************************** ',10,13
                db      '                 Your choice[1,2,3]:','$'
	newinf1	db	'Please input filename:>','$'
	namin_n	db	10,13
	namin	db	'NAME','$'
	numin_n	db	10,13
	numin	db	'NUM.','$'
	cource_n	db	10,13
	cource	db	'SCORE','$'
        newinf2 db     'Press[n\N] to rewrite.Any other keys to continue:','$'
	allin	db	'ALL','$'
	avein	db	'AVE.SCORE','$'
        inf_recordin    db      '#Record:>.','$'
;-----------------------------------------------------------------------------------------------------------------------------------	
.code
main	proc far
	mov 	ax,@data
	mov	ds,ax
	mov	es,ax
	;--------------------------
	main_loop:
	mov	ax,0600h
        	call    	scrn
	mov	row,5
	mov	col,0
	call	curs
	lea	dx,menu
	mov	ah,09h
	int	21h
	;--------------------------菜单
	call	getch
	cmp	al,'1'
	jb	main_loop
	cmp	al,'3'
	ja	main_loop
	cmp	al,'3'
	je	m_exit
	cmp	al,'2'
	jne	m_One
	call	inftype
	jmp	main_loop
	m_One:
	call	newinf
	jmp	main_loop
	m_exit:
	mov	ax,4c00h
	int	21h
main	endp
;------------------------------------------------------------------------------------------------------
newinf	proc	near
	;-----------------------------
	mov	ax,0600h
	call	scrn
	mov	row,1
	mov	col,0
	call	curs
	lea	dx,newinf1
	mov	ah,9
	int	21h
	lea	dx,filenampl
	call	newfile
	cmp	ax,0000
	je	n_exit
	mov	handle,ax
	;------------------------------
        	;lea     dx,N_COURSE
       	 ;mov     cx,1
       	 ;mov     bx,handle
       	 ;call    inf_in_file
	;------------------------------
	inf_in:
	;----------------------------开始接受数据
	mov	ax,0601h
	mov	bh,0e1h
	call	scrn_bx
	mov	row,24
	call	curs
	lea	dx,inf_recordin
	mov	ah,09h
	int	21h
	mov	ax,inf_record
	mov	bx,0001
	call	printf
	;----------------------------显示第 N记录
	call 	infinput    ;输入一条记录
	;----------------------------输入数据
	mov	ax,0601h
	call	scrn         ;上卷一行
	mov	row,24
	call	curs         ;光标定位
	lea	dx,newinf2
	mov	ah,9
	int	21h          ;提示信息
	call	getch
	;-----------------------------询问是否正确
	cmp	al,'n'
	jne	n_next1   ;可能是大N
	jmp	inf_in      ;不正确 
	n_next1:
	cmp	al,'N'
	jne	n_next2    ;不是大N
	jmp	inf_in       ;不正确 重来
	;-----------------------------
	n_next2:
	cmp	fileend,1
	je	n_exit      ;文件结束
        call    writefile   ;信息写入文件
	;-------------------------------
        ;call    clear_inf
	;------------------------------
        inc      inf_record;记录条数加一

	jmp	inf_in       ;下一条记录
	n_exit:
	;-------------------------------
	;mov	bx,handle
	;mov	cx,1
        	;lea     dx,two_char
	;call	inf_in_file
	;--------------------------------
	lea	dx,filenam
	call	closefile
        ;call    getch
	ret
newinf	endp
;------------------------------------------------------------
infinput	proc	near   ;输入一条记录
	;---------------------------------准备工作
	
	mov	fileend,00
	mov	ax,0607h
	mov	bh,0e1h
	call	scrn_bx
	mov	row,18
	mov	col,0
	call	curs
	
	;---------------------------------输入姓名
        	lea     	dx,namin_n
	mov	ah,9h
	int	21h
	mov	dl,':'
	mov	ah,2
	int	21h
	lea	dx,M_nampl
	mov	ah,0ah
	int	21h
	mov	di,dx
	add	di,2
	mov	cl,10
	mov	bx,dx
        	add     	bx,1
	mov	ch,[bx]
	call	nam_clear_dl
	;姓名的输入完成
	;--------------------------------输入学号
	lea	dx,numin_n
	mov	ah,9
	int	21h
	mov	dl,':'
	mov	ah,2
	int	21h
	lea	dx,numpl
	mov	ah,0ah
	int	21h
	mov	di,dx
	mov	bx,dx
        	inc             bx
	add	di,2;di指向串
	mov	ch,[bx]
	cmp	ch,0
        	jne     	next_in
	mov	fileend,1
	ret
        	next_in: 
	mov	cl,10
	call	nam_clear_dl
	;学号的输入完成
	;----------------------------------------输入分数
	mov	num_cou,1
	lea	bx,score
        	mov     	allscore,0000     ;总分清零
	ii_loop1:
	lea	dx,cource_n
	mov	ah,9
	int	21h
	mov	dl,num_cou
	add	dl,30h
	mov	ah,2
	int	21h
	mov	dl,':'     ;提示第几门课了
	int	21h
	push	bx
	call	scanf    ;接受分数的输入
	pop	bx
	;-----------------------对分数的合法性检查
	cmp	ax,Maxscore
	ja	ii_loop1
	cmp	ax,0
	jb	ii_loop1
	;------------------------
	mov	[bx],ax  ;填入合法的分数
	add	allscore,ax ;加总分
	add	bx,2      ;下一门分数
	
	cmp	num_cou,COURSE;课程数
	je	all_ave
        add     num_cou,1
	jmp	ii_loop1;下一次循环
	;-----------------------------------------------
	;
	all_ave:   ;计算平均分
        mov     ax,allscore
        mov     [bx],ax
	add	bx,2
	mov	cl,COURSE
	div	cl
	mov	ah,0
	mov	[bx],ax
	;-------------------------------------------
	;完成一条记录的输入 返回
	ret
infinput	endp
;------------------------------------------------------------------
writefile	proc	near ;一次写一条记录

	mov	bx,handle
	mov	cx,10
	lea	dx,M_nam
	call	inf_in_file
	cmp	ax,0000
	je	wr_exit
	;---------------------------姓名写入完成10字节
	mov	bx,handle
	lea	dx,Num
	mov	cx,10
	call	inf_in_file
	cmp	ax,0000
	je	wr_exit
	;---------------------------学号写入完成10字节
	mov	bx,handle
	mov	cx,COURSE
	add	cx,COURSE
	add	cx,4      
	lea	dx,score
	call	inf_in_file
	;--------------------------分数写入完成12字节
	cmp	ax,0000
	je	wr_exit
	wr_exit:
	ret
writefile	endp
;------------------------------------------------------------------------
inftype	proc	near
	;----------------------------------准备工作
	mov	fileend,0;结束标志清零
	mov	ax,0600h
	call	scrn
	mov	row,5
	mov	col,0
	call	curs
	;---------------------------------打开源文件
	lea	dx,newinf1
	mov	ah,09h
	int	21h
	lea	dx,filenampl
	mov	al,00
	call	nam_in_open
	cmp	ax,0000
        jne     inf_exit_1;文件不存在
	call	getch
	ret
	;-------------------------------- 
	inf_exit_1:
	mov	handle,ax   ;找到文件
	mov	ax,0601h
	call	scrn
	mov	row,24
	mov	col,0
	call	curs
	;-----------------------------显示表头
	lea	dx,namin
	mov	ah,09h
	int	21h
	mov	cx,6
	call	drow_line
	lea	dx,numin
	mov	ah,09h
	int	21h
	mov	cx,6
	call	drow_line
	mov	cx,COURSE
	inf_loop1:
	lea	dx,cource
	mov	ah,09h
	int	21h
	mov	dl,COURSE
        	add     	dl,1
	sub	dl,cl
	add	dl,30h
	mov	ah,2
	int	21h
	mov	dl,'='
	mov	ah,2
	int	21h
	int	21h
	loop 	inf_loop1
	;------------------姓名学号分数
        	lea     	dx,allin
	mov	ah,09h
	int	21h
	mov	cx,5
	call	drow_line
	mov	ah,9
	lea	dx,avein
	int	21h
	;mov	ah,2
	;mov	dl,10
	;int	21h
	;mov	dl,13
	;int	21h
	;-----------------------显示表头完成
        ;lea     dx,onechar
        ;mov     cx,1
        ;mov     bx,handle
        ;mov     ah,3fh
        ;int     21h
        ;mov     ax,COURSE
        ;cmp     onechar,ax
        ;jne     inf_exit
	;-----------------------

	;开始读取和显示信息
	inf_loop2:  ;一次循环读一条记录
	mov	ax,0601h
	mov	bh,0e1h
	call	scrn_bx
	mov	row,24
	mov	col,0
	call	curs
	;-----------------------	
	mov	bx,handle
	lea	dx,M_nam
	mov	cx,10
	mov	ah,3fh
	int	21h
	jc	inf_exit
	mov	ah,09h
	int	21h
	;-----------------------姓名读取显示完成
	lea	dx,Num
	mov	cx,10
	mov	ah,3fh
	jc	inf_exit
	int	21h
	mov	ah,09h
	int	21h
	;------------------------学号读取显示完成
	lea	dx,score
	mov	cx,0000
	mov	cx,COURSE
	add	cx,COURSE
        add     cx,4
	mov	ah,3fh
	int	21h  ;分数读取12字节
	jc	inf_exit
	cmp	ax,0000
	jne	score_print
	mov	fileend,1   ;文件结束
        ;jmp     inf_exit
	score_print:
	;----------------------------显示分数
	lea	bx,score
	mov	cx,COURSE
	add	cx,2   ;读6次每次一个字
        inf_loop3:   ;显示各科分数总分平均分
	mov	ax,[bx]
	push	bx
	mov	bx,0008
	call	printf
	pop	bx
	add	bx,2
	loop	inf_loop3;
	;--------------------------  分数显示完成
        ;call    clear_inf
	;--------------------------
	cmp	fileend,1
	je	inf_exit ;已经到文件末尾结束显示过程
	jmp	inf_loop2;读取下一条记录
	inf_exit:
        lea     dx,filenam
	call	closefile;关闭文件
	mov	ax,0608h
	call	scrn;上卷8行
	mov	col,0
	mov	row,17
	call	curs ;光标归位
	call	getch
	ret
inftype	endp
;------------------------------------------------------------------------------------------------
drow_line	proc	near
	line_loop:
	mov	dl,'='
	mov	ah,2
	int	21h
	loop 	line_loop
	ret
drow_line	endp
;------------------------------------------------------------------
clear_inf       proc    near
        lea     dx,M_nam
        mov     cl,10
        mov     ch,0
        call    nam_clear
        ;
        lea     dx,Num
        mov     cl,10
        mov     ch,0
        call    nam_clear
        ;
        lea     dx,score
        mov     cl,COURSE
        add     cl,COURSE
        add     cl,4
        mov     ch,0
        call    nam_clear
        ret
clear_inf       endp
;------------------------------------------------------------------
include 	asm.sub
end	main
;=============================	

⌨️ 快捷键说明

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