Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet 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
-
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.
-
es functioniert solage ax <= 9 ;)
wenn ax größer als 9, dann passiert nix, also es wird kein text ausgegeben
-
Du musst, nach jedem div dann wieder dx auf 0 setzten. Es wird ja dx:ax durch bx dividiert.
-
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
-
@bluecode danke ...
aber was heist dx:ax ??
-
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.
-
achsooooooooooooo ...
allles klar, danke
-
*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