Hallo, habe folgendes Problem: Warum kann im folgende Programm (fett markierter Abschnitt) der call adresse[si] nicht durchgeführt werden? Gebe ich jedoch plus, oder minus ein funktionert das Programm. Wo mache ich einen Fehler??? Gruß Mike ; 8086 Code Template ; Directive to make EXE output: #MAKE_EXE# dataseg SEGMENT 'DATA' adresse dw plus, minus, mult z1 db 100 z2 db 50 ergebnis dw ? operator db '+', 2Dh, 101010b dataseg ENDS stseg SEGMENT STACK 'STACK' dw 16 dup(0) stseg ENDS codeseg SEGMENT 'CODE' ;**************Hauptprogr amm*************** HAUPT PROC FAR ; sichern der Rücksprungadresse ins OS push ds ; DS-Register in den Stack retten mov ax,0 ; AX-Register leeren push ax ; AX-Register in den Stack retten ; Segmentregister initialisieren mov ax,dataseg mov ds,ax ; unser Code - eigentliches Programm mov bl,z1 ; 'z1' in den Lowanteil vom BX-Register mov cl,z2 ; 'z2' in den Lowanteil vom CX-Register m1: mov si,0 ; SI-Register auf "0" "zurücksetzen" mov ah,1 ; Zeicheneingabe int 21h ; ASCII cmp al,operator[si] ; Vergleicht Operator mit Inhalt Lowanteil AX-Register "Eingabe=+?" je addition ; Vergleich übereinstimmend, dann "Sprungmarke" inc si ; SI Inkrementieren --> "zeigt nun auf 2Dh (Minus)" cmp al,operator[si] ; Vergleicht Operator mit Inhalt Lowanteil AX-Register "Eingabe=2Dh?" je subtraktion ; Vergleich übereinstimmend, dann "Sprungmarke" inc si ; SI Inkrementieren --> "zeigt nun auf 101010b (Multi)" cmp al,operator[si] ; Vergleicht Operator mit Inhalt Lowanteil AX-Register "Eingabe=101010b?" je multiplikation ; Vergleich übereinstimmend, dann "Sprungmarke" jmp m1 ; Unbedingter Sprung nach "Sprungmarke" addition: call adresse[si] ; call adresse[si] ??? <----------hier zum Beispiel!!! jmp m2 ; Unbedingter Sprung nach "Sprungmarke" subtraktion: shl si,1 ; verschiebt die Bits SI um ein Bit nach links und schiebt rechts eine "0" nach (Multiplikation mit 2) call minus ; call adresse[si] ??? jmp m2 ; Unbedingter Sprung nach "Sprungmarke" multiplikation: shl si,1 ; verschiebt die Bits SI um ein Bit nach links und schiebt rechts eine "0" nach (Multiplikation mit 2) call mult ; call adresse[si] ??? jmp m2 ; Unbedingter Sprung nach "Sprungmarke" m2: mov ergebnis,dx ; DX-Register nach Ergebnis speichern ret ; zurück ins OS HAUPT ENDP ;********ENDE**Hauptprogr amm**ENDE********* plus PROC mov dl,bl ; Lowanteil BX-Register nach Lowanteil DX-Register add dl,cl ; Addiere Low DX-Register mit Low CX-Register und speichere in Low DX-Register mov dh,0 ; High DX-Register "0" ret ; Return ins Hauptprogramm plus ENDP minus PROC mov dl,bl ; Lowanteil BX-Register nach Lowanteil DX-Register sub dl,cl ; Subtrahiere Low DX-Register mit Low CX-Register und speichere in Low DX-Register mov dh,0 ; High DX-Register "0" ret ; Return ins Hauptprogramm minus ENDP mult PROC mov al,bl ; Lowanteil BX-Register nach Lowanteil AX-Register mul cl ; 8 Bit Multiplikation mit Low CX-Register und speichert in AX-Register mov dx,ax ; AX-Register nach DX-Register ret ; Return ins Hauptprogramm mult ENDP codeseg ENDS END START
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.