Warum funktioniert dieses Program nicht?
-
DATEN SEGMENT
Meldung db "Das Ergebnis lautet",'Ergebnis',"!",0
db "$"DATEN ENDS
STAPEL SEGMENT
STAPEL ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATEN, ES:NOTHING, SS:STAPEL
Anfang: mov ax,DATEN
mov ds,ax ;Datensegment laden-muss über diesen Umweg geschehen.Ergebnis dw ?
mov al,30
mov bh,10mul bh
mov Ergebnis,axmov dx, offset Meldung
mov ah,4Ch
int 21h
CODE ENDS
END Anfang
Ich verstehe es nicht.
Es sollte
Das Ergebnis lautet 300auf dem Bildschirm ausgegeben werden.
Warum tut es das nicht?
-
Hi.
Das hat im Grunde genommen nur 2 Gruende:
1. Dein Programm enthaelt an sich keinen Befehl, der deinen PC dazu veranlassen koennte, deine "Meldung" auszugeben.
Das koenntest du zB. mit der DOS Funktion 09h machen:
ah=09h
ds:dx=Pointer auf String
(int 21h)2. Solltest du zB. mit DOS Funktion 09h deine "Meldung" ausgeben, wuerde - so wie es jetzt aussieht - "Das Ergebnis lautetErgebnis! " auf dem Bildschirm erscheinen.
Also musst du dir einen Algo schreiben, der dein Word bei "Ergebnis" in einen String umrechnet und dann in den String deiner "Meldung" einfuegt.
Wie man das macht, habe ich hier auch schon mehr als ein mal geschrieben => keine Lust mehr. :p
Dein Pech, dass die Suche nicht mehr funktioniert.
Aber da dieses Problem nicht unbedingt etwas mit Assembler zu tun hat, sondern hoechstens die Implementierung spaeter, kommst du vielleicht auch von selbst drauf.BTW: Dieses uninitialisierte dw mitten in deinem Code (des hier: "Ergebnis dw ?") wird wahrscheinlich von der CPU als "add [bx+si],al" interpretiert werden (=0000h).
Ist nicht gerade sehr schoen. Also pack deine Daten besser so hin, dass nicht aus Versehen die CPU waehrend der Programmausfuehrung drueber faehrt.Zum schluss moechte ich dir noch nahe legen, dich mal bei den Tutorials in den FAQ umzuschauen...
-
Servus schrieb:
Anfang: mov ax,DATEN
mov ds,ax ;Datensegment laden-muss über diesen Umweg geschehen.Ergebnis dw ?
Was soll das werden? Schau dir mal ganz dringend an, wie eine CPU arbeitet ... Befehlszyklus und so.