ARM汇编练习
目标:将C语言数组k里面的变量取出来,到寄存器,然后加1,丢回内存。
#include <stdint.h>
uint16_t k[10]={0,1,2,3,4,5,6,7,8,9};
__asm void text(void)
{
extern k; //声明外部C语言数据地址
PRESERVE8 //保证8个字节对齐
push {r0-r2,lr} //进入函数,保存寄存器现场参数
ldr r0,=k //获取k数组数据到R0
mov r1,#0 //R1清零
loop
ldrh r2,[r0] //k数组加载内存
add r2,#1
strh r2,[r0], #2 //寄存器值放回内存,指令完成后,R0增长2
add r1,#1
cmp r1,#10 //循环十次
bne loop
pop {r0-r2,pc} //退出函数,恢复寄存器参数
//exit
//nop //字节填充对齐
}
使用Keil软件仿真方式,确认效果
在函数出口处指令POP下断点
右下角显示内存变量(绿色部分),已经成功执行并达到预期效果,全部加1。