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

📄 student.asm

📁 Student学生成绩管理系统是一个使用MASM宏汇编语言开发的试验性项目。它实现了学生学号、姓名、三门课程成绩的录入、修改、删除以及总成绩计算、按成绩排序等功能
💻 ASM
字号:
; --------------------------------------------------------------------
; 汇编语言课程设计
; 北京理工大学
; 计算机科学技术学院12110505班
; 作者:薛源海
; 学号:20053569
; 邮箱:maomivan@bit.edu.cn
; --------------------------------------------------------------------
; 主模块 - STUDENT.ASM
; --------------------------------------------------------------------


; 宏引用 -------------------------------------------------------------
INCLUDE	CONST.MAC
INCLUDE	CONTROL.MAC
INCLUDE	SCREEN.MAC
; --------------------------------------------------------------------


; 模块外部引用 -------------------------------------------------------
EXTRN	C_LOAD:NEAR, C_SAVE:NEAR, C_QUIT:NEAR, C_FIND:NEAR
EXTRN	C_INS:NEAR, C_EDIT:NEAR, C_DEL:NEAR, C_RANK:NEAR
EXTRN	C_PREV:NEAR, C_NEXT:NEAR, STATE_BAR:NEAR

PUBLIC	NOTICE
; --------------------------------------------------------------------


; 堆栈段 -------------------------------------------------------------
STACKSG	SEGMENT	STACK	'S'
		DW		128 DUP(?)
STACKSG	ENDS
; --------------------------------------------------------------------


; 数据段 -------------------------------------------------------------
DATA	SEGMENT	PUBLIC	'D'

; 功能跳转表
FUNCTAB	DB	'l'
		DW	OFFSET	C_LOAD
		DB	's'
		DW	OFFSET	C_SAVE
		DB	'q'
		DW	OFFSET	C_QUIT
		DB	'f'
		DW	OFFSET	C_FIND
		DB	'i'
		DW	OFFSET	C_INS
		DB	'e'
		DW	OFFSET	C_EDIT
		DB	'd'
		DW	OFFSET	C_DEL
		DB	'r'
		DW	OFFSET	C_RANK
		DB	'p'
		DW	OFFSET	C_PREV
		DB	'n'
		DW	OFFSET	C_NEXT
TABLENG	EQU	($ - FUNCTAB) / 3

; 提示语
M_TITLE	DB	'<<< Student Management >>>', '$'
M_HELP	DB	'[File: Load Save Quit]  [Data: Find Insert Edit Delete Rank]  [Page: Prev Next]', '$'
M_TYPE	DB	'__|Student ID    |Name          |  Score A|  Score B|  Score C|    Total|', '$'
M_START	DB	'Press any key to start.', '$'
M_TIP	DB	'Please input your command.', '$'

M_LOGO1	DB	'  _____                    _                      ', '$'
M_LOGO2	DB	' / ____)   _              / |                 _   ', '$'
M_LOGO3	DB	'| |____  _| |_  _   _   __| |  ___   _____  _| |_ ', '$'
M_LOGO4	DB	'\_____ \|_   _|| | | | / _  | / _ \ /  _  \|_   _|', '$'
M_LOGO5	DB	' ____| |  | |_ | |_| || |_| || ___| | | | |  | |_ ', '$'
M_LOGO6	DB	'(______/  \___) \____/ \____/ \___  |_| |_|  \___)', '$'
M_LOGO7	DB	'                              Made by Xue Yuanhai ', '$'
M_LOGO8	DB	'                          12110505, BIT, Mar.2008 '

; 其它
M_CRLF	DB	CR, LF, '$'
M_LINES DB	'01', CR, LF, '02', CR, LF, '03', CR, LF, '04', CR, LF, '05', CR, LF
		DB	'06', CR, LF, '07', CR, LF, '08', CR, LF, '09', CR, LF, '10', CR, LF
		DB	'11', CR, LF, '12', CR, LF, '13', CR, LF, '14', CR, LF, '15', CR, LF
		DB	'16', CR, LF, '17', CR, LF, '18', CR, LF, '19', CR, LF, '20', '$'

DATA    ENDS
; --------------------------------------------------------------------


; 代码段 -------------------------------------------------------------
CODE	SEGMENT	PUBLIC	'C'

; 主函数
MAIN	PROC	FAR
		ASSUME	CS:CODE, DS:DATA, SS:STACKSG
		LOADDS	DATA
		CALL	INIT
		CALL	MENU
		RETURN
MAIN	ENDP

; 初始化用户界面
INIT	PROC
		; 清屏
		CLRSCR	2EH

		; 程序名
		WINDOW	0000H, 004FH, 16H
		PUTS	001BH, M_TITLE

		; 命令提示信息
		CALL	HELP_BAR

		; 表头
		WINDOW	0200H, 024FH, 2FH
		PUTS	0200H, M_TYPE

		; 序号
		PUTS	0300H, M_LINES

		; 统计信息
		CALL	STATE_BAR

		; logo
		CALL	LOGO

		RET
INIT	ENDP

; 显示帮助信息
HELP_BAR	PROC
			WINDOW	0100H, 014FH, 37H
			PUTS	0100H, M_HELP

			PUTC	0107H, 'L', 3CH
			PUTC	010CH, 'S', 3CH
			PUTC	0111H, 'Q', 3CH

			PUTC	011FH, 'F', 3CH
			PUTC	0124H, 'I', 3CH
			PUTC	012BH, 'E', 3CH
			PUTC	0130H, 'D', 3CH
			PUTC	0137H, 'R', 3CH

			PUTC	0145H, 'P', 3CH
			PUTC	014AH, 'N', 3CH

			PUTC	0101H, 'F', 31H
			PUTC	0102H, 'i', 31H
			PUTC	0103H, 'l', 31H
			PUTC	0104H, 'e', 31H
			PUTC	0105H, ':', 31H
			PUTC	0119H, 'D', 31H
			PUTC	011AH, 'a', 31H
			PUTC	011BH, 't', 31H
			PUTC	011CH, 'a', 31H
			PUTC	011DH, ':', 31H
			PUTC	013FH, 'P', 31H
			PUTC	0140H, 'a', 31H
			PUTC	0141H, 'g', 31H
			PUTC	0142H, 'e', 31H
			PUTC	0143H, ':', 31H
			TOPOST  0200H
			RET
HELP_BAR	ENDP

; 显示LOGO
LOGO	PROC
		PUSH	BX
		WINDOW	0302H, 164FH, 1FH
		WINDOW	060BH, 1344H, 2FH
		WINDOW	070DH, 1242H, 1FH
		PUTS	080FH, M_LOGO1
		PUTS	090FH, M_LOGO2
		PUTS	0A0FH, M_LOGO3
		PUTS	0B0FH, M_LOGO4
		PUTS	0C0FH, M_LOGO5
		PUTS	0D0FH, M_LOGO6
		PUTS	0F0FH, M_LOGO7
		PUTS	100FH, M_LOGO8
		LEA		BX, M_START
		CALL	NOTICE
		WINDOW	0302H, 164FH, 1FH
		WINDOW	1800H, 184FH, 2FH
		POP		BX
		RET
LOGO	ENDP

; 显示提示栏并等待用户选择任意键确定
; 输入:BX - 提示字符串地址
NOTICE	PROC
		PUSH	AX
		WINDOW	1800H, 184FH, 2FH
		PUTS	1800H, [BX]
		TOPOST	184FH
		MOV		AH, 0
		INT		16H
		POP		AX
		RET
NOTICE	ENDP

; 等待用户选择
MENU		PROC
			PUSH	AX
			PUSH	CX
			PUSH	SI
GETORDER:	WINDOW	1800H, 184FH, 2FH
			PUTS	1800H, M_TIP
			MOV		AH, 0
			INT		16H
			OR		AL, 20H
			; 查表检索对应的命令,并执行
			LEA		SI, FUNCTAB
			MOV		CX, TABLENG
CMPCMD:		CMP		AL, [SI]
			JE		EXECMD
			ADD		SI, 3
			LOOP	CMPCMD
			JMP		GETORDER
EXECMD:		CALL	WORD PTR [SI+1]
			MOV		AL, 'q'
			CMP		AL, [SI]
			JE		ME_FINISH
			JMP		GETORDER
ME_FINISH:	POP		SI
			POP		CX
			POP		AX
			RET
MENU		ENDP

CODE	ENDS
		END		MAIN
; --------------------------------------------------------------------

⌨️ 快捷键说明

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