Kann mir jemand helfen zu verstehen, stmdb, ldmia und wie ich gehen kann, über die Umsetzung dieser C++ - code in arm-Assembler?

Also ich habe dieses Stück code, wobei N die Größe der beiden arrays.

int i;

for (i = 0; i < N; i++)
{
    if (listA[i] < listB[i])
    {
        listA[i] = listB[i];
    }
}

Ich versuche, dies umzusetzen, als ARM Assembly Unterroutine, aber ich bin völlig verloren mit Umgang mit arrays. Ich habe diese so weit:

sort1:
    stmdb    sp!, {v1-v5, lr}
    ldmia    sp!, {v1-v5, pc}

Ich nehme an, ich muss mit cmp vergleichen Sie die Werte, aber ich bin mir auch nicht sicher, welche Register zu verwenden. Jemand eine Anleitung?

EDIT:

Okay ich habe jetzt diesen code:

sort1:
    stmdb    sp!, {v1-v5, lr}     @ Copy registers to stack
    ldr      v1, [a1], #0         @ Load a1
    str      v1, [a2], #0         @ Copy elements of a1 to a2 
    ldmia    sp!, {v1-v5, pc}     @ Copy stack back into registers

Diese kopiert die ersten vier Elemente von einer 10-element-array, also würde ich davon ausgehen, wenn ich mich geändert "#0" bis "#4", würde es die nächsten vier Elemente zu ändern, aber es funktioniert nicht. Warum?

InformationsquelleAutor Ian | 2014-04-13
Schreibe einen Kommentar