(一)打开04-Software/ch02/CH02-1-20220118工程目录,编译下载运行,理解并学习main.s汇编源文件。
修改main.s源文件,增加以下内容:
1、在第一行显示“广州大学”字样。
2、编写一个1+2+...+10的程序,将求和结果存入名为“sumresult”的内存单元中,并将求和结果、sumresult的地址用printf显示出来。
注:建议在源程序中“main loop:”语句之前的地方增加,结束时用“ bl.“停住。
printf的格式详见05_UserBoard/printf.h文件。
内容1需要用到如下的代码段:
.section .data
school: # school字符串的起始地址
.ascii "广州大学\n\0" # 存储字符串"广州大学",以及以空字符结尾
data_format: # data_format字符串的起始地址
.ascii "求和结果:\n\0" # 存储字符串"求和结果:",以及以空字符结尾
address_format: # address_format字符串的起始地址
.ascii "sumresult的地址:%p\n\0" # 存储字符串"sumresult的地址:",以及以空字符结尾
内容2的主要代码:
sumResult:
.word 0 // 定义保存结果的变量
sum_loop:
add r2, r2, r1 // r2 += r1
add r1, r1, #1 // r1++
cmp r1, #11 // 比较r1是否等于11
bne sum_loop // 如果不是,继续循环
mov r1, #sumResult
str r2, [r1] // 将结果存入sumResult变量
// 显示求和结果
ldr r0, =data_format1
ldr r1, =sumResult // 加载求和结果到r1
bl printf // 调用打印整数的函数,参数是r0,r1
// 显示sumResult的地址
mov r0, #sumResult // 将sumResult的地址加载到r0
bl printf // 调用打印地址的函数,参数是r0
bl . // 在此打桩(.表示当前地址)
运行截图: