Tom Kelliher, CS 220
Nov. 24, 1997
If all goes well, I'll return your second midterm today.
:-)
Let's look at a program which reads and writes strings:
# echo.spim --- Read and echo a line from the console. Demonstrates
# syscalls for reading and writing strings.
.data
line: .space 80
prompt: .asciiz "Enter a line to be echoed.\n"
nl: .asciiz "\n"
.text
.globl main
main: li $v0, 4 # Syscall code for print string.
la $a0, prompt # Starting address of string.
syscall
li $v0, 8 # Syscall code for read string.
la $a0, line # Starting address of buffer.
li $a1, 80 # Length of buffer.
syscall
li $v0, 4
la $a0, nl
syscall
li $v0, 4
la $a0, line
syscall
li $v0, 10 # Syscall code for exit.
syscall
Note:
A program which sums n integers:
# addn.spim
# Input: A number of inputs, n, and n integers.
# Output: The sum of the n inputs.
# Demonstrates reading and writing integers.
# Register usage:
# $t0: how many integers remain to be read.
# $t1: sum of the integers read so far.
.data # Constants.
prmpt1: .asciiz "How many inputs? "
prmpt2: .asciiz "Next input: "
sum: .asciiz "The sum is "
nl: .asciiz "\n"
.text # Main.
.globl main
main: li $v0, 4 # Syscall to print prompt string.
la $a0, prmpt1
syscall
li $v0, 5 # Syscall to read an integer.
syscall # Result returned in $v0.
move $t0, $v0 # n stored in $t0.
li $t1, 0 # sum stored in $t1 -- clear it.
.globl while
while: blez $t0, endwhile # Read n integers.
li $v0, 4 # Prompt for next integer
la $a0, prmpt2
syscall
li $v0, 5 # Read next integer.
syscall
add $t1, $t1, $v0 # Increase sum by new input.
sub $t0, $t0, 1 # Decrement n.
b while
endwhile: li $v0, 4 # Print result string.
la $a0, sum
syscall
move $a0, $t1 # Print sum.
li $v0, 1
syscall
li $v0, 4 # Print a newline character.
la $a0, nl
syscall
li $v0, 10 # Syscall to exit.
syscall
Note: