Assembly MIPS存储字(sw)
我试图将一个整数存储到Assembly MIPS存储字(sw),assembly,mips,Assembly,Mips,我试图将一个整数存储到$s0中,这是一个循环标签 但问题是,我将打印一个整数并将其保存在$s0中 我已经做了以下工作 sw $t7,0($s0) addi $s0,$s0,4 我原以为下面的代码允许我将每个整数存储在$s0的插槽中,但如果我lw,我只会得到打印的最后一个整数 下面的代码:用粗体表示,我试图存储一个单词,但正如您所说,它会覆盖 这是一个家庭作业问题,所以我真的很想学习,请提供一些指导,以便我下次知道 .data
$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的内容存储到从数组开始的连续字中,则需要初始化指针,执行所需操作,然后递增指针
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
不要忘记,您已经将数组定义为20个字节,即5个字。sw
将单个字存储到单个寄存器中。如果它在循环中,那么每次都用相同的值覆盖它。因此,lw
将只返回上次通过循环存储的值。那么我能做什么呢?请给我一个提示?@BlahBlah您需要更具体,发布更多代码。添加了更多代码=)很抱歉,有人有任何有用的提示吗?