📄 student.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 + -