Nasm: SBC-86 Fehler im Programm ansprechen von Segmentdisplay



  • Also ich habe folgendes Programm geschrieben:

    ; Konstanten
           led  equ 0h
           seg1 equ 90h
           seg2 equ 92h
           seg3 equ 94h
           seg4 equ 96h
           seg5 equ 98h
           seg6 equ 9Ah
           seg7 equ 9Ch
           seg8 equ 9Eh                                
    
    ; Startadresse
           org 100H
           mov bx,     leer
           mov al,     [bx]       ;Symbol "Leer" laden
    
    ;Segmente zu beginn "Löschen"
           out seg3,   al
           out seg4,   al
           out seg5,   al
           out seg6,   al
           out seg7,   al
           out seg8,   al
    
           WDH:   
           in    al,   0        ;Einlesen von Binary Input
           mov   cx,   ax        ;Kopie von Eingebenen Binärwert anlegen zur späteren Bitmanipulation
           out  led,   al        ;Ausgabe an Dioden
    
           out seg1,   al        ;Ausgabe an ganz Rechte Segmentanzeige
    
    ;Niederwertige Bits in Hex ausgeben
           mov bx,     hex
           and al,     00001111b
           add bx,     ax
           mov al,     [bx]
           out seg2,   al   
    
    ;Höherwertige Bits in Hex ausgeben
           shr cx, 4   ;FEHLER? Programm springt ausserhalb des 
           mov bx, hex 
           add bx, cx 
           mov al, [bx] 
           out seg3, al 
    
          jmp WDH
    
    ;Stapelsegment
    leer   db 00000000b        ;Leere Anzeige
    hex    db 00111111b        ;0
           db 00000110b        ;1
           db 01011011b        ;2
           db 01001111b        ;3
           db 01100110b        ;4
           db 01101101b        ;5
           db 01111101b        ;6
           db 00000111b        ;7
           db 01111111b        ;8
           db 01101111b        ;9
           db 01110111b        ;A
           db 01111100b        ;b
           db 00111001b        ;C
           db 01011110b        ;d
           db 01111001b        ;E
           db 01110001b        ;F
    

    Also ich spreche bei dem Programm zunächst auf dem SBC-86 ne 8-Stellige Schalter Reihenfolge an und geben diese Positionen auf den 8 Dioden dahinter und auf einem 7 Segmentdisplay aus.

    Nun steht im Stapelspiecher zunächst welche kombination von den 8 ziffern welche ziffer auf dem Segmentdisplay darstellt.

    Außerdem soll man mit 4 Schaltern , eine entsprechende zahl binär eingeben und diese soll als hex ziffer von 0 bis F angezeigt werden.

    Soweit so gut das geht bei mir genau einen Programmdurchlauf gut, aber direkt hinter der zeile

    shr cx, 4
    

    noch vor dem shr befehl springt das programm irgendwo auf eine Adresse ausserhalb des Bereichs und läuft dort in ner endlossschleife statt, in die endlosschleife im programm zu springen.

    Nur woran könnte das ganze liegen?

    Um das Programm vielleicht mal lauffähig zu sehen hötte ich den SBC-simulator + debugger: http://mpt3.et-inf.fho-emden.de/mnp/mnp.html
    zu finden unter simulation, wenn sich mal jemand nen bild in der simulation von dem programm machen möchte :p

    Habs aber auch schon auf dem SBC-86 drauflaufen gehabt und da trat der selbe fehler auf...



  • Kann es sein, dass euer SBC-Dingens mit einer 8086/186-CPU laeuft? Die kennt nur shift-Befehle mit der fixen Laenge 1, also zB. shr cx, 1 - davon brauchst du dann eben 4 hintereinander.



  • hm das werde ich doch gleich mal testen,
    ist in der tat nen 8086.

    hab schon vermutet das es an dem befehl irgendwo hakt

    edit:

    Vielen dank jetzt tut es, was es soll 😉


Anmelden zum Antworten