嵌入式#3

实例程序学习
打开04-Software/ch02/CH02-1-20220118工程目录07 AppPrg/main.s源程序。
学习该源程序
编写示例程序:datax、datay、dataz三个数中,找出最大值并显示。
将该语句段放在main.s中“main loop:”前位置

实验步骤:

1.打开金葫芦,导入工程(D:\嵌入式\AHL-MCU6-V2.0-20240118\04-Software\CH02\CH02-1-20220118)

2.编写要求程序:datax、datay、dataz三个数中,找出最大值并显示。程序如下:

 

3.在main loop前增加代码如下:

完整代码如下:

 //增加代码:
    // 加载 datax 地址到 r1 寄存器  
ldr r1, =datax  
    // 从 r1 指向的地址加载数据到 r2 寄存器  
ldr r2, [r1]  
  // 加载 datay 地址到 r1 寄存器  
ldr r1, =datay  
  // 从 r1 指向的地址加载数据到 r3 寄存器  
ldr r3, [r1]  
  // 比较 r2 和 r3 寄存器的值  
cmp r2, r3  
  // 如果 r2 大于或等于 r3,跳转到 mytag1 标签处执行  
bge mytag1  
  // 如果 r2 小于 r3,则执行下一条指令,即把 r3 的值赋给 r2  
mov r2, r3   
  // mytag1 标签位置  
mytag1:  
  // 加载 dataz 地址到 r1 寄存器  
ldr r1, =dataz  
 // 从 r1 指向的地址加载数据到 r3 寄存器  
ldr r3, [r1]  
  // 比较 r2 和 r3 寄存器的值  
cmp r2, r3  
 // 如果 r2 大于或等于 r3,跳转到 mytag2 标签处执行  
bge mytag2  
 // 如果 r2 小于 r3,则执行下一条指令,即把 r3 的值赋给 r2  
mov r2, r3  
 // mytag2 标签位置  
mytag2:  
 // 加载 datamax 地址到 r1 寄存器  
ldr r1, =datamax  
 // 将 r2 寄存器的值存储到 r1 指向的地址处  
str r2, [r1]  
 // 加载 data_format5 地址到 r0 寄存器,该地址可能指向一个格式字符串  
ldr r0, =data_format5  
 // 加载 datamax 地址到 r2 寄存器  
ldr r2, =datamax  
 // 从 r2 指向的地址加载数据到 r1 寄存器  
ldr r1, [r2]  
 // 调用 printf 函数,将 r0 指向的格式字符串和 r1 指向的值作为参数  
bl printf  
  // 调用当前地址,通常用于调试目的,例如设置断点  
bl .   // 在此打桩(.表示当前地址)

 代码解释:

从 datax 和 datay 中读取到两个值到r2 和 r3。
先比较这两个值,如果 r2 大于或等于 r3,则保持 r2 不变,否则将 r3 的值赋给 r2。
然后,再从 dataz 读取一个值到 r3。
再次比较 r2 和 r3,如果 r2 大于或等于 r3,则保持 r2 不变,否则将 r3 的值赋给 r2。
最后,就将 r2 的值存到 datamax 指向的地址。
调用 printf 函数,输出 data_format5 指向的格式字符串和 datamax 指向的值。

然后左上角编译-编译工程:

 

4.左上角-下载 -串口更新-连接GEC-选择debug的.hex文件-一键自动更新,实验结果如下图:

实验完成!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值