Assembler (SPIM)

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Assembler (SPIM)

    hallo hab ne Aufgabe wos um Assembler geht:


    Formulieren Sie äquivalente Assemblercodes zu den folgenden kleinen Aufgaben:
    a) Addiere Register $t1 zu Register $t2 und speichere das Resultat in $t3
    b) Addiere den Inhalt des Speichers, dessen Adresse sich im Register $t3
    befindet, zu Register $t2 und speichere die Summe in Register $t2 ab.
    c) $t4 = $t3 + $t2 · ($t1 + 3)
    d) while (i < 10) {
    a = a + i;
    i = i + 3;
    }
    Verwenden Sie für i das Register $t4 und für a das Register $t5.


    Hab mir SPIM runtergeladen, aber komm nicht wirklich klar. Probleme: Wo gebe ich da denn "das Programm" ein? hab ein einfaches Assembler Programm aus dem Internet kopiert und wolltes es ausführen, aber ich bekomme die Meldung "the following symbols are undefined: main"
    Das main ist aber drin...

    Das hier wollte ich ausführen:

    .data
    value1: .word 16
    value2: .word 32
    value3: .word 48
    value4: .word 64
    .text
    main: la $t2, value1
    li $t3, 4
    lw $t5, ($t2) # (1)
    lw $t6, 4($t2) # (2)
    lw $t7, value3 # (3)
    lw $t8, value2 + 4 # (4)
    lw $t9, value1 + 8($t3) # (5)
    li $v0, 10 # exit
    syscall


    Hab ein Bild von SPIM gemacht, im rotmarkierten Bereich hab ich den obigen Quelltext eingegeben:

    [Blockierte Grafik: http://img54.imageshack.us/img54/4536/spimut5.jpg]

    Es ist auch ein Editor dabei, in den kann man aber nix eingeben?!

    Bild vom Editor:

    [Blockierte Grafik: http://img212.imageshack.us/img212/5392/spimeditoriq2.jpg]

    Hab mir schon die Spimanleitung durchgelesen, aber da steht dazu nix (die scheinen das vorauszusetzen, dass man weiß wie man damit umgehen soll)

    :(

    kann mir wer helfen? Also erstmal bei SPIM und dann noch beid er Aufgabe ganz oben :roll:

    Gruß cewbie
  • 1. Die Konsole ist kein Editor.
    2. SPIM ist ein Assembler-Simulator für die MIPS32-Architektur, bedeutet: Er simuliert eine MIPS32-RISC Architektur auf einem x86 und führt den Assemblercode aus. Ist das Absicht? Soll es der Assembler für diese Architektur sein?
    3. Speicher deinen Code in eine Textdatei.s und lade diese mal.
    4. In deinem Code fehlt die Deklarierung von main als globale Variable:

    Quellcode

    1. .data
    2. value1: .word 16
    3. value2: .word 32
    4. value3: .word 48
    5. value4: .word 64
    6. .text
    7. .globl main
    8. main: la $t2, value1
    9. li $t3, 4
    10. lw $t5, ($t2) # (1)
    11. lw $t6, 4($t2) # (2)
    12. lw $t7, value3 # (3)
    13. lw $t8, value2 + 4 # (4)
    14. lw $t9, value1 + 8($t3) # (5)
    15. li $v0, 10 # exit
    16. syscall
    Alles anzeigen
    ~ mfg SeBa

    Ich beantworte keine PMs zu Computer-/Programmierproblemen. Bitte wendet euch an das entsprechende Forum.

    [Blockierte Grafik: http://i.creativecommons.org/l/by-sa/3.0/80x15.png]
  • hallo ja SPIM ist Absicht, das muss ich benutzen. hab rausgefunden, dass ich den Quelltext als .ASM Datei speichern und in SPIM laden muss. Man sieht leider nicht viel.

    Mein aktuelles Problem:

    Addiere Register $t1 zu Register $t2 und speichere das Resultat in $t3


    Hab geschrieben:

    .text

    main: add $t1 $t2 $t3


    fehlt da nicht noch was?
  • "cewbie" schrieb:

    hab rausgefunden, dass ich den Quelltext als .ASM Datei speichern und in SPIM laden muss.

    Siehe drittens.

    "cewbie" schrieb:

    ehlt da nicht noch was?

    Kommas fehlen, es muss meiner Meinung nach so aussehen:

    Quellcode

    1. main: add $t1, $t2, $t3
    ~ mfg SeBa

    Ich beantworte keine PMs zu Computer-/Programmierproblemen. Bitte wendet euch an das entsprechende Forum.

    [Blockierte Grafik: http://i.creativecommons.org/l/by-sa/3.0/80x15.png]
  • ok habs hinbekommen, aber hab noch ne andere Aufgabe:

    Ein kleines Programm soll 2 Faktoren einlesen, sie im Format Faktor:Faktor:Produkt ausgeben. Das Programm soll logisch und gut kommentiert sein. Ein Überlauf soll verhindert werden.

    Hab das versucht mit der SPIM Doku zu machen, kommt leider ein falsches Ergebnis raus:

    # Das Programm liest 2 Zahlen ein und gibt sie aus im Format Faktor:Faktor:Produkt aus
    .data
    txt1: .asciiz "Faktor 1 = "
    txt2: .asciiz "Faktor 2 = "
    input: .ascii "Dieser Text wird nachher ueber"
    .asciiz "schrieben! "
    #
    .text
    # Eingabe...
    main: li $v0, 4 # 4: print_str
    la $a0, txt1 # Adresse des ersten Textes in $a0
    syscall
    li $v0, 5 # 5: read_int
    syscall
    move $s0,$v0
    #
    li $v0, 4 # 4: print_str
    la $a0, txt2 # Adresse des zweiten Textes in $a0
    syscall
    li $v0, 8 # 8: read_str
    la $a0, input # Adresse des einzugebenden Textes
    li $a1, 8 # maximale Laenge auf 8 begrenzen
    syscall
    # Ausgabe...

    mult $a0, $v0 # Multiplikation der Faktoren
    mflo $t1
    syscall
    li $a1, 1 # Ausgabe Faktor 1
    li $v0, 1 # Ausgabe Faktor 2
    li $t1, 1 # Ausgabe Produkt
    syscall
    li $v0, 10 # Exit
    syscall
  • Kann es sein dass du die Eingabe noch in Zahlen konvertieren musst. Du liest ja Text ein, du die hohen Zahlen im Ergebnis lassen vermuten, dass da mit Speicheradressen o.ä. gerechnet wurde
    ~ mfg SeBa

    Ich beantworte keine PMs zu Computer-/Programmierproblemen. Bitte wendet euch an das entsprechende Forum.

    [Blockierte Grafik: http://i.creativecommons.org/l/by-sa/3.0/80x15.png]