keil汇编语言学习
1.编写程序循环对R4R11进行累加8次赋值,R4R11起始值为1~8, 每次加操作后把R4R11的内容放入SP栈中,SP初始设置为0x800。最后把R4R11用LDMFD指令清空赋值为0。
NUM EQU 20;必须定格写
AREA ARMcodel,CODE,READONLY ;必须空格
export ;必须空格
START
ldr r0,=src ;将r0指向src(起始地址)数据域的首地址,这里借用src是防止程序长度改变影响地址位置
ldr r1,=dst ;将r1指向dst(目的地址)数据域的首地址,用r2记录需要搬移数据的次数20次
mov sp,#0x400 ;设置sp指针的地址,结合下文用于保存r4-r11寄存器内的数据blockcopy
movs r3,r2,lsr#3;将x2的数据右移3位放到r3中并改变cpsr中的标志位c
beq copywords;简单的说就是判断r3是否为零,实质.上是根据cpsr中标志位z是否为0,为判断跳转,为零不跳转
stmfd sp!,{r4-r11} ;保存r4-r11寄存器内的数据
octcopy
ldmia r0!,{r4-r11};将r0的前8位数取出放到r4-r11,改变r0的地址,(r0的地址增 加)
stmia r1!,{r4-r11};拷贝r4-r11内的数据到r1的地址内,r1的地址增加
subs r3,r3,#1 &#x