ARM汇编第一次上机(顺序、分支、单重循环)【嵌入式系统】

news2024/12/25 12:28:50

ARM汇编第一次上机(顺序、分支、单重循环)【嵌入式系统】

  • 前言
  • 推荐
  • 说明
  • ARM汇编第一次上机(顺序、分支、单重循环)
    • 内容
    • 1 sum1
      • 流程图
      • 代码编写
      • 结果分析
    • 2 sum2
      • 流程图
      • 代码编写
      • 结果分析
    • 3 numbers
      • 流程图
      • 代码编写
      • 结果分析
  • 最后

前言

2023-4-14 19:30:55

以下内容源自《创作模板三》
仅供学习交流使用

推荐

ARM简单程序设计【嵌入式系统】

说明

第一点 关于&

不会有人不知道?
我流程图中写的R3=&nums
&是什么意思吧?

请看下面C语言程序

#include<stdio.h>
int main(){
	int n=10;
	int *p=&n;
	printf("%x\n",p); 	//62fe14
	printf("%x\n",&n); 	//62fe14
	printf("%d\n",n); 	//10
	printf("%d\n",*p); 	//10
} 

回答&号是取地址的意思哦

第二点 关于说明中的R0++

说明
此处R0用来遍历数组的指针
流程图中R0++表示指针移动到下一个存储数据
因为此数组nums是按字对齐存储数据的
所以实际代码中是R0=R0+4(一个字是4字节)

请看以下C语言程序

#include<stdio.h>
int main(){
	int nums[10]={0,1,2,3,4,5,6,7,8,9};
	int *p=nums;
	for(int i=0;i<10;i++){
		printf("%x ",p);//62fde0 62fde4 62fde8 62fdec 62fdf0 62fdf4 62fdf0 62fdf8 62fdfc 62fe00 62fe04
		printf("%d ",*p++);//0 1 2 3 4 5 6 7 8 9
	}
} 

结论不再赘述

//结果显而易见
//p是int型指针 
//int存储32位数据 4字节
//p++就是指针移动到下一个存储数据	

ARM汇编第一次上机(顺序、分支、单重循环)

内容

按照要求编程实现以下功能
1、编程实现两种求和运算,1+2+…+100求和运算,按条件求和运算1+2+…+n >1000 ? ,不局限于这个题目,可以按自己的想法分别完成按计数、条件判断的循环编程与调试(6分)
2、给定10-20个数中找出最大数和最小数(自定义),求平均值,统计小于、大于及等于平均值的个数; (9分)

要求:
1、提交自己实际调试结果截图;
2、上传录制视频,讲述实验完成情况,先演示完成的功能,然后简要分析代码。(控制在5~6分钟左右)
3、简要写出设计思路,画出程序流程图,并把调试结果截图附录,以PDF格式形成报告(与下次实验一起提交)。

1 sum1

流程图

在这里插入图片描述

代码编写

	AREA  sum1, CODE, READONLY		; 代码段的名字 sum1
	ENTRY                   		; 程序的入口
	CODE32
num	EQU	100                   		; 求和的次数
start
	LDR	R0,  =0           	; R0 求和结果
	LDR	R1,  =1      	  	; R1作为被加数
	LDR	R2,  =num         	; R2作为计数器
	LDR R3,  =sum		  	; R3指向sum
sumloop
	ADD	R0, R0,	R1    		; R0=R0+R1
	ADD	R1, R1,#1       	; R1=R1+1

	
	SUBS R2,  R2,  #1    	; 计数器值减1
	BNE	sumloop           		; 如果不为0,那么继续跳到sum执行
	STREQ	R0,  [R3]  
stop
	MOV	r0, #0x18
	LDR	r1, =0x20026		
	SWI	0x123456        

	AREA  Data, DATA, READWRITE
sum DCD	0

	END

结果分析

初始化后

R0=0
R1=1
R2=0x64=100
R3=&sum=0x40000000

在这里插入图片描述

运算结果

R0=0x000013BA=5050
R1=0x65=101
R2=0
R3=&sum=0x40000000
[0x40000000]=0x000013BA

在这里插入图片描述

2 sum2

流程图

在这里插入图片描述

代码编写

	 AREA  SUM, CODE, READONLY	; 代码段的名字 SUM
     ENTRY                   			; 程序的入口
     CODE32
start
     LDR   R0,   =n            ; 将数据段中自然数的个数n的地址加载到R0寄存器
     LDR   R1,   =sum       ; 将数据段中自然数的累加和sum的地址加载到R1寄存器
     LDR   R3,   =0            ; R3存放自然数的累加和
     LDR   R4,   =0            ; R4用于循环个数的统计/每次取得的自然数
     LDR   R5,   =1000      ; R5用于循环结束的界限值
continue
     ADD	R4,   R4,	    #1    ; 取下一个自然数
     ADD	R3,   R3,	   R4    ; 累加自然数
     CMP	R3,   R5             ; 比较累加和是否超过了1000
     BCC	continue            ; 如果小于1000,那么跳到compare执行
     STRCS   R3,  [R1]     ; 如果大于1000,那么将累加和存储到R1所指向的单元中
     STRCS   R4,   [R0]    ; 如果大于1000,那么将已累加的自然数个数值存储
		            ; 到R0所指向的单元中 

stop
        MOV    r0, #0x18
        LDR     r1, =0x20026			
        SWI     0x123456 
     		
        AREA  Data, DATA, READWRITE
n	DCD	0	    ; 定义累加的自然数的个数
sum	DCD	0 	   ; 定义自然数的累加和

结果分析

初始化后

R0=&n=0x40000000
R1=&sum=0x40000004
R3=0
R4=0
R5=0x3E8=1000

在这里插入图片描述
运算结果

R3=0x40B=1035
R4=0x2D=45
[0x40000000]=0x0000002D
[0x40000004]=0x0000040B

在这里插入图片描述

3 numbers

流程图

总体流程图
请添加图片描述

流程图1
在这里插入图片描述
流程图2
在这里插入图片描述
流程图3
在这里插入图片描述
流程图4
在这里插入图片描述

代码编写

	AREA  numbers, CODE, READONLY		; 代码段的名字 max
	ENTRY                   		; 程序的入口
	CODE32
num	EQU	17                   		; 比较的次数 数组长度-1
start
	LDR	R0,  =nums           		; R0指向源数据块x
	LDR	R1,  =max           		; R1指向单元max
	LDR	R3,  [R0]        			; 将源数据块x中第一个数加载到R3中 用来保存max
	LDR	R5,  [R0]        			; 将源数据块x中第一个数加载到R5中 用来保存min
	LDR R7,  =0						; R7 总和sum
	LDR R8,  =0 					; R8 单元avg
	LDR R9,  =0						; R9 小于平均值的个数
	LDR R10, =0						; R10 等于平均值的个数
	LDR R11, =0						; R11 大于平均值的个数
	
	
	
;最大最小总和	
	LDR	R2,  =num      				; R2作为计数器
	ADD R7,R3						; 加第一项
	ADD	R0, R0,	#4					; 跳过第一项
numbersloop
	LDR	R4, [R0],#4       			; 依次将源数据块x中下一个数加载到R4中
	ADD R7,R4						; 求和R7+=R4
	CMP	R3, R4             			; 比较R3和R4中数的大小 
	MOVCC  R3,  R4          		; 如果R3小于R4,则将较大的数送入R3中
	CMP R5, R4						; 比较R5和R4中数的大小
	MOVCS R5,R4 					; 如果R5大于R4,则将较小的数送入R5中
	SUBS R2,  R2,  #1       		; 计数器值减1
	BNE	numbersloop          		; 如果不为0,那么继续跳到numsloop执行
									; 如果为0,那么循环比较结束
									
									
	;求平均值								
	LDR R8,  =5 					; R8 单元avg									

;统计...

	LDR	R0,  =nums           		; R0指向源数据块x	
	LDR	R2,  =num      				; R2作为计数器
	LDR	R4, [R0]					;先比较一次
	CMP	R8, R4             			; 比较R8和R4中数的大小 
	ADDHI  R9, R9, #1          		; 如果R8大于R4,则R9++
	ADDEQ R10,R10,#1				; 如果R8等于R4,则R10++
	ADDCC R11, R11, #1  			; 如果R8小于R4,则R11++
	
	ADD	R0, R0,	#4					; 跳过第一项
numsloop
	LDR	R4, [R0],#4       			; 依次将源数据块x中下一个数加载到R4中
	
	CMP	R8, R4             			; 比较R8和R4中数的大小 
	ADDHI  R9, R9, #1          		; 如果R8小于R4,则R9++
	ADDEQ R10,R10,#1				; 如果R8等于R4,则R10++
	ADDCC R11, R11, #1  			; 如果R8大于R4,则R11++
	SUBS R2,  R2,  #1       		; 计数器值减1
	BNE	numsloop          			; 如果不为0,那么继续跳到numsloop执行
									; 如果为0,那么循环比较结束
	
	;多寄存器寻址
	STMIA R1!,{R3,R5,R8,R9,R10,R11};

stop
	MOV	r0, #0x18
	LDR	r1, =0x20026		
	SWI	0x123456        

	AREA  Data0, DATA, READONLY  ;平均值5
nums	DCD	1,9,2,8,3,7,4,6,5	 ;8 2 8
		DCD	1,9,2,8,3,7,4,6,5
	


	AREA  Data, DATA, READWRITE
max	DCD	0
min DCD 0
avg DCD 0
ltavg DCD 0
eqavg DCD 0
gtavg DCD 0
	END

结果分析

初始化后

R0=&nums=0xB0
R1=&max=0x40000000
R3=[R0]=nums[0]
R5=[R0]=nums[0]
R7=0
R8=0
R9=0
R10=0
R11=0
[0x000000B0]=0x00000001

在这里插入图片描述

计算最大最小总和

R0=0xF8 	//最后一个元素地址
R3=0x09		//最大值
R5=0x01		//最小值
R7=0x5A=90	//求和结果

在这里插入图片描述

计算统计结果

R8=0x05  		//平均值
R9=0x08			//小于平均值的个数
R10=0x02		//等于平均值的个数
R11=0x08		//大于平均值的个数

在这里插入图片描述

存储结果

[0x40000000]=0x00000009	//最大值
[0x40000004]=0x00000001 //最小值
[0x40000008]=0x00000005 //平均值
[0x4000000C]=0x00000008 //小于平均值的个数
[0x40000010]=0x00000002 //等于平均值的个数
[0x40000014]=0x00000008 //大于平均值的个数

在这里插入图片描述

最后

2023-4-14 21:26:20

你对我百般注视,并不能构成万分之一的我,却是一览无余的你。

祝大家逢考必过
点赞收藏关注哦

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/442971.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python统计学:配对样本t检验~均值差的检验

配对样本 t检验 用于两个不同条件下&#xff0c;对同一对象进行测量所得的两个样本均值的区别。 比如吃药前和吃药后体温是否有变化&#xff0c;大鱼钩和小鱼钩钓的鱼的体长是否有差异等。 配对样本是什么&#xff1f; 配对样本需要满足两个基本条件&#xff1a; 1. 样本间存…

Java版本工程管理系统软件源码 自主研发,工程行业适用

Java版工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离 功能清单如下&#xff1a; 首页 工作台&#xff1a;待办工作、消息通知、预警信息&#xff0c;点击可进入相应的列表 项目进度图表&#xff1a;选择&#xff08;总体或单个&#xff09;项目显示…

【Java 数据结构】PriorityQueue(堆)的使用及源码分析

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了 博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点!人生格言&#xff1a;当你的才华撑不起你的野心的时候,你就应该静下心来学习! 欢迎志同道合的朋友一起加油喔&#x1f9be;&am…

ES配置与使用

一、单机版安装 地址&#xff1a;www.elastic.co 下载tar格式&#xff0c;或者复制链接&#xff0c;wget url下载 启动&#xff1a; ./bin/elasticsearch 二、插件 解决页面问题&#xff0c;GitHub下载&#xff1a;elasticsearch-head 需要node环境。node -v检查node版本…

TryHackMe-Jack(boot2root)

Jack 破坏运行Wordpress的Web服务器&#xff0c;获得低特权用户&#xff0c;并使用Python模块将您的权限升级到root。 端口扫描 循例nmap web枚举 robots.txt wpscan枚举user wpscan直接爆 得到wendy的密码 直接登后台 根据题目提示&#xff0c;利用user role editor帮助我们…

使用chatgpt写一个划词翻译的浏览器插件

最近在网上流行的chatgpt&#xff0c;实在是太火了&#xff0c;好多人在使用&#xff0c;而且它的用处实在是太丰富了&#xff0c;能帮助我们解决很多问题&#xff0c;就比如说&#xff1a;编程&#xff0c;生成图片&#xff0c;翻译等。太丰富了。我看网上很多人都在说&#x…

江苏三年制专转本本法学类考纲配套课程及复习资料

法学类专业课内容比较多&#xff0c;需要背的也很多&#xff0c;今天我来给大家看一下我们应该如何学习法学类&#xff1f;01&#xff1a;考试科目考试科目&#xff1a;大学语文专业课基础理论考试课程A &#xff1a;法理学约 15%课程B&#xff1a;宪法学 约 15%课程C &#xf…

第九讲 常用数据结构之列表-2

列表的方法 列表类型的变量拥有很多方法可以帮助我们操作一个列表&#xff0c;假设我们有名为foos的列表&#xff0c;列表有名为bar的方法&#xff0c;那么使用列表方法的语法是&#xff1a;foos.bar()&#xff0c;这是一种通过对象引用调用对象方法的语法。后面我们讲面向对象…

接口自动化【三】(接口依赖之上传图片;Template 模块用法)

前言 一、后台上传图片接口 二、用postman来做这种有依赖的接口 三、使用 Template 模块进行字符串的替换 四、使用 Template 模块进行字符串的替换&#xff08;针对于Excel表格中的数据&#xff09; 总结 前言 本章中&#xff0c;对接口的依赖做了阐述&#xff0c;后台上…

怎么用Elai智能数字人来直播带货?

随着直播带货的火爆&#xff0c;越来越多的商家和品牌想要借助这一新兴的营销方式来提升销量和品牌影响力。但是&#xff0c;直播带货也面临着一些挑战&#xff0c;比如真人主播的成本高、稳定性差、风险大等。那么&#xff0c;有没有一种更好的解决方案呢&#xff1f;Elai智能…

leetcode重点题目分类别记录(三)动态规划深入

文章目录 动态规划背包问题01背包抽象出求解目标尝试进程子问题拆分基本情况根据拆分过程定义dp数组与转移方程遍历顺序与状态压缩模板归纳题目应用变种提升组合问题多维01背包有特殊限制的01背包 完全背包尝试进行子问题拆分转移方程题目应用变种提升-求组合/排列数 打家劫舍变…

【案例教程】CMIP6数据处理方法与典型案例分析实践技术

气候变化关系到农业、生态系统、社会经济和人类生存与发展&#xff0c;是当今世界关注的重点问题之一。IPCC&#xff08;Intergovernmental Panel on Climate Change&#xff09;第6次评估报告指出&#xff0c;自 20 世纪 50 年代以来&#xff0c;从全球平均气温和海温升高、大…

LightGBM^v^

LightGBM LightGBM&#xff08;Light Gradient Boosting Machine&#xff09;是一个基于梯度提升决策树&#xff08;GBDT&#xff09;的高效机器学习框架。它是由微软公司开发的&#xff0c;旨在提供更快、更高效的训练和预测性能。LightGBM在许多数据科学竞赛中都表现出色&am…

什么品牌的蓝牙耳机通话音质最好?通话音质好的蓝牙耳机

使用蓝牙耳机&#xff0c;无需取下耳机即可接听电话&#xff0c;来电时只需按一个按钮即可开始讲话&#xff0c;可以说是十分方便&#xff0c;为了帮助您找到可以帮助您拨打和接听电话的耳机&#xff0c;我们收集了适合通话的蓝牙耳机。 一、南卡小音舱Lite2蓝牙耳机 动圈单元…

亚马逊巴西站对中国商家正式开放试运营,如何快速提升销量

近日&#xff0c;亚马逊全球开店宣布&#xff0c;亚马逊巴西站对中国商家正式开放试运营&#xff0c;在亚马逊巴西站试运营期间&#xff0c;亚马逊卖家是能获得很多扶持的&#xff0c;比如说大量额外引流资源支持&#xff0c;营销方面&#xff0c;巴西卖家是可以使用优惠券&…

Three.js教程:透视投影相机

推荐&#xff1a;将NSDT场景编辑器加入你的3D工具链。 其他系列工具&#xff1a;NSDT简石数字孪生 Threejs如果想把三维场景Scene渲染到web网页上&#xff0c;还需要定义一个虚拟相机Camera&#xff0c;就像你生活中想获得一张照片&#xff0c;需要一台用来拍照的相机。 透视…

恶意软件及反病毒的一些知识

目录标题 什么是恶意软件&#xff1f;恶意软件的特征恶意软件可以分为几类&#xff1f;按照传播方式分类按照功能分类 恶意软件的免杀技术有哪些&#xff1f;文件免杀内存免杀行为免杀 反病毒技术有哪些&#xff1f;单击反病毒网关反病毒 反病毒网关的工作原理反病毒网关的工作…

OpenText Exceed TurboX (ETX) 安全功能介绍

OpenText Exceed TurboX (ETX) 安全功能介绍 将所有重要的知识产权&#xff08;IP &#xff09;相关数据保存在受良好保护的中央数据中心是保护 IP 的最佳做法。安全的远程访问是保护知识产权的关键。 所有数据流量均采用最新标准加密技术进行加密ETX 整合多种身份验证系统ET…

【代码随想录】刷题Day3

1.链表删除 203. 移除链表元素 循环删除 class Solution { public:ListNode* removeElements(ListNode* head, int val) {if(headnullptr)return head;ListNode* prevnullptr;ListNode* curhead;while(cur){if(prevnullptr&&cur->valval){ListNode* tmp cur;curcu…

对项目总体把控不足,项目经理应该怎么办?

公司现状&#xff1a;项目人员紧缺&#xff0c;只有两人了解此项目技术细节&#xff0c;其中一个不常驻现场&#xff0c;另一个是执行项目经理李伟。 项目经理王博是公司元老&#xff0c;同时负责多个项目&#xff0c;工作比较忙&#xff0c;不常驻现场&#xff0c;没有参加过…