Zahl in Assembler ausgeben!

Wie kann ich in Assembler eine Zahl ausgeben?
Diese Anleitung hab ich im Internet gefunden:

7. Wie gebe ich eine Zahl aus?
Angenommen man möchte die Zahl ausgeben, die sich in einem Register befindet, so geht man folgendermaßen vor (für dezimale Ausgabe):
Man dividiert die Zahl so lange durch 10 bis der Quotient = 0 ist, und schiebt in jedem Durchlauf den Rest auf den Stack. Beispiel für die Zahl 2745:

2745 / 10 = 274, Rest 5, Stack: 5
274 / 10 = 27, Rest 4, Stack: 5, 4
27 / 10 = 2, Rest 7, Stack: 5, 4, 7
2 / 10 = 0, Rest 2, Stack: 5, 4, 7, 2

Nun befinden sich auf dem Stack die Ziffern in umgedrehter Reihenfolge. Das stellt allerdings kein Problem dar, da man mit der Anweisung pop immer den zuletzt auf den Stack geschobenenen Wert erhält.
Man konstruiert also eine weitere Schleife die nacheinander die Ziffern vom Stack holt und auf dem Bildschirm ausgibt.

Bitte?? 8o Geht es denn nicht einfacher eine Zahl auszugeben? Und wie lautet der Interrupt um eine Ziffer auszugeben?

Danke

mfg
BleedingSoul
 
Es gibt keine einfachere Möglichkeit, Zahlen in Assembler auszugeben. Dies ist bedingt durch die Repräsentation der Ziffern 0..9 im ASCII. Wenn Du eine Zahl so ausgeben wolltest, kämen entsprechend die Zeichen heraus, die den Werten der Bytes im ASCII entsprechen. Deswegen werden als erstes die Faktoren der entsprechenden Zehnerpotenzen einer Zahl ermittelt und auf den Stack gepusht. Danach kann man sie ganz normal darstellen, indem man sie entweder nacheinander oder als String ausgibt. Dazu wird einfach der Offset addiert, welcher zusammen mit dem Faktor das entsprechende Zeichen im ASCII ergibt, welches die gewünschte Ziffer darstellt.

Das ist doch aber kein Problem. Die Funktion schreibt man einmal, und speichert sie sich in einem include-file ab. Dann kann man sie immer wieder benutzen.
 
ASm hab ich lange nicht mehr gemacht, aber das sollte dir denke ich mal helfen :

Code:
section .zahl
globat _start
msg db '21',0x0A
len equ $ -msg
_start:
mov eax,4
mov ebx,1
mov edx,len
int 0x80
mov eax,1
int 0x80

nasm -f elf zahl.asm
ls -s -o zahl zahl.o
 
Zurück
Oben