.data __str0: .asciiz "Enter program:" .text .data .align 2 input_program: .space 200000 .text .data .align 2 data: .space 200000 .text .data .align 2 data_pointer: .space 4 .text .globl initialize initialize: addi $sp, $sp, -4 addi $s0, $sp, 0 li $s1, 0 sw $s1, 0($s0) move $s0, $s1 __L0: lw $s0, 0($sp) li $s1, 200000 slt $s0, $s0, $s1 beq $s0, $zero, __L1 la $s0, data lw $s1, 0($sp) add $s0, $s0, $s1 li $s1, 0 sll $s1, $s1, 24 sra $s1, $s1, 24 sb $s1, 0($s0) move $s0, $s1 la $s0, input_program lw $s1, 0($sp) add $s0, $s0, $s1 li $s1, 0 sll $s1, $s1, 24 sra $s1, $s1, 24 sb $s1, 0($s0) move $s0, $s1 addi $s0, $sp, 0 lw $s1, 0($sp) li $s2, 1 add $s1, $s1, $s2 sw $s1, 0($s0) move $s0, $s1 j __L0 __L1: la $s0, data_pointer la $s1, data li $s2, 100000 add $s1, $s1, $s2 sw $s1, 0($s0) move $s0, $s1 addi $sp, $sp, 4 lw $ra, 4($sp) jr $ra .globl match_bracket match_bracket: addi $sp, $sp, -4 addi $s0, $sp, 0 li $s1, 0 sw $s1, 0($s0) move $s0, $s1 __L2: lw $s0, 0($sp) sne $s0, $s0, $zero bne $s0, $zero, __L5 lw $s1, 4($sp) lb $s1, 0($s1) li $s2, 93 sne $s1, $s1, $s2 sne $s1, $s1, $zero move $s0, $s1 __L5: beq $s0, $zero, __L3 lw $s0, 4($sp) lb $s0, 0($s0) li $s1, 91 seq $s0, $s0, $s1 beq $s0, $zero, __L6 addi $s0, $sp, 0 lw $s1, 0($sp) li $s2, 1 add $s1, $s1, $s2 sw $s1, 0($s0) move $s0, $s1 __L6: lw $s0, 4($sp) lb $s0, 0($s0) li $s1, 93 seq $s0, $s0, $s1 beq $s0, $zero, __L7 addi $s0, $sp, 0 lw $s1, 0($sp) li $s2, 1 sub $s1, $s1, $s2 sw $s1, 0($s0) move $s0, $s1 __L7: addi $s0, $sp, 4 lw $s1, 4($sp) li $s2, 1 add $s1, $s1, $s2 sw $s1, 0($s0) move $s0, $s1 j __L2 __L3: lw $s0, 4($sp) sw $s0, 8($sp) addi $sp, $sp, 4 lw $ra, 8($sp) jr $ra addi $sp, $sp, 4 lw $ra, 8($sp) jr $ra .globl interpret interpret: addi $sp, $sp, -4 __L8: lw $s0, 4($sp) lb $s0, 0($s0) beq $s0, $zero, __L11 lw $s1, 4($sp) lb $s1, 0($s1) li $s2, 93 sne $s1, $s1, $s2 sne $s1, $s1, $zero move $s0, $s1 __L11: beq $s0, $zero, __L9 lw $s0, 4($sp) lb $s0, 0($s0) li $s1, 62 seq $s0, $s0, $s1 beq $s0, $zero, __L12 la $s0, data_pointer la $s1, data_pointer lw $s1, 0($s1) li $s2, 1 add $s1, $s1, $s2 sw $s1, 0($s0) move $s0, $s1 j __L13 __L12: lw $s0, 4($sp) lb $s0, 0($s0) li $s1, 60 seq $s0, $s0, $s1 beq $s0, $zero, __L14 la $s0, data_pointer la $s1, data_pointer lw $s1, 0($s1) li $s2, 1 sub $s1, $s1, $s2 sw $s1, 0($s0) move $s0, $s1 j __L15 __L14: lw $s0, 4($sp) lb $s0, 0($s0) li $s1, 43 seq $s0, $s0, $s1 beq $s0, $zero, __L16 la $s0, data_pointer lw $s0, 0($s0) la $s1, data_pointer lw $s1, 0($s1) lb $s1, 0($s1) li $s2, 1 add $s1, $s1, $s2 sll $s1, $s1, 24 sra $s1, $s1, 24 sb $s1, 0($s0) move $s0, $s1 j __L17 __L16: lw $s0, 4($sp) lb $s0, 0($s0) li $s1, 45 seq $s0, $s0, $s1 beq $s0, $zero, __L18 la $s0, data_pointer lw $s0, 0($s0) la $s1, data_pointer lw $s1, 0($s1) lb $s1, 0($s1) li $s2, 1 sub $s1, $s1, $s2 sll $s1, $s1, 24 sra $s1, $s1, 24 sb $s1, 0($s0) move $s0, $s1 j __L19 __L18: lw $s0, 4($sp) lb $s0, 0($s0) li $s1, 46 seq $s0, $s0, $s1 beq $s0, $zero, __L20 addi $sp, $sp, -16 la $s0, printc sw $s0, 12($sp) la $t0, __L22 sw $t0, 8($sp) la $t0, data_pointer lw $t0, 0($t0) sw $t0, 0($sp) lw $t0, 0($sp) lb $t0, 0($t0) sb $t0, 0($sp) lw $t0, 12($sp) addi $sp, $sp, 0 jr $t0 __L22: addi $sp, $sp, 0 lw $t0, 4($sp) lw $s0, 12($sp) move $s0, $t0 addi $sp, $sp, 16 j __L23 __L20: lw $s0, 4($sp) lb $s0, 0($s0) li $s1, 44 seq $s0, $s0, $s1 beq $s0, $zero, __L24 addi $sp, $sp, -16 la $s0, data_pointer lw $s0, 0($s0) la $s1, inputc sw $s1, 12($sp) sw $s0, 8($sp) la $t0, __L26 sw $t0, 4($sp) lw $t0, 12($sp) addi $sp, $sp, 0 jr $t0 __L26: addi $sp, $sp, 0 lw $t0, 0($sp) lw $s0, 8($sp) lw $s1, 12($sp) move $s1, $t0 sb $s1, 0($s0) move $s0, $s1 addi $sp, $sp, 16 j __L27 __L24: lw $s0, 4($sp) lb $s0, 0($s0) li $s1, 91 seq $s0, $s0, $s1 beq $s0, $zero, __L28 addi $s0, $sp, 4 lw $s1, 4($sp) li $s2, 1 add $s1, $s1, $s2 sw $s1, 0($s0) move $s0, $s1 addi $sp, $sp, -20 addi $s0, $sp, 20 la $s1, match_bracket sw $s1, 16($sp) sw $s0, 12($sp) la $t0, __L30 sw $t0, 8($sp) lw $t0, 24($sp) sw $t0, 0($sp) lw $t0, 16($sp) addi $sp, $sp, 0 jr $t0 __L30: addi $sp, $sp, 0 lw $t0, 4($sp) lw $s0, 12($sp) lw $s1, 16($sp) move $s1, $t0 sw $s1, 0($s0) move $s0, $s1 addi $sp, $sp, 20 __L31: la $s0, data_pointer lw $s0, 0($s0) lb $s0, 0($s0) beq $s0, $zero, __L32 addi $sp, $sp, -16 la $s0, interpret sw $s0, 12($sp) la $t0, __L34 sw $t0, 8($sp) lw $t0, 20($sp) sw $t0, 0($sp) lw $t0, 12($sp) addi $sp, $sp, 0 jr $t0 __L34: addi $sp, $sp, 0 lw $t0, 4($sp) lw $s0, 12($sp) move $s0, $t0 addi $sp, $sp, 16 j __L31 __L32: addi $s0, $sp, 4 lw $s1, 0($sp) sw $s1, 0($s0) move $s0, $s1 __L28: __L27: __L23: __L19: __L17: __L15: __L13: addi $s0, $sp, 4 lw $s1, 4($sp) li $s2, 1 add $s1, $s1, $s2 sw $s1, 0($s0) move $s0, $s1 j __L8 __L9: addi $sp, $sp, 4 lw $ra, 8($sp) jr $ra .globl entry entry: addi $sp, $sp, 0 addi $sp, $sp, -12 la $s0, initialize sw $s0, 8($sp) la $t0, __L36 sw $t0, 4($sp) lw $t0, 8($sp) addi $sp, $sp, 0 jr $t0 __L36: addi $sp, $sp, 0 lw $t0, 0($sp) lw $s0, 8($sp) move $s0, $t0 addi $sp, $sp, 12 addi $sp, $sp, -16 la $s0, prints sw $s0, 12($sp) la $t0, __L38 sw $t0, 8($sp) la $t0, __str0 sw $t0, 0($sp) lw $t0, 12($sp) addi $sp, $sp, 0 jr $t0 __L38: addi $sp, $sp, 0 lw $t0, 4($sp) lw $s0, 12($sp) move $s0, $t0 addi $sp, $sp, 16 addi $sp, $sp, -20 la $s0, inputs sw $s0, 16($sp) la $t0, __L40 sw $t0, 12($sp) la $t0, input_program sw $t0, 4($sp) li $t0, 20000 sw $t0, 0($sp) lw $t0, 16($sp) addi $sp, $sp, 0 jr $t0 __L40: addi $sp, $sp, 0 lw $t0, 8($sp) lw $s0, 16($sp) move $s0, $t0 addi $sp, $sp, 20 addi $sp, $sp, -16 la $s0, interpret sw $s0, 12($sp) la $t0, __L42 sw $t0, 8($sp) la $t0, input_program sw $t0, 0($sp) lw $t0, 12($sp) addi $sp, $sp, 0 jr $t0 __L42: addi $sp, $sp, 0 lw $t0, 4($sp) lw $s0, 12($sp) move $s0, $t0 addi $sp, $sp, 16 addi $sp, $sp, 0 lw $ra, 4($sp) jr $ra