Herzlich Willkommen bei XALAX.DE

Assembler Programmieren - LC2

Hier sind einige einfache Assembler Programme. Zum testen einfach den LC2 benutzen.

Zu aller erst die Aufgabenstellung:

  1. In drei aufeinanderfolgenden Speicherstellen (z0, z1, z2) seien die Stellen einer Dezimalzahl im Bereich von 0 bis 999 abgelegt. Schreiben Sie ein Programm, das die entsprechende Binärzahl ermittelt. Speichern Sie diese in einer Speicherzelle mit dem Label bin und geben Sie das Ergebnis auf das Ausgaberegister aus.
    z0: def 4
    z1: def 1
    z2: def 5
    bin: def 0 %nach dem Ausführen ist hier 514 zu finden

    Zur Lösung

  2. Konvertieren Sie eine Zahl, die unter dem Label bin gespeichert wurde in eine Darstellung analog der Eingabe von 2.1. Gehen Sie davon aus, daß die Zahl im Bereich von 0 bis 999 liegt.
    bin: def 203
    z0: def 0 %nach dem Ausführen 3
    z1: def 0 %nach dem Ausführen 0
    z2: def 0 %nach dem Ausführen 2

    Zur Lösung

  3. Suchen Sie aus einem Speicherbereich, der ab dem Label mem gespeichert ist und n Elemente enthält die größte und die kleinste Zahl heraus. Speichern Sie diese Werte in den Speicherzellen max bzw. min.
    n: def 6
    mem: def 34
    def 12
    def 2
    def -15
    def 83
    def 199
    min: def 32767
    max: def -32768

    Zur Lösung

  4. Zählen Sie das Vorkommen eines Bitmusters mask in einer Zahlenfolge der Länge n, die ab mem gespeichert wurde. Der Zählerstand soll danach ins Ausgaberegister geschrieben werden.
    mask: def 0110B
    n: def 6
    mem: def 1830
    def 339
    def 19
    def 149
    def 231
    def 246

    Zur Lösung

 

Die Lösungen:

  1. Aufgabe: Zur Aufgabenstellung
    load r1,[z0]
    load r2,[z1]
    load r3,[z2]
    load r4,[z100]
    load r5,[z10]

    lp100: add r1,r4
    sub r3,1
    jz lp10
    jmp lp100
    lp10: add r1,r5
    sub r2,1
    jz output
    jmp lp10
    output: out r1
    halt

    % jetzt folgen noch die Definitionen
    z0: def 4
    z1: def 1
    z2: def 5
    z10: def 10
    z100: def 100
    bin: def 0
    %nach dem Ausführen ist hier 514 zu finden

  2. Aufgabe: Zur Aufgabenstellung
    load r1,[z0]
    load r2,[z1]
    load r3,[z2]
    load r4,[bin]

    div100: sub r4,100
    js div10
    add r1,1
    jmp div100
    div10: sub r4,10
    js ende
    add r2,1
    jmp div10
    ende: add r3,r4
    halt
    % jetzt folgen noch die Definitionen
    bin: def 203
    z0: def 0
    z1: def 0
    z2: def 0
    z100: def 100
    z10: def 10

    % nach dem Ausführen 3
    % nach dem Ausführen 0
    % nach dem Ausführen 2

  3. Aufgabe: Zur Aufgabenstellung
    mov r7,r0
    mov r1,r0
    load r3,[min]
    load r4,[max]
    add r1,mem
    % r7 zum rechnen
    % r1 beinhaltet speicherstelle von mem


    % speicherstelle von mem
    loop: load r2,[r1]
    or r2,r2
    jz ende
    add r1,1
    mov r7,r2
    sub r7,r3
    js minj
    mov r7,r4
    sub r7,r2
    js maxj
    jmp loop
    % guckt nach min
    % ist r2=0?





    % max
    minj: mov r3,r2
    mov r7,r4
    sub r7,r2
    js maxj
    jo maxj
    jmp loop
    % speichert minimum
    % ist min auch max?

    %wenn max=-32768
    maxj: mov r4,r2
    jmp loop
    %speichert maximum
    ende: halt

    % jetzt folgen noch die Definitionen

    n:
    min:
    max:
    mem:

    def 6
    def 32767
    def -32768
    def 34
    def 12
    def 2
    def -15
    def 83
    def 199

  4. Aufgabe: Zur Aufgabenstellung
    % r1 maske kopie;
    % r2 stelle speicher von mem r3 mem;
    % r4 maske original;r6 zaehler;
    mov r2,r0
    mov r7,r0
    add r2,mem
    load r3,[r2]
    load r4,[mask]

    % stelle des speicher der nä. zahl
    mov r1,[mask]
    or r3,r3
    jz ende
    and r1,r3
    shr r3,1
    sub r1,r4
    or r1,r1
    jz inc
    jmp loop
    add r7,1
    mov r1,[mask]
    jmp loop
    out r7
    halt

    % jetzt folgen noch die Definitionen
    mask:
    n:
    mem:
    def 0110B
    def 6
    def 20
    def 339
    def 19
    def 149
    def 231
    def 246
Letzte Änderung: 03.01.2008