当前位置: 代码迷 >> 汇编语言 >> 求帮帮看上ARM汇编的LDR指令
  详细解决方案

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

热度:7184   发布时间:2013-02-26 00:00:00.0
求帮帮看下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"
  相关解决方案