簡體   English   中英

用於簡單 for 循環的 MIPS 匯編

[英]MIPS assembly for a simple for loop

我需要將此 C 代碼轉換為 MIPS 程序集。 這是 C 代碼:

int tmp = 0; 
for (int  j = 0; j < 15; ++j) 
     tmp = tmp * 2 + 3

這是我的 MIPS 匯編代碼。 是正確的翻譯嗎? 如果您看到任何錯誤,我真的很想知道。

# tmp = $v0
# j = $t0

.globl main

 main:
    li $v0,0

loop:
    bgt $t0,15,exit
    addi $t0,$t0,1
    mul $t1,$v0,2
    add $v0,$t1, 3
    j loop  

exit:

你的循環從 0 到 14,所以你的 bgt 指令應該是: bgt $t0,14,exit我想。

.

您不要在循環之前將 j ($t0) 設置為零。

.data
mensage: asciiz "Text Test"
newline: asciiz "\n"
.text

# tmp = $v0
# j = $t0
 
main:
    li $t0,0
    li $t1,0
    li $t3,0
loop:
    bgt $t0,15,exit
    addi $t0,$t0,1
    j loop
    mul $t1,$t1,2
    add $t3,$t1,3  
exit:
    li $v10,0
    syscall

我也不知道你在運行什么 MIPS 模擬器,但我知道其中一些不是常量,他們要求你將它們分配給寄存器。 所以像 bgt Rsrc1, Src2, label 一樣,通常如果你在 src2 中放入一個整數,計算機會翻譯它,但我知道對於一些你會得到一個錯誤 add $v0, $t1, 3 因為它不會翻譯 add阿迪與 mul 相同。 我知道我的 SPIM 模擬器不允許這樣做。

    add $vo, $vo, $zero
    add $t0, $t0, $zero
LOOP:
    slti $t1, $t0, 15
    beq $t1, $zero, EXIT
    addi $t0, $t0, 1
    addi $t2, $zero, 2
    mul $t3, $v0, $t2
    addi $v0, $t3, 3
    j    LOOP
EXIT:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM