Так что я отлаживаю некоторый код и продолжаю получать странный результат. Я перебираю массив и печатаю каждый элемент на консоль. После того, как я напечатал каждый элемент, я хочу напечатать строку, состоящую только из символа "\ n", символа новой строки. Я запускаю код в QtSpim. Когда я это сделаю, выведите новую строку И следующую строку, str3. Я просто хочу, чтобы он напечатал str2, поэтому у меня есть следующий готовый элемент для печати на новой строке. Кто-нибудь столкнется с такой проблемой или увидит что-то не так с моим кодом.
Проблема со вторым системным вызовом в функции print_sorted_data
.data
x: .word 1,2,3,4,5,6,7,8 #OR x: .space 32 #since x contains 8 words,we have to reserve 32 bytes.
min: .word 0
max: .word 0
mean: .word 0
str1: .ascii "\n The Min, Max and Mean of the array are : \n "
str2: .ascii " \n"
str3: .ascii "Enter Number: \n"
.text
#=======================================================================
main:
#=======================================================================
#Push $ra into stack
addi $sp, $sp, -4
sw $ra, 0($sp)
#-------------------------------------------------------------------
#***jal read_data
#***nop
#-------------------------------------------------------------------
la $a0, x
ori $a1, $0, 8
#-------------------------------------------------------------------
jal print_sorted_data
nop
#-------------------------------------------------------------------
jr $ra
nop
#=======================================================================
read_data:
#=======================================================================
#reading data from console , storing it in memory
#initialization for the counter of the loop
addi $t1, $0, 0 ## $t1<-stores counter for loop.
## don't need addi $t2, $0, 8 ## max value of loop
#lodad The base adderss of array
la $t0, x
check_cond1: ##############################
#check condition of the loop, if not met branch to read_done
slti $t3, $t1, 8
beq $t3, $0, read_done1
nop
#read an int from console and store it in &x[i]
ori $v0, $0, 4 ## print " enter number" to screen
la $a0, str3 ## changed lw to la
syscall
ori $v0, $0, 5
syscall
sw $v0, 0($t0)
#update both counter of the loop and pointer to the next element in the array
addi $t1, $t1, 1
addi $t0, $t0, 4
j check_cond1
nop
read_done1:
jr $ra
nop
#=======================================================================
#printing the sorted data
print_sorted_data:
#=======================================================================
#initialization for the counter of the loop
#lodad The base adderss of array
ori $t9, $a0, 0 ## We get base address in $a0
ori $t0, $0, 0 ##counter for loop
check_cond2: ##############################
#check condition of the loop, if not met branch to print_done1
slt $t1, $t0, $a1
beq $t1,$0, print_done1
#print x[i]
sll $t2,$t0 ,2 ## Multiply counter by 4 for offset
add $t2, $t2, $t9 ## Add to base address
ori $v0, $0, 1 ## set syscall up to print integer
lw $a0, 0($t2)
syscall ## not sure if this is right func name## it is
#go to next line by printing "\n"
ori $v0, $0, 4 ## set syscall up to print string
la $a0, str2
syscall
#update both counter of the loop and pointer to the next element in the array
##Dont think i have to update array. It does that in the loop.
add $t0, $t0, 1
j check_cond2
nop
print_done1: #######################
jr $ra
nop
** При дальнейшем расследовании .ascii должен быть .asciiz Кто-нибудь знает разницу?