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?
Wie Sie wissen, dass Sie etwas falsch gemacht haben? (Ich leugne nicht, dass du es getan hast, versuche nur den Kontext zu verstehen.) –
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. –