单片机为89c51。用汇编语言编写:1.自选ROM若干个单元,手动输入BCD码,并编程实现下列任务要求: (1)统计优秀(90≤X≤100)、良好(80≤X<90)、中等(70≤X<80)、及格(60≤X<70)与不及格(X<60)各分数段的人数并存储于内部RAM 5个单元;

时间: 2024-01-10 11:03:17 浏览: 35
好的,这里是实现您所需功能的汇编代码。代码注释中有详细的解释和说明,请仔细阅读。 ``` ; 定义常量 ORG 0x0000 ; 程序入口地址 SCORE_COUNT EQU 20 ; 成绩数据的数量 RAM_START EQU 0x40 ; 内部RAM起始地址 RAM_END EQU RAM_START + 5 ; 内部RAM结束地址 ; 定义变量 score_count_high db 0 ; 优秀分数段的人数 score_count_good db 0 ; 良好分数段的人数 score_count_middle db 0 ; 中等分数段的人数 score_count_pass db 0 ; 及格分数段的人数 score_count_fail db 0 ; 不及格分数段的人数 ; 程序入口 START: ; 初始化 MOV R0, #RAM_START ; 设置R0为内部RAM起始地址 MOV A, #0 ; 清零累加器 ; 输入成绩数据,并进行分数段统计 MOV R1, #SCORE_COUNT ; 设置R1为成绩数据的数量 MOV DPTR, #SCORE_DATA ; 设置数据指针为SCORE_DATA SCORE_LOOP: ; 从键盘输入成绩数据,存储在ROM中 ; 这里需要您自己实现输入BCD码的功能 ; 并将数据存储在SCORE_DATA所指向的ROM单元中 ; 统计分数段人数 MOV A, @DPTR ; 读取成绩数据 CJNE A, #0, SCORE_NOT_ZERO ; 如果成绩不为0,则进行分数段统计 SJMP SCORE_END_LOOP ; 否则结束循环 SCORE_NOT_ZERO: CJNE A, #100, SCORE_NOT_HIGH ; 如果成绩不是100,则判断是否在优秀分数段 INC score_count_high ; 否则优秀分数段人数加1 SJMP SCORE_END_LOOP ; 结束循环 SCORE_NOT_HIGH: CJNE A, #90, SCORE_NOT_GOOD ; 如果成绩不是90,则判断是否在良好分数段 INC score_count_good ; 否则良好分数段人数加1 SJMP SCORE_END_LOOP ; 结束循环 SCORE_NOT_GOOD: CJNE A, #80, SCORE_NOT_MIDDLE ; 如果成绩不是80,则判断是否在中等分数段 INC score_count_middle ; 否则中等分数段人数加1 SJMP SCORE_END_LOOP ; 结束循环 SCORE_NOT_MIDDLE: CJNE A, #70, SCORE_NOT_PASS ; 如果成绩不是70,则判断是否在及格分数段 INC score_count_pass ; 否则及格分数段人数加1 SJMP SCORE_END_LOOP ; 结束循环 SCORE_NOT_PASS: INC score_count_fail ; 否则不及格分数段人数加1 SJMP SCORE_END_LOOP ; 结束循环 SCORE_END_LOOP: INC DPTR ; 指针加1 DJNZ R1, SCORE_LOOP ; 继续循环 ; 存储分数段人数到内部RAM中 MOV A, #RAM_START ; 设置A为内部RAM起始地址 MOV @R0, score_count_high ; 存储优秀分数段人数 INC R0 ; 指针加1 MOV @R0, score_count_good ; 存储良好分数段人数 INC R0 ; 指针加1 MOV @R0, score_count_middle ; 存储中等分数段人数 INC R0 ; 指针加1 MOV @R0, score_count_pass ; 存储及格分数段人数 INC R0 ; 指针加1 MOV @R0, score_count_fail ; 存储不及格分数段人数 ; 程序结束 SJMP $ ; 成绩数据存储区 SCORE_DATA: ; 在这里定义成绩数据的存储区 ; 每个数据占用一个字节,BCD码格式 ; 例如,存储第一个学生的成绩为90分 DB 0x90 ; 按照以上格式存储所有成绩数据 ``` 需要注意的是,以上代码只是一个简单的示例,实际使用时需要根据具体情况进行修改和优化。同时,还需要您自己实现输入BCD码的功能。

相关推荐

最新推荐

recommend-type

基于AT89C51单片机的十进制计算器系统设计

本设计是基于AT89C51 单片机进行的十进制计算器系统设计,可以完成计算器的键盘输入,进行加、减、乘、除4 位无符号数字的简单四则运算,并在LED 上相应的显示结果。硬件方面从功能考虑,首先选择内部存储资源丰富的...
recommend-type

单片机(AT89C51)定时/计数器实验案例

继上篇的《单片机(AT89C51)定时/计数器详解及其实验案例》由于各种原因里面没有实验案例现在在此补上。 单片机(AT89C51)定时/计数器详解见上篇:...
recommend-type

如何用AltiumDesigner绘制STC89C51单片机原理图

在学习AltiumDesigner或者51单片机的过程中,当我们要绘制一个带有STC单片机的电路图或者要制作带有STC单片机的PCB(印制电路板)时,我们会发现在AltiumDesigner自带的所有库中都没有找到STC的单片机原理图。...
recommend-type

基于AT89C51单片机简易计算器的设计.doc

设计的是简单的计算器,可以进行四则运算(+、-、×、÷),C语言编程,PROTUES仿真,实验报告 单片机课程设计
recommend-type

基于89C51单片机的环境噪声测量仪

本文介绍一种以89C51单片机为核心,采用V/F转换技术构成的低成本、便携式数字显示环境噪声测量仪。该仪器工作稳定、性能良好,经校验定标后能满足一般民用需要,可广泛应用于工矿企业、机关、学校等需要对环境噪声...
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

MATLAB柱状图在信号处理中的应用:可视化信号特征和频谱分析

![matlab画柱状图](https://img-blog.csdnimg.cn/3f32348f1c9c4481a6f5931993732f97.png) # 1. MATLAB柱状图概述** MATLAB柱状图是一种图形化工具,用于可视化数据中不同类别或组的分布情况。它通过绘制垂直条形来表示每个类别或组中的数据值。柱状图在信号处理中广泛用于可视化信号特征和进行频谱分析。 柱状图的优点在于其简单易懂,能够直观地展示数据分布。在信号处理中,柱状图可以帮助工程师识别信号中的模式、趋势和异常情况,从而为信号分析和处理提供有价值的见解。 # 2. 柱状图在信号处理中的应用 柱状图在信号处理
recommend-type

解释这行代码 c = ((double)rand() / RAND_MAX) * (a + b - fabs(a - b)) + fabs(a - b);

这行代码是用于生成 a 和 b 之间的随机数。首先,它使用 rand() 函数生成一个 [0,1) 之间的随机小数,然后将这个小数乘以 a、b 范围内的差值,再加上 a 和 b 中的较小值。这可以确保生成的随机数大于等于 a,小于等于 b,而且不会因为 a 和 b 之间的差距过大而导致难以生成足够多的随机数。最后,使用 fabs() 函数来确保计算结果是正数。
recommend-type

JSBSim Reference Manual

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