supernicky
Goto Top

Zahlenausgabe nicht möglich

Ergebnis einer Berechnung kann nicht ausgegeben werden....

Hallo,

Ich bischäftige mich erst seit kurzem mit Assembler, aber .........

es ist mir nicht möglich nach Eingabe zweier Zahlen das Ergebnis einer Berechnung auf dem Schirm auszugeben.
Mit Zeichenketten funktioniert das problemlos..

Auch in den Büchern werden nicht Ergebnisse ausgegeben, sondern immer nur nach einem Vergleich der jeweilige vordefinierte String.

Ist es denn nicht möglich???

(zahl1 = 5 und zahl2 = 12, also nur was kleines)

mov al, zahl1
mul zahl2
mov ergebnis, ax


mov dx,ergebnis
"mov dx, offset ergebnis und lea dx, ergebnis funktionieren auch nicht...."

mov ah,09h
int 21h

hiermit erreicht man ein paar Töne aber keine brauchbare Ausgabe auf dem Schirm face-smile

Wäre nett wenn jemand Licht ins Dunkel bringen könnte.

Gruß, Nicky

Content-Key: 162441

Url: https://administrator.de/contentid/162441

Ausgedruckt am: 29.03.2024 um 00:03 Uhr

Mitglied: 76109
76109 11.03.2011 um 01:08:01 Uhr
Goto Top
Hallo supernicky!

So einfach geht das nicht.

Du musst Zahlenwerte vorher in einen String im ASCII-Format konvertieren. Dazu schreibt man in der Regel Konvertierungsroutinen, die eine Zahl in einen ASCII-String umwandeln.

Beispiel: die Zahl 0 entspricht dem ASCII-Wert 30h, die Zahl 9 dem ASCII-Wert 39h

Bei zweistelligen Zahlen bis 99 (AX) und vierstelligen Zahlen bis 9999 (EAX) gehts noch relativ einfach:

Test Proc Pascal Near

    Local buff:Byte:32  ;Buffer 32 Byte (Stack-Variable)
    
    mov ax, 99          ;AX = Zahl 99
    aam                 ;AH = Zahl 9, AL = Zahl 9
    add ax, 3030h       ;AH = ASCII 9, AL = ASCII 9
    
    mov [buff], ax      ;ASCII 99 in Buffer
    mov [buff+2], '$'   ;Stringende mit $ angeben sonst Piepts höchstwahrscheinlich  
    lea dx, [buff]      ;DX = Offset Buffer
    
    mov ah, 9           ;Funktion Stringausgabe
    int 21h             ;Dos-Int 21h
    
    ret

Endp
Versuchs mal (ich kanns bei mir nicht testen)

Gruß Dieter
Mitglied: supernicky
supernicky 11.03.2011 um 01:32:07 Uhr
Goto Top
Hallo Dieter,

es geht.

ich werde mal ein paar Versuche starten und noch etwas im Buch lesen..

den aam Befehl kenne ich noch nicht...
wieso eine addition mit 12336 aus einer Binär eine Dezimalzahl macht weiß ich auch noch nicht.. aber ich bekomme es noch raus face-smile

Erstmal danke für den Code..

Nicky
Mitglied: supernicky
supernicky 15.03.2011 um 23:11:29 Uhr
Goto Top
Hallo nochmal,,

mit der Zahlenausgabe klappt es jetzt... aber..

wenn ich mit einem Buffer arbeite (5 Byte groß) und ich überschreibe ein Byte mit einem neuen Wert
z.B. String "Nicky", "$"

mov bx, offset String
mov [bx], "M"

dann sollte eigentlich nur das N durch ein M ausgetauscht werden, was auch passiert. Jedoch wird dabei immer das nächste Byte gelöscht.
Sobald ich nun beim y ankomme und mache daraus ein i, wird das "$" ebenfalls gelöscht und ich erhalte wieder Signale aus dem All.

Kann hier vielleicht jemand sein Wissen veröffentlichen?

Danke, Nicky
Mitglied: 76109
76109 15.03.2011 um 23:24:09 Uhr
Goto Top
Hallo Nicky!

versuchs mal mit:
mov byte ptr [bx], 'M'  

Gruß Dieter

PS. Das '$' musst Du bei der Buffergröße auch mitzählen. Es schadet auch nicht, wenn er größer ist, als benötigt wird
Mitglied: supernicky
supernicky 15.03.2011 um 23:35:47 Uhr
Goto Top
jetzt wo ich es lese fällt es mir wieder ein...

klappt wieder einmal...

danke