我的代码是:
#include <stdio.h>
int main(void)
{
int ret1 = 0;
int ret2=22;
int input=102;
int buffer[2];
buffer[1]=111;
buffer[0]=1020;
__asm__ __volatile__ (
"mov r3,%2 \n"
"ldr r0,[r3],#1 \n"
"ldr r1, [r3] \n" ////为什么这里还是返回buffer[0]的值
"mov %0,r0 \n"
"mov %1,r1 \n"
: "=r"(ret1),"=r"(ret2)
: "r"(buffer)
:"cc"
);
printf("sno r0 moveq ret = %d,ret2=%d\n", ret1,ret2);
return 0;
}
问题是,为什么ldr两次返回的是一样的值,而不是我想要的那样 ret1=buffer[0],ret2=buffer[1]
谢谢了
------解决方案--------------------------------------------------------
如果buffer是32bit的数,要对齐,否则cpu的行为一般是导致data abort异常
"ldr r0,[r3],#1 \n"
==>
"ldr r0,[r3],#4 \n"
如果buffer是8bit的,
"ldr r0,[r3],#1 \n"
==>
"ldrb r0,[r3],#1 \n"