【问题标题】:How do I write MIPS code for vector multiplication如何为向量乘法编写 MIPS 代码
【发布时间】:2020-02-19 21:33:07
【问题描述】:

定义向量mul(vector v, float t)。它通过将向量乘以 t 返回一个向量。

如果a=4i+3j+12kmul(a,0.5) 将返回2i+1.5j+6k

这是我写的代码:

.globl main
.text

main:
    la $s0,t                 #loading t into s1
    lw $s1,0($s0)             
    ori $s2,$zero,0     
    la $s3,v
    #la $s0,v
    #lw $s3,0($s0)
    la $s0,s
    lw $s4,0($s0)
    jal f

f:
    #if <cond>
    bge $s2,$s4,DONE
    #<for body>
    lw $s5, 0($s3)
    mul $s3,$s3,$s1 
    li $v0,10
    syscall
    j UPDATE

UPDATE:
    addi $s2,$s2,1    #i=i+1
    addi $s3,$s3,4    #moving address 4 bytes since int
    j f

DONE:

    li $v0,10
    syscall
    .data
    s: .word 3
    v: .word 4 3 12         #hard coding vector coefficients
    t: .word 2              #value to be multiplied by

当我在 SPIM 模拟器上运行它时,寄存器不会产生任何值。我的代码是错误的还是我需要添加一些东西?

【问题讨论】:

    标签: cpu-architecture cpu-registers mips32 qtspim smips


    【解决方案1】:
        mul $s3,$s3,$s1 : this instruction is wrong because $s3 register contains the address of the vector and no the value .
    

    li $v0,10 ; syscall 并在跳转到 UPDATE 之前删除这些行。

    否则,一个程序只会乘一次

    .data
      s: .word 3
      v: .word 14 3 12         #hard coding vector coefficients
      t: .word 2              #value to be multiplied by
    
    .globl main
    .text
    
    main:
      la $s0,t                 #loading t into $s0
       lw $s1,0($s0)             # $s1=2          
       ori $s2,$zero,0           # $s2=0
       la $s3,v                 # loading v into $s3
       li $s7,0
    
       la $s0,s                 # loading s into $s0
      lw $s4,0($s0)           # $s4 = 3
      j f
    
     f:
      #if <cond>
      bge $s2,$s4,DONE        
      #<for body>
      lw $s5, ($s3)            # $s5= 4
      mulu $s5,$s5,$s1 
      addu $s7,$s7,$s5         # result stored into $s7
    
     j UPDATE
    
    UPDATE:
      addiu $s2,$s2,1    #i=i+1
      addiu $s3,$s3,4    #moving address 4 bytes since int
      j f
    
    DONE:
    
      li $v0,10
      syscall
    

    【讨论】:

    • 非常感谢!我在我的电脑上试了一下,效果很好!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-15
    • 1970-01-01
    • 2022-10-05
    • 2020-08-01
    • 1970-01-01
    • 2017-02-13
    • 1970-01-01
    相关资源
    最近更新 更多