![]() ![]() |
![]() ![]() |
; Systemnahe Informatik 2004 Uebung 3 Aufgabe 1 ; liest eine Zahl ein ; und schreibt alle Summen bis zu dieser Zahl ; ab Stelle 0x600 (=Summen) in den Speicher. .data Zahl: .space 4 Prompt: .asciiz "Geben Sie die Obergrenze der Summen ein: " .align 2 .data 0x600 Summen: .space 0x100 .text .global main main: addi r1,r0,Prompt jal InputUnsigned ;liest Zahl ein r1=Zahl sw Zahl,r1 add r2,r0,r0 ;r2=Summe=0 addi r3,r0,1 ;r3=N=1 addi r4,r0,Summen ;r4=SummenPtr=&Summen N_Schleife: add r2,r2,r3 ;Summe+=N sw (r4),r2 addi r4,r4,4 ;SummenPtr+=4 addi r3,r3,1 ;N++ sle r5,r3,r1 ;r5=(N lessOrEqual Zahl) bnez r5,N_Schleife nop trap 0 ;*********** 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 |
![]() ![]() |
![]() ![]() |