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,10

    mul bh
    mov Ergebnis,ax

    mov dx, offset Meldung

    mov ah,4Ch

    int 21h

    CODE ENDS

    END Anfang

    Ich verstehe es nicht.
    Es sollte
    Das Ergebnis lautet 300

    auf 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.


Anmelden zum Antworten