155 lines
2.5 KiB
NASM
155 lines
2.5 KiB
NASM
|
|
.data
|
|
data_pointer: .word 0
|
|
.text
|
|
setup:
|
|
li $v0, 9
|
|
li $a0, 30000
|
|
syscall
|
|
|
|
la $t1, data_pointer
|
|
sw $v0, ($t1)
|
|
|
|
# t0 - current address (data_pointer)
|
|
move $t0, $v0
|
|
bf:
|
|
lb $t1, ($t0)
|
|
addi $t1, $t1, 8
|
|
sb $t1, ($t0)
|
|
lb $t1, ($t0)
|
|
beqz $t1, BF_CLOSE_1
|
|
BF_OPEN_1:
|
|
addi $t0, $t0, 1
|
|
lb $t1, ($t0)
|
|
addi $t1, $t1, 4
|
|
sb $t1, ($t0)
|
|
lb $t1, ($t0)
|
|
beqz $t1, BF_CLOSE_2
|
|
BF_OPEN_2:
|
|
addi $t0, $t0, 1
|
|
lb $t1, ($t0)
|
|
addi $t1, $t1, 2
|
|
sb $t1, ($t0)
|
|
addi $t0, $t0, 1
|
|
lb $t1, ($t0)
|
|
addi $t1, $t1, 3
|
|
sb $t1, ($t0)
|
|
addi $t0, $t0, 1
|
|
lb $t1, ($t0)
|
|
addi $t1, $t1, 3
|
|
sb $t1, ($t0)
|
|
addi $t0, $t0, 1
|
|
lb $t1, ($t0)
|
|
addi $t1, $t1, 1
|
|
sb $t1, ($t0)
|
|
subi $t0, $t0, 4
|
|
lb $t1, ($t0)
|
|
subi $t1, $t1, 1
|
|
sb $t1, ($t0)
|
|
lb $t1, ($t0)
|
|
bnez $t1, BF_OPEN_2
|
|
BF_CLOSE_2:
|
|
addi $t0, $t0, 1
|
|
lb $t1, ($t0)
|
|
addi $t1, $t1, 1
|
|
sb $t1, ($t0)
|
|
addi $t0, $t0, 1
|
|
lb $t1, ($t0)
|
|
addi $t1, $t1, 1
|
|
sb $t1, ($t0)
|
|
addi $t0, $t0, 1
|
|
lb $t1, ($t0)
|
|
subi $t1, $t1, 1
|
|
sb $t1, ($t0)
|
|
addi $t0, $t0, 2
|
|
lb $t1, ($t0)
|
|
addi $t1, $t1, 1
|
|
sb $t1, ($t0)
|
|
lb $t1, ($t0)
|
|
beqz $t1, BF_CLOSE_3
|
|
BF_OPEN_3:
|
|
subi $t0, $t0, 1
|
|
lb $t1, ($t0)
|
|
bnez $t1, BF_OPEN_3
|
|
BF_CLOSE_3:
|
|
subi $t0, $t0, 1
|
|
lb $t1, ($t0)
|
|
subi $t1, $t1, 1
|
|
sb $t1, ($t0)
|
|
lb $t1, ($t0)
|
|
bnez $t1, BF_OPEN_1
|
|
BF_CLOSE_1:
|
|
addi $t0, $t0, 2
|
|
li $v0, 11
|
|
lb $a0, ($t0)
|
|
syscall
|
|
addi $t0, $t0, 1
|
|
lb $t1, ($t0)
|
|
subi $t1, $t1, 3
|
|
sb $t1, ($t0)
|
|
li $v0, 11
|
|
lb $a0, ($t0)
|
|
syscall
|
|
lb $t1, ($t0)
|
|
addi $t1, $t1, 7
|
|
sb $t1, ($t0)
|
|
li $v0, 11
|
|
lb $a0, ($t0)
|
|
syscall
|
|
lb $t1, ($t0)
|
|
addi $t1, $t1, 3
|
|
sb $t1, ($t0)
|
|
li $v0, 11
|
|
lb $a0, ($t0)
|
|
syscall
|
|
addi $t0, $t0, 2
|
|
li $v0, 11
|
|
lb $a0, ($t0)
|
|
syscall
|
|
subi $t0, $t0, 1
|
|
lb $t1, ($t0)
|
|
subi $t1, $t1, 1
|
|
sb $t1, ($t0)
|
|
li $v0, 11
|
|
lb $a0, ($t0)
|
|
syscall
|
|
subi $t0, $t0, 1
|
|
li $v0, 11
|
|
lb $a0, ($t0)
|
|
syscall
|
|
lb $t1, ($t0)
|
|
addi $t1, $t1, 3
|
|
sb $t1, ($t0)
|
|
li $v0, 11
|
|
lb $a0, ($t0)
|
|
syscall
|
|
lb $t1, ($t0)
|
|
subi $t1, $t1, 6
|
|
sb $t1, ($t0)
|
|
li $v0, 11
|
|
lb $a0, ($t0)
|
|
syscall
|
|
lb $t1, ($t0)
|
|
subi $t1, $t1, 8
|
|
sb $t1, ($t0)
|
|
li $v0, 11
|
|
lb $a0, ($t0)
|
|
syscall
|
|
addi $t0, $t0, 2
|
|
lb $t1, ($t0)
|
|
addi $t1, $t1, 1
|
|
sb $t1, ($t0)
|
|
li $v0, 11
|
|
lb $a0, ($t0)
|
|
syscall
|
|
addi $t0, $t0, 1
|
|
lb $t1, ($t0)
|
|
addi $t1, $t1, 2
|
|
sb $t1, ($t0)
|
|
li $v0, 11
|
|
lb $a0, ($t0)
|
|
syscall
|
|
li $v0, 11
|
|
lb $a0, ($t0)
|
|
syscall
|