首页 > 编程语言 >八(汇编程序设计):输入5个同学成绩(有学号提示),然后排序,最后显示出名次表(学号,成绩)。要求:应用子程序设计,程序中要有成绩录入模块、排序模块、输出模块。

八(汇编程序设计):输入5个同学成绩(有学号提示),然后排序,最后显示出名次表(学号,成绩)。要求:应用子程序设计,程序中要有成绩录入模块、排序模块、输出模块。

时间:2024-06-06 13:01:29浏览次数:28  
标签:排序 DX DI MOV SI CX 模块 成绩 DS

代码

DSEG	SEGMENT
GRADE   DB 5 DUP(0)
XUEHAO  DB '1','2','3','4','5'
BUF     DB 4 DUP(0)
INF     DB "Student",'$'
NEWLINE DB 0DH,0AH
DSEG    ENDS

SSEG  SEGMENT STACK
SKTOP DB 50 DUP(0)
SSEG 	ENDS 

CSEG SEGMENT
	ASSUME CS:CSEG,DS:DSEG,SS:SSEG
START:
	MOV AX,DSEG
	MOV DS,AX
	MOV AX,SSEG
	MOV SS,AX
	
	CALL CIN
	LEA DI,NEWLINE
	MOV DL,DS:[DI]
	MOV AH,2
	INT 21H
	MOV DL,DS:[DI+1]
	INT 21H
	CALL selectionSort
	CALL COUT

	MOV AH,4CH
	INT 21H

CIN	PROC NEAR
	XOR SI,SI
	LEA SI,XUEHAO
	XOR DI,DI
	XOR BX,BX
	XOR CX,CX
	PUSH CX;输入5个学生成绩的计数
	LEA CX,BUF
	LEA DI,GRADE
	PUSH DI
	
LOP:
	POP DI
	POP CX
	CMP CX,5
	JE ENDCIN
	INC CX
	PUSH CX
	PUSH DI
	LEA DI,BUF
	MOV DX,SEG INF
	MOV DS,DX
	LEA DX,INF
	MOV AH,9
	INT 21H
	MOV DL,DS:[SI]
	INC SI
	MOV AH,02H
	INT 21H
	MOV DL,':'
	INT 21H
	
INGRADE:
	MOV AH,01H
	INT 21H
	MOV DS:[DI],AL
	INC DI
	CMP AL,0DH
	JNE INGRADE
	MOV DX,DI
	POP DI
	CALL C_to_N
	PUSH DI	
	JMP LOP
	
ENDCIN: RET
CIN	 ENDP

C_to_N PROC NEAR
	PUSH DI
	PUSH SI
	MOV DI,DX
	LEA SI,BUF
	DEC SI
	XOR DX,DX
	SUB DI,2
	MOV CL,1

TURN:	MOV BL,DS:[DI]
	SUB BL,30H
	MOV AL,CL
	MUL BL
	ADD DL,AL
	MOV AL,10
	MUL CL
	MOV CL,AL
	DEC DI
	CMP DI,SI
	JNE TURN
	POP SI
	POP DI
	MOV DS:[DI],DL
	INC DI
	RET
C_to_N ENDP

selectionSort PROC NEAR
	LEA DI,GRADE;MinIndex
	MOV CX,4
	MOV DX,4	
LOP1:
	MOV SI,DI
	INC SI
	PUSH CX
	MOV BX,DI
	MOV CX,DX
	MOV AL,DS:[DI]
LOP2:	
	CMP AL,DS:[SI]
	JA EXCHANGE
	INC SI
	JMP NEXT
EXCHANGE: 
 	MOV AL,DS:[SI]
	MOV BX,SI
	INC SI
NEXT:	LOOP LOP2
	XCHG AL,DS:[DI]
	XCHG AL,DS:[BX]
	
	PUSH DI;学号交换
	PUSH DX
	MOV AX,DI
	LEA DI,GRADE
	LEA SI,XUEHAO
	SUB AX,DI
	SUB BX,DI
	ADD AX,SI
	MOV DI,AX
	ADD BX,SI
	MOV DL,DS:[DI]
	XCHG DL,DS:[BX]
	XCHG DL,DS:[DI]
	POP DX
	POP DI

	DEC DX
	INC DI
	POP CX
	LOOP LOP1
	RET
selectionSort ENDP

COUT PROC NEAR
	
	XOR CX,CX
	MOV CX,5
	LEA DI,GRADE
	LEA SI,XUEHAO
	
LOP3:
	PUSH CX
	MOV DX,SEG INF
	MOV DS,DX
	LEA DX,INF
	MOV AH,9
	INT 21H

	MOV DL,DS:[SI]
	INC SI
	MOV AH,02H
	INT 21H

	MOV DL,':'
	INT 21H

	XOR AX,AX
	XOR BX,BX
	MOV BL,0AH
	MOV AL,DS:[DI]
	INC DI
	PUSH DI
	PUSH SI
	LEA DI,BUF
	LEA SI,BUF
	DEC SI
NEXT1: DIV BL
	ADD AH,30H
	XOR DX,DX
	MOV DS:[DI],AH
	CMP AL,0
	JE OUTBUF
	INC DI
	MOV DL,AL
	XOR AX,AX
	MOV AL,DL
	JMP NEXT1
	
OUTBUF:
	MOV DL,DS:[DI]
	DEC DI
	MOV AH,2
	INT 21H
	CMP SI,DI
	JNE OUTBUF	
	
	LEA DI,NEWLINE
	MOV DL,DS:[DI]
	MOV AH,2
	INT 21H
	MOV DL,DS:[DI+1]
	INT 21H

	POP SI
	POP DI
	POP CX	
	LOOP LOP3

	RET
COUT ENDP

CSEG 	ENDS
	END START

标签:排序,DX,DI,MOV,SI,CX,模块,成绩,DS
From: https://blog.csdn.net/2201_76131920/article/details/139497153

相关文章

  • 快速排序——AcWing785.快速排序
    AcWing785.快速排序题目描述785.快速排序-AcWing题库运行代码#include<iostream>#include<algorithm>usingnamespacestd;constintN=1e6+6;intq[N];voidquick_sort(intq[],intl,intr){if(l>=r)return;intm=l+r>>1;//>......
  • 如何用Golang写msf插件模块
    最近有空在看msf,发现msf里面有模块的源码是golang的,去翻了翻wiki,wiki上面的编写日期是2018.12.13,搜了下国内,好像没有这方面的文章,那就自己跟着做做记个笔记首先第一步自然是安装go,官方wiki上测试是在1.11.2通过,建议使用version>=1.11.2的go,怎么安装go我不再赘述注意事项......
  • springboot模块化开发项目搭建-完善
    1.克隆项目,打开项目 2.改造成模块,entrance不是加粗,说明不是模块,需要改成模块 3.添加mysql驱动、mybatis、数据库连接池,定义版本,刷新maven 4.启动......
  • Hive3.1.2分区与排序(内置函数)
    1、Hive分区(十分重要!!)分区的目的:避免全表扫描,加快查询速度!在大数据中,最常见的一种思想就是分治,我们可以把大的文件切割划分成一个个的小的文件,这样每次操作一个个小的文件就会很容易了,同样的道理,在hive当中也是支持这种思想的,就是我们可以把大的数据,按照每天或者每小时切分......
  • Python Flask实现蓝图Blueprint配置和模块渲染
     Python基础学习:Pyhton语法基础Python变量Python控制流Python函数与类PythonException处理Python文件操作Python日期与时间PythonSocket的使用......
  • 常见的排序算法——快速排序(二)
    本文记述了对快速排序的2项改进的基本思想和一份参考实现代码,并在说明了算法的性能后用随机数据进行了验证。◆思想本文实现了《算法(第4版)》书中提到的2项改进,切换到插入排序:对小规模子数组使用插入排序。减少在小规模数组中的递归调用能改进整个算法。三取样切分:将取样......
  • python 直接加载egg 文件的模块
    主要作为一个简单记录参考示例文件模式importsysimportosegg_path=os.path.join(os.path.dirname(__file__),'dist','mydalong-0.1-py3.11.egg')sys.path.append(egg_path)fromdemoimportdalongdalong.login()文件夹模式......
  • STM32解决方案2:STM32程序中移植入其他模块注意事项
    Question在一个stm32大的开发程序中,如果要编写完之后移植入一个模块,如果要重新再编写整个程序显然很麻烦。为此,我们以stm32F103的一个程序为例,移植入LCD显示屏模块。(1)在对应的文件夹下导入LCD的文件。(2)在对应文件中添加该头文件(3)在此处加入LCD所在的目录(4)一定要记......
  • C语言排序
    一、排序的运用生活中排序随处可见,比如我们高考时的排名,大学学校水平的排名等,打开京东,可以发现每样商品按照不同的方式排序,比如综合,销量,价格。其内部需要排序代码来完成。二、常见的排序算法一、交换排序一、冒泡排序冒泡排序是一种最容易想到的排序,但是其效率不高,没有实......
  • ESP8266 01sWiFi模块保姆级教程 烧录和联网,连接华为云
    前言写在前面。这个esp01s联网真的是折磨人啊,浪费了我三四天的时间,网上各种教程叫天天不灵,叫地地不灵,所以才有了这篇教程,致力于帮助像我一样的小白少踩坑,我可以说是把能踩的坑都塌了一遍。烧录部分首先强烈建议小白玩家不要用网上任何一种接线方式和手动上电的方式(这里真的......