1.1 题目描述
请编写arm汇编语言程序,实现数列求和:2+4+6+8+...+100(即100以内的偶数求和)。要求:使用寄存器r2保存循环边界,r0用于循环控制,计算的和值保存在寄存器r1中。
1.2 设计思路
用三个寄存器实现数列求和,一个用来控制循环(也就是每次要加的数),一个用来放循环边界(即100),一个用来存放运算结果。通过 ADD操作实现累加求和,通过CMP和BNE组合使用实现循环跳转。
1.3 实现代码
- 通过MOV指令根据题目所需赋予r0、r2、r1寄存器初值
MOV R0,#2 ;寄存器R0控制循环
MOV R2,#100 ;寄存器R2保存循环边界
MOV R1,#0 ;结果保存在寄存器R1中
- 通过ADD指令进行和操作,同时控制循环的寄存器r0内数值加2
ADD R1,R1,R0 ;进行和操作
ADD R0,R0,#2;
- 用CMP指令判断该值是否等于100,若不等于则执行BNE指令跳转至步骤2;若等于则结束程序。
CMP R0,R2;
BNE LOOP;
1.4 运行结果
运行结果图如:图1
100转化为16进制为64H
2550转化为16进制为9f6H
寄存器R1中保存的是和值,故100内偶数和为2550,运行结果正确
图1 100以内偶数求和运行结果图
AREA F,CODE,READONLY
EXPORT Reset_Handler;
Reset_Handler;
MOV R0,#2 ;寄存器R0控制循环
MOV R2,#100 ;寄存器R2保存循环边界
MOV R1,#0 ;结果保存在寄存器R1中
LOOP
ADD R1,R1,R0;
ADD R0,R0,#2;
CMP R0,R2;
BLE LOOP;
END