汇编利用dosbox0.74写一个程序实现以下基本要求 接收从键盘输入的一个班的学生成绩,并存放于30字的grade数组中,各数据的格式为: 学号,成绩1,成绩2,...,成绩5 然后根据grade中的学生成绩,把学生名次填入rank数据组中,并显示出来, 格式为: 学号,名次

时间: 2024-02-19 18:03:58 浏览: 33
好的,我会尽力回答你的问题。首先需要了解一些汇编语言的知识。在 DOSBox 中,我们可以使用 Int 21h 中断来实现键盘输入和屏幕输出的功能。以下是具体实现步骤: 1. 定义数据段和堆栈段 ``` .model small .stack 100h .data grade db 30 dup(0) ; 成绩数组,每个学生5门课程,共6个字节 rank db 30 dup(0) ; 名次数组,每个学生1个字节 newline db 0dh, 0ah, '$' ; 换行符 .code ``` 2. 实现键盘输入功能 ``` input: mov ah, 0ah ; 设置 ah 寄存器为 0ah,表示从键盘输入一个字符 mov dx, offset grade ; 将 grade 数组的偏移地址传递给 dx 寄存器 int 21h ; 调用 21h 中断 ret ``` 3. 实现成绩排序和名次计算功能 ``` sort: mov si, offset grade ; 将 grade 数组的偏移地址传递给 si 寄存器 mov cx, 30 ; 学生数为 30 mov bx, cx ; 学生数的备份 mov di, offset rank ; 将 rank 数组的偏移地址传递给 di 寄存器 mov al, 1 ; 初始名次为 1 mov ah, 0 ; 初始最高分数为 0 sort_loop: cmp cx, 0 ; 比较 cx 和 0 je sort_end ; 如果 cx 等于 0,跳转到 sort_end 标签处 mov dl, [si+1] ; 将学生的第一门成绩传递给 dl 寄存器 add dl, [si+2] ; 将学生的第二门成绩加到 dl 寄存器中 add dl, [si+3] ; 将学生的第三门成绩加到 dl 寄存器中 add dl, [si+4] ; 将学生的第四门成绩加到 dl 寄存器中 add dl, [si+5] ; 将学生的第五门成绩加到 dl 寄存器中 cmp dl, ah ; 比较 dl 寄存器和 ah 寄存器 jle rank_cal ; 如果 dl <= ah,跳转到 rank_cal 标签处 mov ah, dl ; 将最高分数更新为 dl mov al, 1 ; 名次更新为 1 rank_cal: mov [di], al ; 将学生名次传递给 rank 数组 inc si ; si 寄存器加 6,指向下一个学生 inc di ; di 寄存器加 1,指向下一个名次 inc al ; 名次加 1 loop sort_loop ; 循环排序 sort_end: ret ``` 4. 实现屏幕输出功能 ``` output: mov ah, 9 ; 设置 ah 寄存器为 9,表示向屏幕输出一个字符串 mov dx, offset newline ; 将换行符的偏移地址传递给 dx 寄存器 int 21h ; 调用 21h 中断 mov si, offset grade ; 将 grade 数组的偏移地址传递给 si 寄存器 mov cx, bx ; 将学生数的备份传递给 cx 寄存器 mov di, offset rank ; 将 rank 数组的偏移地址传递给 di 寄存器 output_loop: cmp cx, 0 ; 比较 cx 和 0 je output_end ; 如果 cx 等于 0,跳转到 output_end 标签处 mov ah, 2 ; 设置 ah 寄存器为 2,表示向屏幕输出一个字符 mov dl, [si] ; 将学生的学号传递给 dl 寄存器 int 21h ; 调用 21h 中断 mov ah, 2 ; 设置 ah 寄存器为 2,表示向屏幕输出一个字符 mov dl, ',' ; 将逗号传递给 dl 寄存器 int 21h ; 调用 21h 中断 mov ah, 2 ; 设置 ah 寄存器为 2,表示向屏幕输出一个字符 mov dl, [di] ; 将学生的名次传递给 dl 寄存器 int 21h ; 调用 21h 中断 mov ah, 9 ; 设置 ah 寄存器为 9,表示向屏幕输出一个字符串 mov dx, offset newline ; 将换行符的偏移地址传递给 dx 寄存器 int 21h ; 调用 21h 中断 add si, 6 ; si 寄存器加 6,指向下一个学生 inc di ; di 寄存器加 1,指向下一个名次 loop output_loop ; 循环输出 output_end: ret ``` 5. 主程序 ``` main: call input ; 调用 input 子程序,从键盘输入学生成绩 call sort ; 调用 sort 子程序,排序并计算名次 call output ; 调用 output 子程序,向屏幕输出学生名次 mov ah, 4ch ; 设置 ah 寄存器为 4ch,表示程序结束 int 21h ; 调用 21h 中断 end main ``` 以上就是汇编程序的基本实现。注意,在 DOSBox 中编写汇编程序需要使用文本编辑器,将代码保存为 .asm 格式,然后使用 TASM 和 TLINK 工具编译链接生成 .exe 可执行文件。

相关推荐

最新推荐

recommend-type

汇编 从键盘输入一个数字N(0~9),然后显示N个大写字母“A”

(1)键盘输入使用21H功能调用 MOV AH,1 INT 21H ;输入字符的ASCII码将保存在AL寄存器中 (2)将输入数字的ASCII码转换成数字本身 (3)循环输出
recommend-type

汇编程序DOSBox实验1.doc

1.在数据段DATA中有两个字数据X和Y, 假设X=1122H, Y=3344H, 编程求两个字的和,结果存放到Z单元中. 2.从SOURCE_BUFFER单元开始存放了20个字母A, 编程将这20个字母A的字符串传送到DEST_BUFFER开始的单元中. 3.从SOURCE...
recommend-type

智慧物流医药物流落地解决方案qytp.pptx

智慧物流医药物流落地解决方案qytp.pptx
recommend-type

JAVA物业管理系统设计与实现.zip

JAVA物业管理系统设计与实现
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

解释minorization-maximization (MM) algorithm,并给出matlab代码编写的例子

Minorization-maximization (MM) algorithm是一种常用的优化算法,用于求解非凸问题或含有约束的优化问题。该算法的基本思想是通过构造一个凸下界函数来逼近原问题,然后通过求解凸下界函数的最优解来逼近原问题的最优解。具体步骤如下: 1. 初始化参数 $\theta_0$,设 $k=0$; 2. 构造一个凸下界函数 $Q(\theta|\theta_k)$,使其满足 $Q(\theta_k|\theta_k)=f(\theta_k)$; 3. 求解 $Q(\theta|\theta_k)$ 的最优值 $\theta_{k+1}=\arg\min_\theta Q(
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。
recommend-type

"互动学习:行动中的多样性与论文攻读经历"

多样性她- 事实上SCI NCES你的时间表ECOLEDO C Tora SC和NCESPOUR l’Ingén学习互动,互动学习以行动为中心的强化学习学会互动,互动学习,以行动为中心的强化学习计算机科学博士论文于2021年9月28日在Villeneuve d'Asq公开支持马修·瑟林评审团主席法布里斯·勒菲弗尔阿维尼翁大学教授论文指导奥利维尔·皮耶昆谷歌研究教授:智囊团论文联合主任菲利普·普雷教授,大学。里尔/CRISTAL/因里亚报告员奥利维耶·西格德索邦大学报告员卢多维奇·德诺耶教授,Facebook /索邦大学审查员越南圣迈IMT Atlantic高级讲师邀请弗洛里安·斯特鲁布博士,Deepmind对于那些及时看到自己错误的人...3谢谢你首先,我要感谢我的两位博士生导师Olivier和Philippe。奥利维尔,"站在巨人的肩膀上"这句话对你来说完全有意义了。从科学上讲,你知道在这篇论文的(许多)错误中,你是我可以依