嵌入式学习3 实例程序学习

本文详细描述了如何在AHL-IDE环境下,通过实例程序在main.s源文件中找到并显示datax、datay、dataz三个数中的最大值,包括变量定义、比较操作和printf函数的使用,以及调试过程。
摘要由CSDN通过智能技术生成

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

步骤:

1.打开“金葫芦”,导入工程

(我的工程路径:D:\AHL-IDE\AHL-MCU6-V2.0-20240118\AHL-MCU6-V2.0-20240118\04-Software\CH02\CH02-1-20220118)

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

先定义变量,找到定义位置:

增加新代码:

//增加:定义变量x,y,z(ps:数字自定义)
datax:
    .word 18//x=18
datay:
    .word 0x654123//y
dataz:
    .word 56800//z=56800
datamax:
    .space 4
data_format5:
    .ascii "最大数字是:%d\n\0"

3.在main_loop前增加代码:

这段代码的大致逻辑是:

从 datax 和 datay 读取两个值到 r2 和 r3。
比较这两个值,如果 r2 大于或等于 r3,则保持 r2 不变,否则将 r3 的值赋给 r2。
然后,从 dataz 读取一个值到 r3。
再次比较 r2 和 r3,如果 r2 大于或等于 r3,则保持 r2 不变,否则将 r3 的值赋给 r2。
最后,将 r2 的值存储到 datamax 指向的地址。
调用 printf 函数,输出 data_format5 指向的格式字符串和 datamax 指向的值。
bl . 是一个无限循环调用,通常用于调试,可以设置一个断点来观察程序在此处的状态。在实际的程序中,这样的无限循环调用是不合适的,除非有特定的调试需求。

// 加载 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 .   // 在此打桩(.表示当前地址)

左上角编译-下载-连接GEC-串口更新-选择Debug文件夹的“.hex”文件-一键串口更新:

结果:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值