Zwei Felder elementweise addieren
-
Hallo,
ich will gerade etwas ASM-Code in C einbetten, der mir die zwei Char-Arrays elementweise addiert und in ein anderes Array abspeichert.
Hier mal mein bisheriger Code:
void add(char *nr1, char *nr2, char *result) { strcpy(result, nr1); _asm { CLC MOV ebx,nr2 ;MOV EDX,result MOV ecx, 1000 lp: MOV eax,[ebx]; ADC eax,[result]; MOV [result], eax; INC ebx INC result LOOP lp } }
Mein Problem ist, dass ich kein Register frei habe um die Adresse die in result steht abzuspeichern und darum bringt er mir auch bei 'INC result' einen Fehler (da er das anscheinend nicht erhöhen kann, wenn das in keinem Register steht. Wenn ichs in EDX speichere, dann nimmt er's auch nicht).
Wer kann mir helfen?
-
Ich hab noch zwei freie REgister gefunden, die Funktionierende Lösung sieht jetzt so aus (mit manuellem Carry falls die Summe zweier Elemente größer als 10 ist)
void add(char *nr1, char *nr2, char *result) { _asm { mov eax,nr1 mov esi,nr2 mov edi,result mov ebx, 0 MOV ecx, 1000 clc lp: mov dl,[eax+ebx] adc dl,[esi+ebx] cmp dl, 10 jge ov nov: cmp dl, 0 clc je ende jmp store ov: sub dl, 10 stc store: mov [edi+ebx],dl inc ebx LOOP lp ende: } }