很久没写汇编了,下边这个没调试直接编的不是范例,所以肯定写错了
编译器GCC-ARM-NONE-EABI
应该有范例,你还是找范例吧
i: .int 20 @int i=20
a: .int 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 @ 定义A数组
b: .int 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3@ 定义B数组
ldr r0, = i@把20存到R0
xunhuan1: @ if 里面
ldr r1, = a @ 把A数组的首地址存到R1
ldr r2, [r1, r0] @ 取出首地址加20处的数据存到R2
ldr r3, = b @ 把B数组的首地址存到R3
ldr r4, [r3, r0] @取出首地址加20处的数据存到R4
mov r5, # 4 @ 把被乘数存到R5
mul r4, r4, r5 @ R4乘以4 b[i]*4
add r6, r2, r4 @ R2加上R4存到R6 a[i]+b[i]*4
str r6, [r1, r0]@ R6的数据存到A首地址加20的地方
lsrs r0, # 1 @ R0逻辑右移
bne xunhuan @ 判断R0是不是等于0不等于跳到xunhuan
xunhuan: @ while 循环
sub r0, # 1 @ i减1
cmp r0, # 0 @比较R0和0
bge xunhuan1@大于等于跳转xunhuan1
这段代码完成两件事情1,把位于Image$$RO$$Limit开始的数据拷贝到Image$$RW$$Base开始地址(C语言中有初始化值的全局变量或静态变量的存储区域)
2,把从Image$$ZI$$Base开始的地址内存清零(C语言中全局无初始值变量的存储区以及静态变量无初始值的变量存储区域)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)