2016-04-28 14 views
1

Ich versuche, diese Funktion in Arm, um herauszufinden, was der Fall ist,ARM Assembly in C-Code

00000000 <ibisFunction>: 
    0: e1510002 cmp r1, r2 
    4: e92d0030 push {r4, r5} 
    8: aa000009 bge 34 <ibisFunction+0x34> 
    c: e080c102 add r12, r0, r2, lsl #2 
    10: e0803101 add r3, r0, r1, lsl #2 
    14: e59c4000 ldr r4, [r12] 
    18: e5935000 ldr r5, [r3] 
    1c: e2811001 add r1, r1, #1 
    20: e2422001 sub r2, r2, #1 
    24: e1510002 cmp r1, r2 
    28: e40c5004 str r5, [r12], #-4 
    2c: e4834004 str r4, [r3], #4 
    30: bafffff7 blt 14 <ibisFunction+0x14> 
    34: e8bd0030 pop {r4, r5} 
    38: e12fff1e bx lr 

das einzige, was ich gesagt habe, ist, dass die Funktion in C-Code ist

int* ibisFunction(int *a, int b, int c) 

ich habe das Äquivalent in C zu finden, und ich habe so weit wie bekommen:

int* ibisFunction(int *a, int b, int c){ 
    if (b<c){ 
    d=a[c]; 
    e=a[c]; 
    while (b<c){ 
     f=g; 
     g=e; 
     b++; 
     c--; 
     d[]=g; 
     e[]=f; 
    } 
    } 
} 

Kann jemand bitte helfen Sie mir die C Äquivalent zu finden, und erklären, was ich falsch gemacht habe?

+0

Wie Sie wissen, dass Sie etwas falsch gemacht haben? (Ich leugne nicht, dass du es getan hast, versuche nur den Kontext zu verstehen.) –

+0

Ein paar Dinge, die du dir vielleicht ansehen möchtest: (1) deine ersten beiden Aufgaben haben 'a [c]' als RHS, aber den entsprechenden Assembler Code hat an diesen Orten verschiedene Dinge; (2) Sie haben einige Zuweisungen, die wie 'd [] = g' aussehen, ohne dass etwas in diesen eckigen Klammern steht, was nicht stimmen kann; (3) Ihr C-Code spiegelt nicht den Effekt der * post-indexierten * Adressierung an den Adressen 28 und 2C wider. –

Antwort

1

Ich denke, das ist so etwas wie:

uint32_t ibisFunction(uint32_t *a, int b, int c){ 
    while (b < c) { // r1, r2 
    d = a[c];  // r4, using r12 as address 
    e = a[b];  // r5, using r3 as address 
    a[--c] = e; // STR r5 to r12 - 4 
    a[++b] = d; // STR r4 to r3 + 4 
    } 
    return a; 
} 
Verwandte Themen