Fehler in dez2ascii konvertierung



  • Hi Leute 🙂
    Ich weis jetzt nicht ob solche Fragen wie:
    "In meinem code ist ein Fehler und ich kann in nicht finden, brauche Hilfe"
    hier in solchem Forum nicht irgendwie unverschämt sind. Wenn ja, dann bitte ich den Moderator darum den thread zu löschen, denn hier kommt so eine Frage meinerseits:

    ;nasm/linux
    global _start
    
    section .data
            msg: db "Dies ist nur ein kleiner Testtext",0
            msg_l: equ $ - msg
    
    section .bss
            wert: resb 16
            wert_l: equ $ - wert
    
    section .text
    
    _start:
            cld
            mov esi,msg
            mov ecx,msg_l
    naechste:
            lodsb
            test al,al
            jz gefunden
            loop naechste
    
    ende:
            mov eax,1
            xor ebx,ebx
            int 80h
    
    gefunden:
            call dez_ascii
            mov eax,4
            mov ebx,1
            mov ecx,wert
            mov edx,wert_l
            int 80h
            jmp short ende
    
    dez_ascii:
            xor eax,eax
            xchg eax,ecx  ; eax="nummer in bit"  ecx=0
            mov ebx,10    ; basis 10
    stelle:
            div ebx
            push edx
            inc ecx
            test edx,edx
            jnz short stelle
    zeichen:
            pop eax
            add al,30h
            mov [esi],byte al
            inc esi
            loop zeichen
            ret
    

    Dieses Programm soll einfach die position der binären NULL im string msg
    ausgeben (das müsste so ungefähr um die 34 sein). Es gibt aber immer eine
    0561 aus.
    Kann mir jemand sagen wo der Fehler steckt?
    Für eure Hilfe wäre ich Euch sehr dankbar 🙂

    Gruss 🙂



  • Hi.

    2 Fehler in deinem int2str-Algo, die mir gleich ins Auge gesprungen sind:
    1.edx wird vor division nicht gesetzt.
    Dividiert wird edx:eax / r/m32 => Rest:edx;Quot:eax
    Na, daemmert's? 😃
    2.Weshalb brichst du die Konvertierung bei einem Rest von 0 ab? 😕

    BTW:
    Deine Frage ist vielleicht noch nicht mal sooo unverschaemt, der Thread-Titel aber irgendwo schon. 😉



  • @Nabuo T
    Vielen dank für Deine Hilfe 🙂

    Hab die funktion jetzt so geändert:

    dez_ascii:
            xor eax,eax
            xchg eax,ecx  ; eax="nummer in bit"  ecx=0
            mov ebx,10    ; basis 10
    stelle:
            xor edx,edx
            div ebx
            push edx
            inc ecx
            test eax,eax
            jnz short stelle
    
            mov esi,wert
    zeichen:
            pop eax
            add al,30h
            mov [esi],byte al
            inc esi
            loop zeichen
            ret
    

    Wenn man das prog hiermit laufen läst wird jetzt ne 1 ausgespukt 😞
    Irgendwo steckt da immer noch der Fehler



  • Ok, noch ein Tipp:
    Schau dir doch mal an, von welcher Richtung des Strings aus gezaehlt ecx die Stelle der 0 enthaelt. 😃

    BTW:
    Mein letztes BTW sollte einen Wink mit dem Zaunpfahl sein, einen aussagekraeftigen Titel zu waehlen. AFAIR kann man hier als registrierter User auch seine Beitraege inkl. Titel editieren. 😉



  • Nobuo T schrieb:

    Schau dir doch mal an, von welcher Richtung des Strings aus gezaehlt ecx die Stelle der 0 enthaelt. 😃

    THX, bin jedoch etwas voreilig mit dem posten. Bin mitlerweile selbst drauf gekommen 😃

    Nobuo T schrieb:

    BTW:
    Mein letztes BTW sollte einen Wink mit dem Zaunpfahl sein, einen aussagekraeftigen Titel zu waehlen. AFAIR kann man hier als registrierter User auch seine Beitraege inkl. Titel editieren. 😉

    LOL, verstehe. Gleich mal ausprobieren...


Anmelden zum Antworten