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?


Anmelden zum Antworten