umrechnen einer gleitkommazahl



  • hallo!

    ich habe ein problem:

    mir ist zwar klar, wie ich am papier eine gleitkommazahl in eine dezimalzahl als string umrechne, aber ich habe leider absolut keine ahnung, wie ich das dem assebler beibringe.

    hat wer eine ahnung, wie so ein code aussehen könnte??? bin schon total verzweifelt.

    danke!

    mfg

    kathi


  • Mod

    Kathi schrieb:

    hallo!

    ich habe ein problem:

    mir ist zwar klar, wie ich am papier eine gleitkommazahl in eine dezimalzahl als string umrechne, aber ich habe leider absolut keine ahnung, wie ich das dem assebler beibringe.

    hat wer eine ahnung, wie so ein code aussehen könnte??? bin schon total verzweifelt.

    danke!

    mfg

    kathi

    was heisst auf dem papier? wenn ich auf dem papier eine (gleitkomma-)zahl hinschreibe dann ist sie bereits in dezimaldarstellung 😉
    ausserdem wäre zu wissen welcher art das problem ist: der algorithmus an sich oder dessen umsetzung in assembler. in letzterem falle solltest du den algorithmus vielleicht einmal angeben (denn es gibt durchaus mehr als eine möglichkeit) - am besten als C oder C++ funktion, die man dann direkt zur diskussion einer (inline) assemblerfunktion nutzen könnte. falls ersteres der fall ist, sollte die frage möglicherweise in einem anderen foruum gestellt werden.



  • ich löse das so:

    ;----------------------------------------------------------
    ; dez2ascii -----------------------------------------------
    ; ax:= Zahl in binary | ES:DI:= buffer für ASCII-Zahl
    ; output:               ES:DI:= ASCII-Zahl im Buffer
    ;----------------------------------------------------------
    dez2ascii:
    	mov bx,10            ; Wir Teilen immer durch die Basis 10
    	xor cx,cx            ; Anzahl Dezimalstellen am Anfang 0
    
    stelle:	
    	xor dx,dx            ; hier wird unsere Dezistelle stehen
    	div bx               ; wir teilen durch die Basis
    	push dx              ; in dx ist jetzt die letzte stelle
    	inc cx               ; wir haben ein Zeichen mehr
    	or ax,ax             ; wir prüfen ob noch eine Stelle drinn ist...
    	jz short zahl2buff   ; wenn 0, dann fange mit dem bufferfuellen an...
    	jmp short stelle     ; ansonsten hole naechste stelle
    
    zahl2buff:
    	pop ax               ; hole stelle vom stack in umgekehrter reihenfolge...
    	add al,30h           ; ascii offset zu zahlen
    	mov [di],al          ; ...und packe diese in den Buffer
    	inc di               ; naechste stelle im Buffer
    	loop zahl2buff       ; mache das cx mal
    	mov [di],byte 0 	 ; beende string immer mit 0
    	ret
    
    ;----------------------------------------------------------
    

    oder laber ich hier offtopic?



  • Naja, so ein bisschen. 😉
    Deine Funktion kann mit Gleitkommazahlen irgendwo nicht wirklich was anfangen.



  • Beim Radasm (Windows IDE für Assemblys) ist ein Beispielprojekt für MASM dabei wo sogar verschiedne Verfahren miteinenander verglichen werden. Allerdings sind die etwas umfangreich so dass ich sie nicht unbediengt posten möchte.
    Es sollte natürlich klar sein dass Gleitkommazahlen im Rechner anders dargestellt werden als bloß eine Zahl mit einem komma dazwischen ;).
    http://de.wikipedia.org/wiki/Gleitkommazahl



  • Nicht umsonst sind die entsprechenden Funktionen in den C-Libraries oft mehrere KB groß.



  • Nobuo T schrieb:

    Naja, so ein bisschen. 😉
    Deine Funktion kann mit Gleitkommazahlen irgendwo nicht wirklich was anfangen.

    achso gleitkommazahlen=kommazahlen 😉 Alles klar.

    Kommt aber glaub ich auch drauf an in welcher Form die Gleitkomazahl festgehalten wird.
    Wenn in zB in ax der Ganzzahlwert steckt und in dx der Nachkommateil, dann kann man doch erst (mit der geposteten funktion) den Ganzzahlteil in einen String umformatieren und dannach erst den Nachkommateil
    Dannach würde es reichen die 2 strings ganz einfach hintereinander
    (mit Komma dazwischen) auf BS auszugeben. 😃 😃

    oder laber ich immer noch offtopic 😕


  • Mod

    linu(x)bie schrieb:

    oder laber ich immer noch offtopic 😕

    yup, das wäre festkommaarithmetik 😉


Anmelden zum Antworten