eingabe und ausgabe von zahlen!
-
Hi Leute
Ich habe zwei Funktion (nasm) geschrieben.
Eine konvertiert ascii-zahlen in Zahlen um (dezi_konv)
und die andere zahlen in ascii,
so das man die Zahl dann auf BS augeben kann (ascii_konv).Ein kleines Programm (hier nicht dargestellt)
1.)nimmt die Zahl von stdin ein konvertiert sie (dezi_konv)
2.)konvertiert sie wider zurück in ascii (ascii_konv)
4.)gibt diese wider auf stdout ausLeider stimmt die Ausgabe mit der Eingabe nicht überein
Hier die Functionen:
dezi_konv: push ebp mov ebp,esp mov esi,[ebp+8] ; Wir holen die addr des buffers xor eax,eax ; hier kommt unser ergebnis rein mov ebx,10 ; unsere Basis xor ecx,ecx ; hiermit rechnen wir nachste: mov cx,[esi] ; wir holen ns das erste ASCII Zeichen sub cx,0x30 ; wir wandeln es in Dezimalziffer um cmp cl,9 ; ist die Ziffer groesser als 9 ? ja keine_zeichen ; wenn ja, dann beende function mul ebx ; multipliziere mit der Basis 10 add eax,ecx ; rechne Ziffer mit der zahl zusamen inc esi ; wir behandeln nun das naechste Zeichen jmp nachste keine_zeichen: pop ebp ret ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ascii_konv: push ebp mov ebp,esp mov esi,[ebp+12] ; wir holen die addresse des ausgabebuffers mov eax,[ebp+8] ; wir holen die zu umkonvertierende Dezimalzahl mov ebx,10 ; Unsere Basis xor ecx,ecx ; Wir zaehlen die Ziffern ziffer: xor edx,edx ; diese wird nach der division die Ziffer sein div ebx ; wir dividieren durch die Basis push edx ; den divisionsrest merken wir auf dem stack inc ecx ; wir haben eine Ziffer mehr cmp edx,0 ; ist der divisionsrest groesser als 0 ? ja ziffer ; wenn ja, dann war es noch nicht das ende in_buffer: pop eax add al,0x30 mov [esi],al inc esi loop in_buffer pop ebp ret
Kann mir jemand Helfen? wo steckt der Fehler?
Für eure Hilfe wäre ich sehr dankbar
Gruss
-
THX hab den Fehle selbst gefunden
mov cx,[esi] ; wir holen ns das erste ASCII Zeichen sub cx,0x30 ; wir wandeln es in Dezimalziffer um
muss heissen
mov cl,[esi] ; wir holen ns das erste ASCII Zeichen sub cl,0x30 ; wir wandeln es in Dezimalziffer um
gruss