#Robert Opalenik #Student Lab 3 .data #In Lab lstk: .asciiz "Loading stack\n" ldstk: .asciiz "Loaded stack\n" ustk: .asciiz "Unloading stack: \n" rtrn: .asciiz "\n" ulstk: .asciiz "Stack unloaded\n\n\n" #Homework inputa: .asciiz "Input A: " inputb: .asciiz "Input B: " soln: .asciiz "aa - ab + 8a - 10b + 19 = " .text main: #In Lab li $v0, 4 #load print strings code la $a0, lstk #load string syscall #print addi $t0, $zero, 1 #i = 1 loopstart: subu $sp, $sp, 4 #increment stack pointer sw $t0, ($sp) #store i to stack addi $t0, $t0, 1 #i++ blt $t0, 11, loopstart #loop if i < 11 li $v0, 4 #load print strings code la $a0, ldstk #load string syscall #print li $v0, 4 #load print strings code la $a0, ustk #load string syscall #print addi $t0, $zero, 1 #i = 1 loop2start: lw $t1, ($sp) #pop to k addu $sp, $sp, 4 #decrement stack pointer li $v0, 1 #load int printer move $a0, $t1 #a0 = k syscall #print li $v0, 4 #load print strings code la $a0, rtrn #load string syscall #print addi $t0, $t0, 1 #increment i blt $t0, 11, loop2start #branch if i < 11 li $v0, 4 #load print strings code la $a0, ulstk #load string syscall #print #Homework #[($sp)b][(4)a][(8)ans] subu $sp, $sp, -12 #move stack pointer sw $zero, 8($sp) li $v0, 4 #load print strings code la $a0, inputa #load string syscall #print li $v0, 5 #load int reader syscall #read int sw $v0,4($sp) #store contents of $t0 at ($sp) li $v0, 4 #load print strings code la $a0, inputb #load string syscall #print li $v0, 5 #load int reader syscall #read int sw $v0,($sp) #store contents of $t0 at ($sp) lw $t0, 4($sp) #t0 = a lw $t1, 4($sp) #t1 = a mult $t0, $t1 #hilo = aa mfhi $t1 mflo $t0 #t0 = aa lw $t1, 8($sp) #t1 = new ans add $t1, $t0, $t1 #t1 = ans + new ans sw $t1, 8($sp) #ans = new ans lw $t0, 4($sp) #t0 = a lw $t1, ($sp) #t1 = b mult $t0, $t1 #hilo = ab mfhi $t1 mflo $t0 #t0 = ab addi $t1, $zero, -1 #t1 = -1 mult $t0, $t1 #hilo = -ab mfhi $t1 mflo $t0 #t0 = -ab lw $t1, 8($sp) #t1 = new ans add $t1, $t0, $t1 #t1 = ans + new ans sw $t1, 8($sp) #ans = new ans lw $t0, 4($sp) #t0 = a addi $t1, $zero, 8 #t1 = 8 mult $t0, $t1 #hilo = 8a mfhi $t1 mflo $t0 #t0 = 8a lw $t1, 8($sp) #t1 = new ans add $t1, $t0, $t1 #t1 = ans + new ans sw $t1, 8($sp) #ans = new ans lw $t0, ($sp) #t0 = b addi $t1, $zero, 10 #t1 = 10 mult $t0, $t1 #hilo = 10b mfhi $t1 mflo $t0 #t0 = 10b addi $t1, $zero, -1 #t1 = -1 mult $t0, $t1 #hilo = -10b mfhi $t1 mflo $t0 #t0 = -ab lw $t1, 8($sp) #t1 = new ans add $t1, $t0, $t1 #t1 = ans + new ans addi $t1, $t1, 19 #t1 = 19 + new ans = final li $v0, 4 #load print strings code la $a0, soln #load string syscall #print li $v0, 1 #load int printer move $a0, $t1 #a0 = k syscall #print addu $sp,$sp,12 #Return stack pointer