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.