Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

Re: Parameter schreiben? Kategorie: Programmierung Assembler (von PeterS - 8.07.2010 16:10)
Als Antwort auf Parameter schreiben? von Robert - 30.06.2010 14:11

> Hallo,
>
> ich versuche gerade, mir mit Assembler eine Funktion zu schreiben, die mir aus einem Float alle vier
> Bytes in ein Byte-Array schreibt. Folgender Code zum Laden scheint zu funktionieren:
> MOVW R30, R10       ; lade ram top
> LDD R22, Z+0            ; lade erstes byte in R22
> LDD R23, Z+1
> LDD R24, Z+2
> LDD R25, Z+3            ; lade letztes byte in R25
> MOVW R30, R6         ; 4 bytes auf parameter stack
> ADIW R30, 4
> MOVW R6, R30
> ST Z+, R24                ; schreibe 3. byte + 4.  
> ST Z, R25
> Lädt die vier Bytes in die Register und schreibt die beiden oberen Bytes als Rückgabewert. In dem
> Integer ist dann alles korrekt. Leider sind Arrays als Rückgabeparameter einer Funktion nicht erlaubt.
> Deshalb wollte ich ein Array (in der Reihenfolge vor dem Float) an die Funktion übergeben und dort
> mittels
> STD Z+4, R22
> STD Z+5, R23
> STD Z+6, R24
> STD Z+7, R25
> reinschreiben. Das funktioniert nicht. Aber warum? Ist doch in der Reihenfolge richtig?
>
> Vielen Dank im voraus.
>
> MfG, Robert

Hallo Robert,

ich habe eben Dir eine korrigierte asm Datei als email geschickt. Als Ã?bergabeparameter
steht an Z+4, Z+5 ein 16-Bit Pointer auf das float Array. Man lädt nun Z+4,Z+5 in das X-Register
und kann darüber dann auf das Array zugreifen.

LDD R26, Z+4            ; load lo byte from arr[] pointer into X
LDD R27, Z+5            ; load hi byte from arr[] pointer into X

ST X+, R22            ; store first byte in first byte of array with X increment
ST X+, R23
ST X+, R24
ST X+, R25


Gruss Peter


    Antwort schreiben


Antworten: