实验内容
已知8名学生成绩如下:
学号 | 成绩 |
---|---|
1 | 80 |
2 | 65 |
3 | 90 |
4 | 40 |
5 | 80 |
6 | 75 |
7 | 100 |
8 | 65 |
使用汇编或汇编与C混合编程实现:求平均成绩、最高分和最低分,并统计不及格人数
代码实现
指令的条件码表
具体可参考这篇文章计算机三级嵌入式学习笔记(二)
纯汇编实现版(一)
AREA analysis,CODE,READONLY
ENTRY
INIT
LDR R0, =DATA ;加载数据
MOV R2, #10 ;按照学生人数设置循环次数
MOV R3, #0 ;R3存放总分
MOV R4, #0 ;R4存放不及格人数
MOV R5, #0 ;R5存放平均成绩
LDR R6, =0xFFFFFFFF ;R6存放最小值
LDR R7, =0x0 ;R7存放最大值
START
LDR R1, [R0]
ADD R3, R3, R1
SUB R2, R2, #1
ADD R0, R0, #4 ;获取下一数据地址
CMP R1, #60 ;比较分数与60的大小
BCS MAXMIN ;若大于或等于60,则跳转到MAXMIN
FAIL
ADD R4,R4, #1 ;不及格人数计数加一
BL MAXMIN
MAXMIN
CMP R1, R7
MOVCS R7, R1 ;若R7的值<R1的值,则将R1的值赋给R7
CMP R1, R6
MOVCC R6, R1 ;若R6的值>R1的值,则将R1的值赋给R6
CMP R2, #0 ;判断循环是否完成
BNE START
AVERAGE
SUB R3, R3, #8 ;实现除法
ADD R5, R5, #1 ;存放平均值
CMP R3, #8
BGT AVERAGE ;若除数大于被除数,则继续循环
DATA
DCD 80,65,90,40,80,75,100,65
END
纯汇编实现版(二)
AREA analysis,CODE,READONLY
ENTRY
INIT
LDR R0, =DATA ;加载数据
MOV R2, #0 ;按照学生人数设置循环次数
MOV R3, #0 ;R3存放总分
MOV R4, #0 ;R4存放不及格人数
MOV R5, #0 ;R5存放平均成绩
LDR R6, =0xFFFFFFFF ;R6存放最小值
LDR R7, =0x0 ;R7存放最大值
START
LDR R1, [R0], #4
ADD R3, R3, R1
CMP R1, R6
MOVLS R6, R1
CMP R1, R7
MOVHI R7, R1
CMP R1, #60
ADDLS R4, R4, #1
ADD R2, R2, #1
CMP R2, #8
BNE START
MOV R5, R3, LSR #3
B INIT
DATA
DCD 80,65,90,40,80,75,100,65,60,55
END