读书人

求帮帮看上ARM汇编的LDR指令

发布时间: 2013-01-01 14:04:18 作者: rapoo

求帮帮看下ARM汇编的LDR指令
我的代码是:


#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"

读书人网 >汇编语言

热点推荐