【ARM汇编学习实例】汇编语言综合程序设计

实验内容

已知8名学生成绩如下:

学号成绩
180
265
390
440
580
675
7100
865

使用汇编或汇编与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
	

参考文章

ARM汇编(1):若干整数数的最大值最小值问题、求和问题、平均数问题

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逃离地狱的恶魔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值