【问题标题】:MIPS Problem in printing the array and get the third element multiply to 4打印数组并将第三个元素乘以 4 时出现 MIPS 问题
【发布时间】:2021-11-30 20:08:49
【问题描述】:

我是 MIPS 新手,我被困在打印阵列中,而且功能也有点混乱 这是我的代码,它适用于我猜的获取输入,但在那之后,它们显示数组并出现错误。 这是问题:

  1. 提示用户使用控制台输入一个介于 1 和 10 之间的整数

  2. 编写一个函数,用用户输入的值初始化一个由 5 个元素组成的数组。该函数必须包含以下内容

一个循环

一个分支

  1. 编写一个函数,将上面初始化的数组的第三个元素乘以数字 4。

  2. 编写一个函数,将数组的所有元素打印到控制台。第三个元素必须是其他元素的 4 倍。该函数必须包含以下内容

一个循环

一个分支

您的代码必须具有三个独立的函数(除了主要部分)和函数调用

初始化数组的函数

函数将数组的第三个元素乘以用户输入的数字

将数组打印到屏幕的功能。

.data
    array: .space 20
    prompt: .asciiz "Input 5 integers\n"
    .align 3
.text
main:
    li $v0, 4
    la $a0, prompt
    syscall
    
loop:
    beq $t0, 20, exit
    li $v0, 5
    syscall
    sw $v0, array($t0)
    add $t0, $t0, 4 #increase index
    j loop
exit: 
    jr $ra
print_loop:
    la $t1, array # get array address
    li $t2, 0 # set loop counter
    beq $t2, 5, exit_print_loop
    lw $a0, ($t1) # print value at the array pointer
    li $v0, 1
    syscall
    addi $t2, $t2, 1 # advance loop counter
    addi $t1, $t1, 4 # advance array pointer
    j print_loop # repeat the loop
exit_print_loop:
    li $v0, 10 

【问题讨论】:

  • “我猜它适用于获取输入”。你不必猜测。使用 MIPS 模拟器(如 SPIM 或 MARS)的调试功能来查看究竟发生了什么。 “并且有错误”什么错误?请更具体。
  • 如果你应该有 3 个函数,你应该有 3 个调用,3 个返回,但是这段代码中没有调用,只有一个返回。
  • 谢谢,我认为我的数组指针有问题,我重置它但它没有,所以我只是到另一个寄存器并且它工作。

标签: arrays loops assembly mips


【解决方案1】:

这是我编写的代码,非常适合我的测试。谢谢!

.data
    array: .space 20 #create an array for 5 integer
    prompt1: .asciiz "Input 5 integers from 1 to 10 \n"
    prompt2: .asciiz "\nThe array is: \n"
    prompt3: .asciiz "Third element times 4 is: "
    newLine: .asciiz "\n"
    .align 3
.text
main:
    #prompt the user input
    li $v0, 4
    la $a0, prompt1
    syscall
    jal loop 
    #Calculate and print out the result
    li $v0, 4
    la $a0, prompt3
    syscall
    jal cal
    #Print out the array
    li $v0, 4
    la $a0, prompt2
    syscall 
    addi $t1, $zero, 0 #clear t1
    jal display
    li $v0, 10
    syscall
loop:
    beq $t0, 20, exit
    li $v0, 5
    syscall
    sw $v0, array($t0)
    add $t0, $t0, 4 #increase index
    j loop
exit: 
    jr $ra
cal: 
    la $s5, array
    lw $t5, 8($s5)
    mul $t3, $t5, 4
    li $v0, 1 
    move $a0, $t3
    syscall
    jr $ra

display:
    beq $t1, 20, exit_display
    lw $t6, array($t1)
    addi $t1, $t1, 4
    #print current number
    li $v0, 1
    move $a0, $t6
    syscall
    #print the new line
    li $v0, 4
    la $a0, newLine
    syscall
    j display
exit_display:
    li $v0, 10
    syscall

【讨论】:

    猜你喜欢
    • 2022-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-31
    • 2021-01-22
    • 2014-06-24
    • 2017-11-22
    • 1970-01-01
    相关资源
    最近更新 更多