Autor Thema: Zahlen ausgeben ...  (Gelesen 6150 mal)

thetrue

  • Beiträge: 216
    • Profil anzeigen
    • http://www.the-true.net
Gespeichert
« 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
thetrue way is my way

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #1 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.
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

thetrue

  • Beiträge: 216
    • Profil anzeigen
    • http://www.the-true.net
Gespeichert
« Antwort #2 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
thetrue way is my way

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #3 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.
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

hannibal

  • Host
  • Beiträge: 400
    • Profil anzeigen
    • brainsware - the rock.
Gespeichert
« Antwort #4 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
\\o
o//
\o/

thetrue

  • Beiträge: 216
    • Profil anzeigen
    • http://www.the-true.net
Gespeichert
« Antwort #5 am: 20. July 2006, 13:39 »
@bluecode danke ...

aber was heist dx:ax ??
thetrue way is my way

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #6 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.
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

thetrue

  • Beiträge: 216
    • Profil anzeigen
    • http://www.the-true.net
Gespeichert
« Antwort #7 am: 20. July 2006, 13:44 »
achsooooooooooooo ...
allles klar, danke
thetrue way is my way

bitmaster

  • Troll
  • Beiträge: 1 138
    • Profil anzeigen
    • OS-64 = 64 Bit Operating System
Gespeichert
« Antwort #8 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
In the Future everyone will need OS-64!!!

 

Einloggen