Я пытаюсь написать средство проверки дерева Risc-V: каждый узел дерева состоит из трех слов:
1) Либо 0, либо 1
2) Адрес левого узла
3) Адрес правого узла
Моя программа должна исследовать дерево и возвращать, насколько глубоко в дереве находится первый узел с 1 в качестве первого слова, вот код:
.data
tree: .word n01
n01: .word 0, n02, n03
n02: .word 0, n04, n05
n03: .word 0, n06, n07
n04: .word 0, 0, 0
n05: .word 0, 0, 0
n06: .word 1, 0, 0
n07: .word 0, 0, 0
.text
lw a0, tree
jal altezza
addi a0, a0, -1
li a7, 1
ecall
li a7, 10
ecall
altezza:
bne a0, zero, altezza_ric
jalr zero, ra, 0
altezza_ric:
addi sp, sp, -12
lw t1, 0(a0)
sw ra, 0(sp)
bne t1, zero, skip_numb
sw a0, 4(sp)
lw a0, 4(a0)
jal altezza
sw a0, 8(sp)
lw a0, 4(sp)
lw a0, 8(a0)
jal altezza
lw t0, 8(sp)
bne a0, zero, scelta
mv a0, t0
bne a0, zero, scelta
jal skip
scelta:
ble a0,t0,skip_add
mv a0, t0
skip_add:
addi a0, a0, 1 #ad a0 inremento 1
skip: lw ra, 0(sp)
addi sp, sp, 12
jalr zero, ra, 0
skip_numb:
add a0, zero, zero
jal skip_add