HEX to DEC - Problem mit Datentypen



  • Hallo ich möchte aus einer HEX-Adresse in eine Dezimale Zahl umwandeln, damit ich damit rechnen kann. Kann mal jemand von euch da drüber schauen, ob das so stimmt! Ich habe eine 2-Byte große Adresse, die in AX steht und eine Zahl die in hvar stehen soll. Mein Problem, ich bin irgendwie mit den Datentypen durcheineander gekommen, und seh nicht mehr durch!

    hvar    dw ?
    array db '0','1','3','4','5','6','7','8','9','A','B','C','D','E','F'
    harr	db 15 dup(?)
    s	dw 0
    konst	dw 16
    l	dw ?
    i	dw ?
    
    .
    .
    .
    
    HexToDec proc near
            mov hvar,ax
    
            mov ax,0                
    t:      mov cx,0                
    q:      cmp hvar[ax],array[cx]
            jnz f                    
            mov harr[ax],cx          				
    f:      inc cx                  
            cmp cx,16               
            jnz q                   
            inc ax
            cmp ax,3            
            jnz t               		
    
            mov cx,0
    p:      mov ax,3
            sub ax,cx
            mov i,ax
            fild i
            fild konst
            fyl2x
            fscale
            fild harr[cx]
            fmul
            fiadd s
            fistp s
            inc cx
            cmp cx,3
            jnz p
    
            mov ax,s
            mov hvar,ax                                                                        
    
            ret      
    HexToDec endp
    


  • Uff, das glaube ich allerdings auch. 😮

    Also nochmal genau: Was gibst du dieser Funktion rein und was soll rauskommen?
    In welcher Form uebergibst du die HexZahl? Als lesbaren String (also hier 2 Chars zB. "21")? Oder soll das einfach eine 2Byte grosse Integerzahl sein? Das waere dann ja aber in erster Linie ein binaerer Zahlenwert und nicht lesbar.
    Und in welchem Format soll die Dezimalzahl rauskommen? Also wie ein String sieht mir das, was da produziert wird, eigentlich nicht aus... Wie etwas anderes irgendwie brauchbares aber auch nicht. 😃

    Mal abgesehen von einigen Fehlern im Code, beschleicht mich der Verdacht, dass du irgendwo ganz heftig was verplant hast... ...oder ich halt. 🙄 😉



  • Ok ich habe mir eine Wert, genauer ein Adresse über das geholt:

    mov dx,3c8h
            mov al,1
            out dx,al
    
            mov dx,3c9h
            mov al,63
            out dx,al
            mov al,63
            out dx,al
            mov al,63
            out dx,al
    
            mov xVal,160
            mov yVal,100
            mov ax,320
            mul yVal
    
            add ax,xVal
    

    Somit hab ich die Hex-Adresse der Mitte des Bilschirms, also eine 2 Byte große Adresse. Diese soll in einen Integer umgewandelt werden, damit ich damit rechen kann. Ich hoffe mal das hilft dir zum Verständnis?!?!



  • linuxfan132 schrieb:

    mov xVal,160
            mov yVal,100
            mov ax,320
            mul yVal
    
            add ax,xVal
    

    Somit hab ich die Hex-Adresse der Mitte des Bilschirms, also eine 2 Byte große Adresse.

    Erstmal hast du in ax nur einen Zahlenwert (der PC speichert den binaer - das ist aber grundsaetzlich hier erstmal belanglos) und zwar das Ergebnis der Rechnung (320100) + 160 zu stehen.
    Bei einer Grafikaufloesung von 320
    200Pixel bei 8Bit/Pixel waere das zufaellig das Offset fuer ein Pixel nahe der Mitte des Bildschirms. Es handelt sich dabei um eine Integerzahl, welche so erstmal wie gesagt keine Hexzahl ist.
    Du kannst sie lediglich als Hexzahl darstellen - das ist aber eine andere Geschichte. 😉

    linuxfan132 schrieb:

    Diese soll in einen Integer umgewandelt werden, damit ich damit rechen kann. Ich hoffe mal das hilft dir zum Verständnis?!?!

    Noe, leider reicht das absolut nicht.
    1. Ist dein Input weder ein String (wozu also der Vergleich am Anfang deines Codes mit den Ziffern von 0-F, wo uebrigens die 2 fehlt?), noch eine Hexzahl.
    2. Was spricht dagegen, in deinem Programm sofort mit dem Ergebnis der letzten Rechnung in ax weiter zu rechnen? Wie gesagt sind fuer den Rechner letztendlich eh alle Zahlen nur binaer.

    BTW:
    Das hier

    linuxfan132 schrieb:

    mov dx,3c8h
            mov al,1
            out dx,al
    
            mov dx,3c9h
            mov al,63
            out dx,al
            mov al,63
            out dx,al
            mov al,63
            out dx,al
    

    hat an sich absolut nichts mit den folgenden Code-Zeilen zu tun - da wird der Palette-Eintrag 1 auf R=G=B=63 gesetzt, wobei al uebrigens nur einmal haette auf 63 gesetzt werden brauchen.
    Und der Wert in ax, den du darunter errechnest, ist keine vollstaendige Adresse.
    Aber das nur am Rande...



  • Sorry aber das wird mein erstes Programm. Ich bin kein Info-Student und beschäftige mich nicht täglich damit. Mein größtest Problem ist halt der Umgang mit den Einzelnen Datentypen. Vielleicht kannste mir ja mal kurz erklären wie der Rechner zB mit Zahlen nach Rechnungen umgeht. Oder kennste ein Doc, wo das drin steht? Ansonsten glaub ich eigentlich, die Assemblierer-Sprache begriffen zu haben ... 👍

    PS: Die Rechnung ist jetzt aber ansich richtig! Aber dann wieder die Datentypen!!!!



  • linuxfan132 schrieb:

    Sorry aber das wird mein erstes Programm. Ich bin kein Info-Student und beschäftige mich nicht täglich damit.

    Tja, wie auch immer - ist bei mir ja auch nicht anders. 😃
    Auf den ersten Blick sieht dein Programm auf jeden Fall schonmal sehr eindrucksvoll aus. 🙂

    linuxfan132 schrieb:

    Mein größtest Problem ist halt der Umgang mit den Einzelnen Datentypen. Vielleicht kannste mir ja mal kurz erklären wie der Rechner zB mit Zahlen nach Rechnungen umgeht.

    Nach ausgefuehrter Rechnung wird das Ergebnis (je nach Befehl) in den Speicher oder ein Register geschrieben... Was soll damit sonst grossartig geschehen? 😕
    So wie ich das sehe, ist dein groesstest Problem (hier zumindest) dich wirklich genau und verstaendlich auszudruecken... Vielleicht stehe ich gerade aber auch nur auf der Leitung. 🙄

    linuxfan132 schrieb:

    PS: Die Rechnung ist jetzt aber ansich richtig! Aber dann wieder die Datentypen!!!!

    Welche Rechnung? Die in deinem Code vom ersten Beitrag? Da ich nur erahnen kann, was du dir dabei gedacht hast, meine ich, dass das irgendwo ziemlicher Murx ist.

    Und zu den Datentypen:
    Da kennt der Rechner AFAIK eigentlich nur 2, mit denen er rechnen kann: Gleitkommazahlen und Integer. Hex, Dezimal, usw. ist nur eine Frage der Darstellung.


Anmelden zum Antworten