Lowlevel

Lowlevel => Lowlevel-Coding => Thema gestartet von: thetrue am 20. July 2006, 13:13

Titel: Zahlen ausgeben ...
Beitrag von: thetrue am 20. July 2006, 13:13
moin, ich kriege es nicht hin zahlen auszugeben ....


xor edx,edx
num_to_str:
mov edi, puffer+6
mov bx,10
div bx
add dl,30h
mov [edi],dl
dec edi
cmp ax, 0
jne num_to_str
ret

puffer: times 7 db 'F'

...
mov ax, 1234
call num_to_str
mov esi, puffer
mov al, 0x00
int 30h


also irrgend wie ist der puffer leer ...

achja, das liegt nicht an dem int 31h ;) aber heir noch der code
:


int0: ;30h
pusha
push ds
cli

cmp ah, 0x00
je int0_0x00
jmp int0_end

int0_0x00: ;Text ausgabe
mov edi, 0xB8000
int0_0x00_start:
lodsb
or al,al
jz int0_0x00_end

mov [edi], byte al
inc edi
mov [edi], byte 1Bh
inc edi

jmp  int0_0x00_start
int0_0x00_end:
jmp int0_end

int0_end:
sti
pop ds
popa
iret
Titel: Re: Zahlen ausgeben ...
Beitrag von: bluecode am 20. July 2006, 13:27
Zitat von: thetrue


num_to_str:
mov edi, puffer+6
...
jne num_to_str
ret


Du überschreibst jedes mal die erste Stelle. Und du setzt vor deiner Print funktion den zeiger auf den puffer falsch. Die Zahl geht ja nicht ganz bis zum anfang, d.h. vor der zahl werden noch ein paar mal 'F's ausgegeben.
Titel: Zahlen ausgeben ...
Beitrag von: thetrue am 20. July 2006, 13:31
es functioniert solage ax <= 9 ;)
wenn ax größer als 9, dann passiert nix, also es wird kein text ausgegeben
Titel: Zahlen ausgeben ...
Beitrag von: bluecode am 20. July 2006, 13:36
Du musst, nach jedem div dann wieder dx auf 0 setzten. Es wird ja dx:ax durch bx dividiert.
Titel: Zahlen ausgeben ...
Beitrag von: hannibal am 20. July 2006, 13:36
Denk mal drueber nach wieso :P

Nein, ernsthaft.. '10' besteht ja aus zwei Ziffern, also auch aus 2 Zeichen - du musst also pro Zehnerpotenz ein Zeichen ausgeben.

Lg, Alex
Titel: Zahlen ausgeben ...
Beitrag von: thetrue am 20. July 2006, 13:39
@bluecode danke ...

aber was heist dx:ax ??
Titel: Zahlen ausgeben ...
Beitrag von: bluecode am 20. July 2006, 13:42
das heißt, dass zur Ausführung des Befehls die Register DX und AX (beide 16 bit)  soz. zu einer Einheit (32bit) zusammengezogen werden, wobei dx das höhere word und ax das niedrigere.
Titel: Zahlen ausgeben ...
Beitrag von: thetrue am 20. July 2006, 13:44
achsooooooooooooo ...
allles klar, danke
Titel: Zahlen ausgeben ...
Beitrag von: bitmaster am 20. July 2006, 17:10
*gemeinanfang* Und er möchte in ein paar Wochen ein eigenes Betriebssystem schreiben, mit einem Tastaturtreiber, einem eigenen Dateisystem und einer gui. Alles im Protected Mode. ^^ Viel spass wünsche ich. *gemeinend*

bitmaster