gpt4 book ai didi

assembly - MIPS 存储字 (sw)

转载 作者:行者123 更新时间:2023-12-04 12:27:01 27 4
gpt4 key购买 nike

我试图将一个整数存储到 $s0 中,这是在一个循环标签中。

但问题是我将打印一个整数并将其保存在 $s0 中。

我做了以下事情

sw $t7,0($s0)
addi $s0,$s0,4

我认为下面的代码允许我将每个整数存储在 $s0 中的一个槽中,但是如果我 lw,我只会得到打印的最后一个整数

下面的代码:以粗体显示,我试图存储一个单词,但就像你说的那样,它会覆盖这是一道作业题,所以我很想学习,请指点一下,下次我就知道了

        .data                               


n1: .asciiz "\n" #ASCII for a new line

.align 2



name: .asciiz "Fibonacci\n\n\n" #Lab Title and Student Name
.align 2

msg1: .asciiz "Fibonacci result " #note the space
.align 2


msg2: .asciiz " is " #note the space
.align 2

**array: .space 20 #define the array**

.text #
.globl main #declare main to be global



main:



la $a0,name #load the ram address of "name" into $a0
li $v0,4 #system call, type 4, print a string, $a0
syscall #call the "OS" to perform operation

li $t2,0 # $t2 :=0; initial value of F(n-2)
li $t1,1 # $t1 :=1; initial value of F(n-1)

li $t4,0 #index, n.

#loop is a local Variable
li $t5,11 #loading immediate preset value for $t5




**la $t7,array #load address (array) into $t7**





loop: addu $t0,$t1,$t2 # F(n) = F(n-1) + F(n-2)

**#Only print the last 5 numbers**
sub $t3,$t5,$t4
li $t6,5
bgt $t3,$t6,Printl


la $a0,msg1 # $a0 := address of message 1
li $v0,4 #system call, type 4, print a string
syscall #call the "OS"

move $a0,$t4 # $t4 contains the current value of n
li $v0,1 #system call, type 1, print an integer $a0
syscall #call the "OS"

la $a0,msg2 # $a0:=address of "msg2"
li $v0,4 #system call, type 4, print a string
syscall #call the "OS"

move $a0,$t0 # $a0 :=$t0, which is F(n)
li $v0,1 #system call, type 1, print an integer $a0
syscall #call the "OS"


**sw $s0, 4($t7)**





la $a0,n1 # $a0 := address of "n1"
li $v0,4 #system call, type 4, print a string
syscall #call the "OS"




addi $t4,1 # $t4 := $t4 + 1; increment n
move $t2,$t1 # $t2 := $t1; old F(n-2) because old F(n-1)
move $t1,$t0 # $t1 := $t0; old F(n-2) because old F(n)



beq $t5,$t4,Exit #Conditional Check | exit







j loop # branch unconditionally to loop ($t3 != 0)

Exit:
la $a0,n1 # $a0 := address of message 1
li $v0,4 #system call, type 4, print a string
syscall #call the "OS"

#la $t7,array
#li $v0,1
#sw $s0, 4($t7)
#syscall


li $v0,10 #system call, type 10, standard exit
syscall #call the "OS"

Printl:
addi $t4,1
move $t2,$t1
move$t1,$t0
j loop

最佳答案

不确定你是否还在这里。 :) 但如果你是,并且在两个学期后你仍然偶然参加 MIPS,那么这里可能会有帮助。

您已经注意到 sw $s0, 4($t7)将把$s0 的内容写入$t7 + 4 指向的地址。由于 $t7 的值永远不会改变,您将不断地将 $s0 的内容反复写入同一地址。

如果要将$s0的内容存储到以array开始的连续单词中,您将需要初始化指针,用它做您想做的事,然后递增它。

la $t7,array
loop:
# do something to set $s0
sw $s0, 0($t7)
# do something to break out of loop if condition is met
addi $t7, 4
j loop

不要忘记您已经定义了 array 20 字节 - 这只是 5 个单词。

关于assembly - MIPS 存储字 (sw),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12500405/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com