![]() ![]() |
![]() ![]() |
; Systemnahe Informatik 2004 2.Uebung Aufgabe 3 ; Hauptprogramm ÜB2_A3.s: ; berechnet die Summe mehrerer Zahlen. ; Zunächst wird die Anzahl der Zahlen über die Tastatur eingelesen, ; dann werden die Zahlen eingelesen und addiert. ; Eine Zwischensumme wird nach jeder Addition ausgegeben. .data Anzahl: .space 4 .text .global main main: jal liesAnzahl nop sw Anzahl,r1 sw Wert,r0 Schleife: jal liesZahl nop jal Addieren nop jal gibWertAus nop lw r1,Anzahl subi r1,r1,1 sw Anzahl,r1 bnez r1,Schleife trap 0 ; Systemnahe Informatik 2.Uebung Aufgabe 1b ; Addiert r1 zu Wert .data Wert: .word 64 Save: .word 0 .text .global Addieren Addieren: sw Save,r2 lw r2,Wert add r2,r1,r2 ; r2:=r1+Wert sw Wert,r2 lw r2,Save jr r31 nop nop ; Systemnahe Informatik 2.Uebung Aufgabe 2a ; gibt Wert aus .data Save1: .space 4 Save14: .space 4 FormatStr: .asciiz "Summe: %d\n" .align 2 TextAdr: .word FormatStr AusgabeZahl: .space 4 .text .global gibWertAus gibWertAus: sw Save1,r1 sw Save14,r14 lw r1,Wert sw AusgabeZahl,r1 addi r14,r0,TextAdr trap 5 lw r1,Save1 lw r14,Save14 jr r31 nop nop ; Systemnahe Informatik 2.Uebung Aufgabe 2b ; liest eine Zahl ein. benötigt Modul INPUT.s .data Prompt: .asciiz "Geben Sie eine Zahl ein : " .align 2 save31: .space 4 .text .global liesZahl liesZahl: nop nop sw save31,r31 addi r1,r0,Prompt jal InputUnsigned nop lw r31,save31 jr r31 nop ; liest die Anzahl ein. benötigt Modul INPUT.s .data Prompt2: .asciiz "Geben Sie die Anzahl der aufzusummierenden Zahlen ein : " .align 2 save31n: .space 4 .text .global liesAnzahl liesAnzahl: nop nop sw save31n,r31 addi r1,r0,Prompt2 jal InputUnsigned nop lw r31,save31n jr r31 nop ; INPUT.s ;*********** WINDLX Bsp.1: Einlesen eines positiven Integerwerts ************* ;----------------------------------------------------------------------------- ;Unterprogrammaufruf bei Symbol InputUnsigned ;Erwartet in R1 die Adresse eines mit 0 abgeschlossenen Prompt-Strings ;Liefert in R1 den eingelesenen, positiven Integerwert zurueck. ;Veraendert die Register R1, R13, R14 ;----------------------------------------------------------------------------- .data ;*** Daten für Read-Trap ReadBuffer: .space 80 ReadPar: .word 0,ReadBuffer,80 ;*** Daten für Printf-Trap PrintfPar: .space 4 SaveR2: .space 4 SaveR3: .space 4 SaveR4: .space 4 SaveR5: .space 4 .text .global InputUnsigned InputUnsigned: ;*** Registerwerte sichern sw SaveR2,r2 sw SaveR3,r3 sw SaveR4,r4 sw SaveR5,r5 ;*** Prompt ausgeben sw PrintfPar,r1 addi r14,r0,PrintfPar trap 5 ;*** Trap-3 zum Einlesen einer Zeile aufrufen addi r14,r0,ReadPar trap 3 ;*** Zahl ermitteln addi r2,r0,ReadBuffer addi r1,r0,0 addi r4,r0,10 ;Dezimalsystem Loop: ;*** Bis das Zeilenende erkannt wird Zeichen als Ziffern beh. lbu r3,0(r2) seqi r5,r3,10 ;LF -> Exit bnez r5,Finish subi r3,r3,48 ;´0´ multu r1,r1,r4 ;Shift um eine Dezimalstelle add r1,r1,r3 ;Neue Einerstelle hinzu addi r2,r2,1 ;Zeichenpointer inkrementieren j Loop Finish: ;*** Alte Registerwerte laden und zurueck lw r2,SaveR2 lw r3,SaveR3 lw r4,SaveR4 lw r5,SaveR5 jr r31 ; Return |
![]() ![]() |
![]() ![]() |