ARM汇编实践作业

首先创建项目:
1.选择并配置芯片和运行环境:
在这里插入图片描述
在这里插入图片描述
2.添加编写.s文件
在这里插入图片描述
这里是一个排序然后选出中位数的汇编程序:

 AREA MYDATA, DATA
	
 AREA EXAMPLE, CODE,READONLY
	ENTRY
	EXPORT __main

__main
	
    MOV R0,#9; SORT number
 LDR R2,=0x40000000 ;  start address
 
 SUB R1,R0,#1; r1 <- 8
 MOV R4,#4  ;r4 <- 4
 MLA R3,R1,R4,R2   ;r3<- r1*r4+r2 = r2+32
 SUB R4,R3,#4 ;r4 <- r2+28
LOOPA
 ADD R5,R2,#4  ;r5 <- r2+4
LOOPB
      LDR R6,[R2]
      LDR R7,[R5]
	  CMP R6,R7
	  STR R6,[R5]
	  STR R7,[R2]   ;swap
	  ADD R5,R5,#4   ; change inner address to next one
	  CMP R5,R3
	  BLS LOOPB
	  ADD R2,R2,#4   ;change outter address to next one
	  CMP R2,R4
	  BLS LOOPA	    
	  LDR R2,=0x40000000
	  MOV R0,R0,LSR #1 ;R0 <- R0>>1
	  MOV R4,#4  ; R4 <- 4
	  MLA R3,R0,R4,R2	;r3<- r1*r4+r2
LOOPC
      
      LDR R1,[R3]
	  MOV R0,#100
	B .
		




在进行调试的时候遇到这个问题,进不了主函数:
在这里插入图片描述
这需要在target选项卡里面勾选microlib
在这里插入图片描述
后面就正常debug:
在这里插入图片描述
在这里插入图片描述

可以看到寄存器的值确实按照我们编写的汇编代码发生改变

生成的hex文件如下:
在这里插入图片描述
hex文件由记录组成,每行代表一个记录
以第一行数据为例解释下:0x020000040800F2
把它当成字符串拆分为0x02,0x00,0x00,0x04,0x08,0x00,0xF2,因为对应各自的含义和作用:
0x02:本行有两个数据
0x00,0x00:本行数据起始地址位
0x04:标记拓展线性地址的记录
0x08,0x00:就是在开头0x02指出的本行包含的2个具体数据
0xF2:校验和

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值