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:
    
    	}
    }
    

Anmelden zum Antworten