WORD einlesen und ausgeben



  • Hall,

    Ich möchte in assembler einen wert als WORD einlesen und dann in einer variablen speichern, um eine zahl addieren und wieder ausgen.

    .data
      var dw 0
    .code
     ; var einlesen
     ADD var,5000
     ; var ausgeben
    

    leider scheitere ich an der ein und ausgabe. Kann mir da jemand helfen ?

    thx, oern



  • Hi.

    Wo genau hagt's denn?
    Weisst du schon, wie du strings einlesen und ausgeben kannst?
    Wenn nicht, waere es hilfreich zu wissen, fuer welches OS du programmierst. 😉

    Hast du in etwa eine Idee fuer einen Algorithmus zur Umwandlung von Zahlen in einen String, bzw. von String zu Zahl?
    Wenn nicht, mit welchem Zahlensystem willst du arbeiten?
    (dec, hex, bin, ... Das Funktionsprinzip ist zwar immer gleich, die Implementierung jedoch praktisch unterschiedlich schwierig - Schwierigkeit steigt von bin an in og. Aufzaehlung)



  • Ich programmiere für Windows benutze aber für den Anfange eine DOS-COM Anwendung.
    Einfache Zeichenketten kann ich auch schon ausgeben:

    msg   db "ein String$"
    
    lea   dx, msg    
    mov   ah,9	
    int   21h
    

    Nein ich habe keine Idee für den Algorithmus zur Umwandlung von Zahlen in einen String, bzw. von String zu Zahl. Würde aber am liebsten mit den 10ner System arbeiten



  • oern schrieb:

    Ich programmiere für Windows benutze aber für den Anfange eine DOS-COM Anwendung.

    Du programmierst also fuer DOS. Ob du das ganze dann tatsaechlich in DOS, oder in Windows, Linux, oder auf deinem Palm im Emulator ausfuehrst, spielt keine Rolle.

    oern schrieb:

    Einfache Zeichenketten kann ich auch schon ausgeben:

    msg   db "ein String$"
    
    lea   dx, msg    
    mov   ah,9	
    int   21h
    

    Jo, das "lea dx, msg" wird von jedem vernuenftigen Assemler durch ein "mov dx, offset msg" (o.Ae. Syntax) ersetzt werden, also koenntest du das der Einfachheit halber auch gleich selbst so hinschreiben.

    Zum Einlesen von Strings in DOS bitte mal einen Blick in die FAQ werfen.

    oern schrieb:

    Nein ich habe keine Idee für den Algorithmus zur Umwandlung von Zahlen in einen String, bzw. von String zu Zahl. Würde aber am liebsten mit den 10ner System arbeiten

    Schlecht.
    Wurde hier aber auch schon oefters erklaert. Einfach mal ein bissel suchen, dann findest du vielleicht auch noch Code.

    Prinzip der Umwandlung von Zahl(unsigned word)->String ist, dass du die Zahl so lange durch die Basis deines aktuellen Zahlensystem (bei dec also 10 dezimal) teilst und jeweils den Rest der Division (der logischerweise zwischen 0 und 9 liegt - na, daemmert's? 😉 ) irgendwo auf einen Stack (bzw. den Stack) legst (um die Reihenfolge der Ziffern einfach umkehren zu koennen - bei diesem Algorithmus bekommst du naemlich die niedrigste Stelle der Zahl zuerst geliefert), bis der Quotient 0 ist. Hierbei macht es uebrigens Sinn, die Anzahl der Durchlaeufe zu zaehlen oder den "Boden" deines Stacks irgendwie zu kennzeichnen, damit du eine Abbruchbedingung fuer die naechste Schleife hast.
    In dieser 2. Schleife nimmst du die auf dem Stack gespeicherten Werte nacheinander wieder herunter und addierst 30h (ASCII-Code fuer "0") dazu => So bekommst du einen schoenen String, der alle Ziffern in der richtigen Reihenfolge enthaelt.

    ---
    Prinzip der Umwandlung von String->Zahl ist praktisch das gleiche, nur andersherum: Zuerst initialisierst du deinen Ergebniswert mit 0.
    Nun nimmst du dir den String vor und faengst einfach vorn mit dem ersten char (also der ganz links) an.
    Von diesem ziehst du 30h ab und schaust, ob das Ergebnis negativ oder >9 ist. In diesen Faellen stand an der Stelle etwas anderes als eine Ziffer zwischen 0 und 9 => du solltest die Schleife an dieser Stelle verlassen.
    Ansonsten addierst du die oben errechnete Differenz auf deinen Ergebniswert und nimmst dir den naechsten char vor. Ist der auch gueltig (also eine der Ziffern von 0-9), multiplizierst du deinen Ergebniswert mit 10 und addierst die neue Differenz, nun nimmst du den naechsten char, usw.

    Og. Vorgehensweisen sind zwar schon recht allgemein, aber natuerlich nur Vorschlaege. HTH (immerhin habe ich da eine Weile dran getippt und mir muehe gegeben, es umstaendlich auszudruecken 😉 :p)


Anmelden zum Antworten