You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
442 lines
5.7 KiB
442 lines
5.7 KiB
.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
|