Assembly 以较大整数的格式分隔符打印数组

Assembly 以较大整数的格式分隔符打印数组,assembly,mips,Assembly,Mips,我有一个包含fibbonaci序列的数组。当我打印内容时,我会以以下格式进行打印: 数组[0]=1 数组[4]=5 所以除了打印数组的内容外,我还打印了一条“array[”的消息,然后是 只是打印一个寄存器计数器,然后打印最后一部分“]=”,然后打印数组的值。对于大于6的大小,这不起作用,特别是后面的部分“]=”没有打印,数组的值正在连接到索引 这是打印值的代码: .data arrayF: .word # starting address of array prompt:

我有一个包含fibbonaci序列的数组。当我打印内容时,我会以以下格式进行打印:

数组[0]=1

数组[4]=5

所以除了打印数组的内容外,我还打印了一条“array[”的消息,然后是 只是打印一个寄存器计数器,然后打印最后一部分“]=”,然后打印数组的值。对于大于6的大小,这不起作用,特别是后面的部分“]=”没有打印,数组的值正在连接到索引

这是打印值的代码:

.data
    arrayF: .word # starting address of array
    prompt: .asciiz "Enter value of N: "
    stringPartTwo: .asciiz "] = "
    stringPartOne: .asciiz "array["

.text
    start:
        # for printing the prompt
        li $v0, 4
        la $a0, prompt
        syscall

        # getting N from user
        li $v0, 5
        syscall
        move $t0, $v0 # putting N's value in $t0

        # Loading the beginning address of array into $a1 and $a2
        la $a1, arrayF
        addi $t1, $zero, 0 # A[i - 2]
        addi $t2, $zero, 0 # A[i - 1]
        addi $t3, $zero, 1 # A[i]
        addi $t4, $t0, 0 # Saves size of array in another register for later subroutine


   loop1:
        beq $t0, 0, done # Checking if size reached to 0
        subi $t0, $t0, 1 # Decrementing size for next iteration
        sw $t3, ($a1) # Storing A[i] in the array
        addi $a1, $a1, 4 # Accessing next element in array
        addi $t1, $t2, 0 # Moving A[i - 1] to A[i - 2] 
        addi $t2, $t3, 0 # Moving A[i] to A[i - 1]
        add $t3, $t2, $t1 # Calculating new A[i] 
        j loop1

    done:
        la $a1, arrayF # Loading base address
        addi $t1, $zero, 0 # Counter for subroutine

   loop2:
        beq $t1, $t4, finish # done printing if reached array's length
        lw $t2, ($a1) # loading the value in A[i] to $t2

        # printing "array["
        li $v0, 4
        la $a0, stringPartOne
        syscall

        # print index
        li $v0, 1 
        move $a0, $t1
        syscall 

        # printing "] = "
        li $v0, 4
        la $a0, stringPartTwo
        syscall

        # print value of array
        li $v0, 1 
        move $a0, $t2
        syscall 

        # printing new line
        addi $a0, $0, 10     #put newline in a0
        addi $v0, $0, 11     #print character in a0
        syscall


        addi $t1, $t1, 1 # incrementing counter
        addi $a1, $a1, 4 # accessing next element
        j loop2
输出剪报:


您只为数组分配了一个字(4字节)的空间。如果尝试存储的内容超过此范围,则首先会出现
prompt
,然后是
stringPartTwo
stringPartOne
,具体取决于您尝试存储的单词数量

您需要为阵列分配更多内存,例如:

arrayF: .space 64   # allocate 64 bytes (16 words)

您只为数组分配了一个字(4字节)的空间。如果尝试存储的内容超过此范围,则首先会出现
prompt
,然后是
stringPartTwo
stringPartOne
,具体取决于您尝试存储的单词数量

您需要为阵列分配更多内存,例如:

arrayF: .space 64   # allocate 64 bytes (16 words)

在我看来,您似乎没有为数组分配足够的内存来容纳7个元素,因此最终会覆盖数据部分中的其他内容。但很难说,因为你还没有向我们展示你的整个程序。数组有足够的内存来容纳7个元素,只有当我试着把它放在我上面展示的格式时,问题才会出现,如果没有所有的代码,任何人都无法重现该问题。我添加了所有的代码听起来好像您没有为数组分配足够的内存来容纳7个元素,因此您最终会覆盖数据部分中的其他内容。但是很难说,因为你还没有向我们展示你的整个程序。数组有足够的内存来容纳7个元素,只有当我试着把它放在我上面展示的格式时,问题才会出现。好吧,没有人能够在没有所有代码的情况下重现这个问题。我添加了所有代码