简单成绩统计系统(汇编)

从键盘接受各个学生成绩,将各个学生成绩按降序排列,并求出最高的分数,最低的分数,及格人数,不及格人数,平均数

代码

简单成绩统计程序
先输入成绩,以空格键分隔,用Enter键表示输入完成。

// 成绩统计程序
data segment
string1 db  'please input score: $'
string2 db  'output score       : $'
string3 db  '| max score      | $'
string4 db  '| min score      | $'
string5 db  '| Passers-by     | $'
string6 db  '| Not Passer-by  | $'
string7 db  '| Average score  | $'
string8 db  '+----------------+-------+$'
kong    db  ' $'
string9 db  '  | $'
string0 db  'Press any key to continue...$'
pas dw  0000H
npa dw  0000H
avg dw  0000H
num dw  0000H
avg2 dw 0000H
score dw 60 dup(0)
data endsstack segment
dw 64 dup(0)
stack endscode segmentassume    cs:code,ds:data,ss:stack
main proc far
start:
t:call  readycall   inputcall   sortcall    countcall   output jmp t
main endp
;========================ready=============================
ready:mov ax,datamov ds,ax               ;ds数据段寄存器mov ax,stackmov ss,ax               ;ss站段寄存器mov dx,offset string1mov ah,09hint 21h                 xor bx,bx               ;临时存放输入进来的数xor cx,cx               ;xor si,si               ;score的指针xor di,di               ;计数ret
;==========================input==========================
input:mov ah,1 int 21h                cmp al,0dh         jz  over                cmp al,20h       jz  savesub al,30hmov cl,4shl bx,cl          add bl,al jmp input
save:                    mov score[si],bx  add si,2 inc dixor bx,bxjmp input
over:mov score[si],bx inc di             mov dl,0ah            mov ah,02hint 21h  mov cx,didec cx                 xor bx,bx ret
;===========================sort=========================
sort:                           ;bx=0,用冒泡排序,bx为要改变的哪一位的坐标mov si,2 mov dx,cx
cmp2:mov ax,score[bx]cmp ax,score[bx+si]jnc cmp3                    ;大于或相等时转xchg ax,score[bx+si]     mov score[bx],ax
cmp3:add si,2 dec dx                   jnz cmp2add bx,2                    ;loop sort                   mov dx,offset string2mov ah,09hint 21hsub si,si                    ;si清零ret;==========================count==============================
count:                          ;si=0 mov num,di
count1:mov bx,score[si]xor ax,axclc                         ;cf=0mov ax,avgadd al,bldaa                     jc  avg1
y:            add ah,bhmov avg,ax clc                         ;cf=0cmp bx,60Hjl  NPass                   ;有符号,jl小于跳转jge Pass                    ;有符号,jgl大于等于跳转
avg1:                           ;高位加一add ah,1Hdaajmp  y
x:add si,2 dec di cmp di,0                   jnz count1       sub si,si                   mov di,num                  ret
NPass:  inc npa                     ;npa++jmp x
Pass:inc pasjmp x
;===========================output================================
output:                         ;si=0,di为输入的个数mov cx,di
output3:  ;-------sort output---------mov bx,score[si] call    outputh1         mov dl,20h                 mov ah,02hint 21h add si,2                   dec di                  cmp di,0 jnz output3                output2:call    line_feed; --------------max,min,pass,not pass output----- call hangmov dx,offset string4mov ah,09hint 21h                     ;显示string4mov bx,score[si-2] call    outputh1            ;输出score中最后一个数call    hou                 ;格子封口call    line_feed           ;回车换行call    hang                ;输出+---------------+---------+mov dx,offset string3mov ah,09hint 21h mov bx,score[0] call    outputh1call    houcall    line_feedcall    hangmov dx,offset string5mov ah,09hint 21hmov bx,pas call    outputh1call    houcall    line_feedcall    hangmov dx,offset string6mov ah,09hint 21hmov bx,npa call    outputh1call    houcall    line_feed  call    hangmov dx,offset string7mov ah,09hint 21h    ;---------10 to 16----------avg中是输入值的总和,以10进制保存,但计算是以16进制计算,mov bx,avg                  ;个位mov ah,0mov al,bland al,0fh                  ;保留al低四位(个位)的值mov avg2,axmov al,bl                   mov cl,4                    ;十位shr al,cl                 mov cl,10mul cl                      ;ax=al*cl mov dx,0add avg2,ax                 mov al,bh                   ;百位and al,0fh                  ;保留ah低四位(百位)的值mov cx,100                  ;同上mul cxmov dx,0add avg2,ax ;----------average-----------mov cx,nummov ax,avg2cwd                         div cx                      ;商放在ax中;-------16 to 10-----------除完了,就恢复10进制保存,方便以后输出          ;mov bh,0mov cl,10div clmov bl,ah                   ;余数(个位)给blcmp al,0h                   jz  zcbwdiv clmov dl,ah                   ;余数(十位)给dlmov cl,4shl dl,cladd bl,dl                   ;个位和十位放在一起,cmp al,0hjz  zmov cl,10cbwdiv clmov bh,ah                   ;将百位放入bh前
z:call outputh1call    houcall line_feed call hangcall line_feedmov dx,offset string0mov ah,09hint 21hmov ah,01hint 21hmov avg,0mov avg2,0mov npa,0mov pas,0mov al,0 mov bh,07mov cx,0 mov dh,40 mov dl,60mov ah,06h int 10h mov bh,0 mov dh,0 mov dl,0mov ah,02h int 10hretmov ah,4chint 21h
;--------------------输出-------------------
outputh1:mov ch,1                ;用于判断前面是否全为0mov dl,bhmov cl,4 shr dl,cl               ;千位,cmp dl,0                ;dl为零,不输出jz  out01mov ch,0add dl,30hmov ah,02hint 21hjmp outputh2            ;为了跳过out01
out01:                      mov dx,offset kongmov ah,09hint 21h
outputh2: mov dl,bh and dl,0fh              ;百位cmp ch,0                jz  outputh21cmp dl,0                jz  out02outputh21:mov ch,0add dl,30hmov ah,02hint 21hjmp outputl1
out02:mov dx,offset kongmov ah,09hint 21h
outputl1:mov dl,blmov cl,4 shr dl,cl               ;十位cmp ch,0jz  outputl11           ;同上cmp dl,0jz  out03
outputl11: add dl,30hmov ah,02hint 21hjmp outputl2
out03:mov dx,offset kongmov ah,09hint 21h
outputl2: mov dl,bl and dl,0fh              ;个位add dl,30hmov ah,02hint 21hret
line_feed: ;--------------换行-----------mov dl,0ahmov ah,02hint 21hmov   dl,0dhmov   ah,02hint   21hret
hang:                       ;输出|----------------+----------mov dx,offset string8mov ah,09hint 21hcall line_feed ret
hou:                       ;显示      |mov dx,offset string9mov ah,09hint 21hret
code    endsend start

输出结果


我没有学过汇编,临时看书,百度写出来的,若有问题请各位大佬指出
曾百度参考一些大佬,因自己原因忘了出处,若有发现希望能够指出,谢谢!

汇编 输入成绩,排序输出,平均值,及格,不及格人数,最大最小值相关推荐

  1. C++:录入班级数学成绩,计算最大值、平均值、不及格人数

    录入班级数学成绩,计算最大值.平均值.不及格人数 #include<iostream> using namespace std; int main() {float a=0;float s ...

  2. 输入十个学生的成绩,判断及格不及格人数,得到不及格人的学号

    int[] xs = new int[10]; int [] cj=new int [3]; for (int i=0;i<10 ;i++ ) { Console.Write("请输入 ...

  3. python统计及格不及格人数_Python一次输入多个值(列出存储信息),python,一次性,数值,列表...

    今天在完成python的PTA编程题的时候认识到自己知识的巨大漏洞: 7-1 成绩统计 现有某班级Python考试成绩,请你帮老师做一下成绩统计,找出最高分.最低分,算出平均分,统计出不及格人数 输入 ...

  4. [C语言]统计成绩问题:输入某班学生某门课的成绩(最多不超过40人,具体人数由用户键盘输入),用函数编程统计不及格人数。

    输入 输入包含两行:    第一行是一个整数n,表示班级人数.    第二行是n个整数,表示n个学生的成绩,相邻两项之间用一个空格隔开. 输出 输出不及格人数. 输入示例 3    70 90 58 ...

  5. python用一维数组存储学号和成绩_用一维数组存储学号和成绩,然后,按成绩排序输出...

    输入描述: 输入第一行包括一个整数N(1<=N<=100),代表学生的个数.接下来的N行每行包括两个整数p和q,分别代表每个学生的学号和成绩. 输出描述: 按照学生的成绩从小到大进行排序, ...

  6. Java学生成绩排序输出的三种不同方法

    要实现学生成绩的排序,要从两方面来考虑如何设计程序. 第一方面是选择存储方式 第二方面是选择什么样的排序方式 以下是三种不同类型的实现: 使用对象数组存储学生信息,冒泡法实现排序 使用List存储学生 ...

  7. 8.4 输入某班学生某门课的成绩,(最多不超过40人,具体人数由用户键盘输入),用函数编程统计不及格人数

    #include<stdio.h> main() { int n,a[40],i,count=0; printf("请输入学生人数:"); scanf("%d ...

  8. C语言输入成绩等级输出对应分数段

    #include <stdio.h> #include <stdlib.h>/* run this program using the console pauser or ad ...

  9. Java实现成绩判断优秀 良好 及格 不及格

    package Day04.Multi;public class Scoretest {public static void main(String[] args) {java.util.Scanne ...

最新文章

  1. 游戏外挂技术:编程实现内存检索(检索内存中指定数据)
  2. hls之m3u8、ts流格式详解
  3. eclipse启动tomcat无法访问
  4. B君的圆锥(51Nod-1629)
  5. 用两种方法求解九宫算问题
  6. 算法工程师常用Linux命令总结
  7. bzoj 4537: [Hnoi2016]最小公倍数 分块+并查集
  8. BScroll 使用(Vue)
  9. Macbook pro 2015 13寸丐版更换512G固态流程记录
  10. Excel点击按钮隐藏指定行
  11. jQuery each()跳出循环
  12. 我知道你在淘宝买过很多东西,但是你买过一所大学吗
  13. 2021年茶艺师(中级)考试报名及茶艺师(中级)免费试题
  14. 微信开发者工具下载及调试
  15. 猫眼网历史日票房数据爬取
  16. 使用sendBeacon进行前端数据上报
  17. ioppc技术_广东电网有限责任公司河源供电局基于IOPPC线路光纤网络智能态势感知技术研究技术服务等5个项目采购公告...
  18. 微信小程序如何修改小程序名称
  19. 数字图像处理第八章----图像压缩
  20. Suzy找到实习了吗Day 7 | 哈希表结束啦 454. 四数相加 II,383. 赎金信,15. 三数之和,18. 四数之和

热门文章

  1. MCC(移动国家码)和 MNC(移动网络码)
  2. 杨柳目-杨柳科:杨柳科
  3. OpenCV 画箭头 python
  4. 资深大牛带你了解源码!带你轻松理解Android-Hook机制,已开源
  5. OpenGL ES EGL eglQueryContext
  6. 使用js编写用户注册(简洁版)
  7. 众望所归!《觉醒年代》《山海情》成玉兰奖大赢家
  8. iOS中SDK的简单封装与使用
  9. 深入理解AQS之ReentrantReadWriteLock详解
  10. IDEA不提示生成serialVersionUID解决方法