Problem mit MOV
-
Hallo kann mir wer sagen wie ich hier die 3 ausgeben lassen kann ?
Die 2 Ausgeben ist kein Problem das funktioniert.
Aber wieso ist die 3 nicht im AH Register ?
Wo ist die 3 hin ? O_o
.model small .stack 100h .data var1 db ? ,"$" var2 db ? , "$" endl db 10,13,"$" .code start: mov ax,@data mov ds,ax mov ax,32h mov var1 , ah mov var2 , al mov dx,offset var1 mov ah,9h int 21h mov dx,offset endl mov ah,9h int 21h mov dx,offset var2 mov ah,9h int 21h mov ah,4ch int 21h end start
-
Hi,
die 32h bedeutet nicht, dass du "32" (oder "3" und "2) ausgibst. Die 32h ist der ASCII-Code vom Zeichen "2". Die "0" ist 30h, die "3" ist 33h und die "9" ist 39h. Das Muster erkennst du sicherlich
ASCII Codes für andere Zeichen findest du in den entsprechenden Tabelle. Zum Beispiel dies hier ist das erste Ergebnis bei Google: http://www.torsten-horn.de/techdocs/ascii.htm
Zurück zur 32h. Du lädst AX mit 32h. AX ist ein 16-Bit Register, die Zahl 32h = 0032h sieht in Binärschreibweise so aus 0000'0000'0011'0010. ASCII ist ein 8-Bit-Code, die Information steckt also in den unteren 8 Bits von AX und die oberen 8 Bits sind null.
Die unteren 8 Bits kopierst du von AL nach var1 und alles klappt wie gewünscht. Das klappt bei AH aber nicht, weil wie oben beschrieben AH = 0.
Das ganze kannst du lösen, indem du statt AX einfach nur zweimal AL nimmst (wenn du zwei Zeichen darstellen willst.
; "2" nach var1 kopieren mov al,32h mov var1 , al ; "3" nach var2 kopieren mov al,33h mov var2 , al
Statt 32h kannst du übrigens auch '2' schreiben.
-
Aber wie werden dann dann Zwei oder Dreistellige Zahlen Addiert ?
.model small .stack 100h .data var1 db ? ,"$" var2 db ? , "$" endl db 10,13,"$" .code start: mov ax,@data mov ds,ax mov ax,9h ; 9 mov var1 , al mov ax,1h ; 3 add var1,al add var1 , 30h mov dx,offset var1 mov ah,9h int 21h mov ah,4ch int 21h end start
So kann ich ja z.b. die Zahl 73 ausgeben
.model small .stack 100h .data wert1 db 10 dup (0) , "$" .CODE start: mov ax,@data mov ds,ax mov ax,73 mov bl,10 div bl mov wert1[0],al add wert1[0],30h mov wert1[1] ,ah add wert1[1],30h mov dx,offset wert1 mov ah,9h int 21h mov ah, 4ch int 21h END start
-
mov_ schrieb:
Aber wie werden dann dann Zwei oder Dreistellige Zahlen Addiert ?
Was hat Addition damit zu tun? Ich verstehe nicht, was genau du machen willst.
-
vorschlag: Mit dem assembler ein COM programm
erzeugen und dann schritt für schritt mit einem realmode debugger debuggen.
gegenfrage: mit welchem debugger arbeitest du gerade?