📄 students.asm
字号:
data SEGMENT
student STRUC;学生信息定义结构
stunames DB '0' ; 存放姓名
jiange DB ' ' ;空格分开
number DB '0' ;存放学号
blank DB ' ' ;空格分开
score DW '00';存放成绩
over DB ' ';空格分开
student ENDS
stud student 9 DUP(<>) ;分配空间
;其他信息数据定义
msg1 DB 'input 9 pairs of numble and score: ','$'
msg2 DB 'jie guo is:',0dh,0ah,'$'
msg3 DB 'names num scores',0dh,0ah,'$'
quit DB 'press any key to exit......$'
crlf DB 0dh,0ah,'$' ;回车
data ENDS
; 输出宏定义
show MACRO ADDrs
LEA DX,ADDrs
MOV AH,09h
INT 21h
ENDM
code SEGMENT
ASSUME CS:code,DS:data
main PROC FAR
start:MOV AX,data;初始化
MOV DS,AX
show msg1 ;显示提示信息
CALL INsert ;插入子程序
show crlf ;回车换行
show msg2 ;显示结果信息
show msg3 ;显示结果信息
CALL paixu ; 排序
CALL OUTput ;输出
show quit ;结束语句
MOV AH,01h;屏幕停留
INT 21h
MOV AH,4ch;返回DOS
INT 21h
main ENDP
;********************程序数据的键盘输入部分************************
INsert PROC NEAR
MOV CX,0009h;循环从键盘输入数据
MOV AH,01h;输入并回显
LEA BX,stud;首地址
input:
INT 21h
MOV [BX],AL ;转存姓名
INC BX
INT 21h
MOV [BX],AL;转存空格
INC BX
INT 21h
MOV [BX],AL;转存学号
INC BX
INT 21h
MOV [BX],AL;转存空格
INC BX
INC BX
INT 21h
MOV [BX],AL;转存成绩的'十位'数字
DEC BX
INT 21h
MOV [BX],AL;转存成绩的'个位'数字
INC BX
INC BX
INT 21h
MOV [BX],AL;转存空格
INC BX
LOOP input
RET
INsert ENDP
;*********************选择排序算法实现部分**************************
paixu PROC NEAR
MOV DX,0008h;外层循环,共8次
XOR SI,SI;清零,用作起始下标 相当于i
sort1:MOV CX,DX;内层循环,共cx次。 也为三次
MOV BX,SI;bx用作内层循环下标 相当于j
MOV AX,stud.score[BX];起始的元素赋给ax
MOV DI,SI;开始时,始末下标一样
ADD BX,0007h;下标后移一个单元
sort2:CMP stud.score[BX],AX;进行比较
JBE sort3;不大于ax则不变
MOV AX,stud.score[BX];大于则赋给ax
MOV DI,BX;记录下标
sort3:ADD BX,0007h;下标后移一个单元
LOOP sort2;循环
CMP DI,SI;比较起始下标
JE sort4;相等则不进行交换
XCHG stud.score[SI],AX;交换成绩
XCHG stud.score[DI],AX;交换成绩
MOV AL,stud.number[DI];最大学号放al中
XCHG stud.number[SI],AL;交换学号
XCHG stud.number[DI],AL;交换学号
MOV AL,stud.stunames[DI];最大人的姓名放al中
XCHG stud.stunames[SI],AL;交换姓名
XCHG stud.stunames[DI],AL;交换姓名
sort4:ADD SI,0007h;起始下标后移一个单元
DEC DX;外层循环减一
JNZ sort1;不为零则继续
RET
paixu ENDP
;*************************程序数据的屏幕输出部分**********************
OUTput PROC NEAR
MOV CX,0009h
MOV AH,02h
LEA BX,stud
outp:
MOV DL,[BX];输出 姓名
INT 21h
INC BX
MOV DL,[BX];输出空格
INT 21h
INC BX
MOV DL,[BX];输出学号
INT 21h
INC BX
MOV DL,[BX];输出空格
INT 21h
INC BX
INC BX
MOV DL,[BX];输出成绩的'十位'数字
INT 21h
DEC BX
MOV DL,[BX];输出成绩的'个位'数字
INT 21h
INC BX
INC BX
INC BX
MOV AH,09h
LEA DX,crlf;回车换行
INT 21h
MOV AH,02h
LOOP outp
RET
OUTput ENDP
code ENDS
END start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -