Код читает исходящую строку с указанной - PullRequest
0 голосов
/ 08 марта 2012

Так что я отлаживаю некоторый код и продолжаю получать странный результат. Я перебираю массив и печатаю каждый элемент на консоль. После того, как я напечатал каждый элемент, я хочу напечатать строку, состоящую только из символа "\ 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 Кто-нибудь знает разницу?

1 Ответ

1 голос
/ 08 марта 2012

Разница - это конечный ноль после строки, заданной .asciiz. По сути, он почти такой же, как .ascii, он добавляет только символ 0, который служит завершающим символом для строки.

Таким образом, если вы используете .ascii и не указываете конечный 0 вручную, строка объединяется со следующими данными в памяти - \n не является окончанием строки (только окончание строки).

...