это домашнее задание от класса. Цель проекта состоит в том, чтобы разделить 2 массива в какой-то опорной точке и сделать из этого «дочерний» массив. Итак, если ваша точка поворота равна 11, а ваши два массива:
1111111111111111
abcdefghijklmnop
тогда дочерний вывод будет:
111111111111mnop
прямо сейчас у меня проблемы с печатью ребенка. Вот мой исходный код:
.globl main
.data
parentOne: .space 17
parentTwo: .space 17
split: .word 0
childOne: .space 17
childTwo: .space 17
space: .asciiz "\n"
.text
main:
jal getInputOne
jal getInputTwo
jal getIndex
jal makeChildren
jal printChildOne
j endMain
##############################################################################################################
getInputOne:
li $v0, 8
la $a0, parentOne
li $a1, 17
syscall
addi $v0, $zero, 4 # print_string syscall
la $a0, space # load address of the string
syscall
jr $ra
##############################################################################################################
getInputTwo:
li $v0, 8
la $a0, parentTwo
li $a1, 17
syscall
addi $v0, $zero, 4 # print_string syscall
la $a0, space # load address of the string
syscall
jr $ra
##############################################################################################################
getIndex:
li $v0, 5
syscall
sw $v0, split
jr $ra
##############################################################################################################
makeChildren:
la $s0, parentOne
la $s1, parentTwo
la $a0, childOne
la $a1, childTwo
li $s2, 0 #intial counter
li $s3, 17 #end counter
lw $s4, split #split point
childLoop:
slt $t1, $s2, $s3
beq $t1, $0, endChildLoop
if:
slt $t1, $s2, $s4 # i<pivot
beq $t1, $0, else # not less than pivot
lb $a0, ($s0) #load childOne[i] <-- parentOne[i]
lb $a1, ($s1) #load childTwo[i] <-- parentTwo[i]
j endif
else:
lb $a0, ($s1) #load childOne[i] <-- parentTwo[i]
lb $a1, ($s0) #load childTwo[i] <-- parentOne[i]
endif:
#li $v0, 11 #print character
#syscall
addi $s0, $s0, 1 #increment parent1 array
addi $s1, $s1, 1 #increment parent2 array
addi $a0, $a0, 1 #increment child array
addi $a1, $a1, 1 #increment child2 array
addi $s2, $s2, 1 #counter++
j childLoop
endChildLoop:
la $a0, childOne
li $v0, 1
syscall
jr $ra
##############################################################################################################
printChildTwo:
la $a0, childOne
li $v0, 4
syscall
jr $ra
endMain:
Я думаю, что происходит то, что на самом деле ничего не сохраняется в реестре childOne, но я не уверен, почему. Я загрузил адрес childOne в регистр $a0, но как только программа переходит к функции printChildOne, ничего не печатается.