汇编程序:按学号顺序把学生名次从终端上显示出来

文章描述了一个编程实验,涉及创建一个程序来输入班级学生成绩,存储在ERGADE和RANK数组中,使用子程序实现成绩排序、排名计算和输出。文章详细介绍了主程序、子程序如输入、排序和显示功能,以及调试和排序算法的运用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

按学号顺序把学生名次从终端上显示出来

一、实验内容

开发一个程序,功能包括:输入一个班级的学生成绩,存储在50字节的ERGADE数组中;根据ERGADE数组中的成绩,将学生的排名信息填充到50字节的RANK数组中;最后,按学号顺序在终端上显示每位学生的排名。
提示:
① 主程序MAIN
功能:基于输入的学生成绩,计算并展示学生排名。
② 子程序INPUT
功能:接收并记录一个班级学生的成绩,成绩间以空格分隔。
③ 子程序RANKP
功能:计算一个班级学生的排名。
④ 子程序OUTPUT
功能:显示一个班级学生的排名。
⑤ 子程序DECIBIN
功能:将十进制数转换为二进制,并存储在BX寄存器中。
⑥ 子程序BINDEC
功能:将二进制数转换为十进制,并在屏幕上显示。
⑦ 子程序DEC_DIV
功能:将BX寄存器中的内容除以CX寄存器的内容,并显示结果的一位商。

二、实验步骤

1.自行编写主程序和子程序。
2.输入本班学生某门基础课程的成绩。

三、实验报告

  1. 程序说明。说明程序的功能、结构。
    功能:键入一个班的学生成绩,然后根据成绩,按学号顺序把名次从终端上显示出来。
    结构:
    在这里插入图片描述
  2. 调试说明。包括上机调试的情况、上机调试步骤、调试所遇到的问题是如何解决的,并对调试过程中的问题进行分析,对执行结果进行分析。
    问题1:如何输入两位数
    先输入一个数,乘以10,作为十位上的数,在输入一个数,作为个位上的数,两者相加,结果放入一个寄存器中。
    问题2:成绩排序
    将成绩存入另一个数组中,每次选出最大的数,记录下最大数的位置,并把排名写入名次列表对应的位置上,将数组最大的数置为-1,循环直至所有的数变为-1。
    编译
    在这里插入图片描述
    连接
    在这里插入图片描述
    运行
    在这里插入图片描述
  3. 源程序清单
    数据段
data segment
    id dw 50 dup(?)        ; 数组id,存储50个学生的学号
    erade dw 50 dup(?)     ; 数组erade,存储50个学生的成绩
    rank dw 50 dup(?)      ; 数组rank,存储50个学生的排名
    e2 dw 50 dup(?)        ; 数组e2,用于排序操作的辅助数组
    s1 db 'Please input the score','0DH','0AH','$' ; 提示输入成绩的字符串
    s2 db '| id |score|rank|','$'                  ; 显示表格标题的字符串
    s3 db '----------------','$'                   ; 表格分隔线
    s4 db '| ','$'                                  ; 表格列分隔符
    ente db 0DH,0AH,'$'                            ; 换行符
    count dw 0                                     ; 学生计数器
data ends

代码段

code segment
    assume cs:code,ds:data
start:
    mov ax,data            ; 初始化数据段
    mov ds,ax
    ; 输入部分
    mov si,0               ; 初始化偏移指针
    call input             ; 调用输入子程序
    ; 换行
    call ent
    ; 排序
    mov dx,1               ; 初始化排名
    mov bx,count           ; 设置外循环次数
    call sort              ; 调用排序子程序
    ; 显示成绩和排名
    mov dx,offset s3
    mov ah,09h
    int 21h                ; 打印分隔线
    call ent               ; 换行
    mov dx,offset s2
    mov ah,09h
    int 21h                ; 打印标题
    call ent               ; 换行
    mov cx,count
    mov si,0
    call display           ; 调用显示子程序
    mov dx,offset s3
    mov ah,09h
    int 21h                ; 打印分隔线
    ; 结束程序
    mov ah,4ch
    int 21h

输入子程序

input proc
    ; 输入并处理学生成绩,转换为数字存储
    ; 循环直到输入非空格字符
    ; 保存学生学号和成绩
    ret
input endp

输出子程序

output proc
    ; 显示学生的学号、成绩或排名
    ret
output endp

总输出子程序

display proc
    ; 依次显示每个学生的学号、成绩和排名
    ret
display endp

排序子程序

sort proc
    ; 对学生成绩进行排序,计算排名
    ; 使用选择排序算法
    ret
sort endp

其他辅助子程序

ent proc
    ; 执行换行
    ret
ent endp

edg proc
    ; 输出表格的列分隔符
    ret
edg endp

程序结束

code ends
    end start
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值