Aufgabe Buchstaben drehen, Gibts auch nen einfacheren Weg?



  • Hallo

    Ich hatte die Aufgabe ne Variable mit meinem Vornamen zu deklarieren und diese zu drehen und auszugeben. Ich hab das ganze über das BX register und den Stack gelöst:

    .MODEL SMALL
    .STACK 256
    .DATA
    TEXT DB "KAI"
    TEXT1 DB "TEST"
    .CODE
    M:
    MOV AX,@DATA
    MOV DS,AX
    MOV BX,offset TEXT
    push [BX]
    inc BX
    push [BX]
    inc BX
    push [BX]
    POP DX
    MOV AH,02H
    INT 21H
    POP DX
    MOV AH,02H
    INT 21H
    POP DX
    MOV AH,02H
    INT 21H
    MOV AH,4CH
    INT 21H
    END
    

    Das ganze funktioniert problemlos. Ich weiss das es mit einer schleife eleganter gewesen were ist ja aber nicht nötig ich weiss ja wieviele Buchstaben mein Name hat.
    Nun zu meiner Frage, ist das der beste weg, oder gibt es noch andere.

    Mein problem ist auch Ich hole ja sachen aus dem Stack in das DX register, der DOS Interrupt schreibt ja das DL register in stdout. Woher weiss ich nun das die sachen ausm Stack im dl register gelandet sind?

    mfg Kai



  • kaimay schrieb:

    Nun zu meiner Frage, ist das der beste weg, oder gibt es noch andere.

    Nein, es ist nicht der beste Weg, da umstaendlich => ja, es gibt noch andere. 😉

    Ich wuerde zB. vorschlagen, den Pointer gleich auf's Ende deines Strings zu setzen und dann nach vorn durchzugehen.
    Praktisch:

    mov ah, 2
    mov bx, offset TEXT + 2
    mov dl, [byte ptr bx]
    int 21h
    dec bx
    ;usw...
    

    kaimay schrieb:

    Woher weiss ich nun das die sachen ausm Stack im dl register gelandet sind?

    Beobachtung? Offenbar funktioniert's ja.
    In dl stehen die unteren 8Bit von dx. Schau mal in den FAQ, da ist irgendwo eine Erklaehrung des (Sub-)Registeraufbaus beim x86.


Anmelden zum Antworten