You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C代码转MIPS汇编求助:图案输出实现遇阻,附修正后可用代码

C转MIPS汇编的图案输出问题与修正

今天我花了大部分时间尝试将一段C代码正确转换为MIPS汇编,但在格式处理和图案下半部分的实现上遇到了困难——每次对代码做微小修改,图案下半部分都会出现新的错误。我希望学习相关知识,因此任何关于MIPS的技巧以及对我所犯错误的指正都将对我帮助极大!


对应的C代码

#include <stdio.h>   

int main(void) {   
    int n;                                           

    printf("Please enter the number of columns:");     
    scanf("%d",&n);                                    

    // 打印图案上半部分
    for(int i=0;i<n;i++){                              
        for(int j=0;j<i;j++) {                         
            printf(" ");                               
        }   
        for(int k=1;k<=n-i;k++){                       
            printf("%d", k);                           
        }   
        printf("\n");                                  
    }   

    // 打印图案下半部分
    for(int i=1;i<n;i++){                              
        for(int j=1;j<n-i;j++){                        
            printf(" ");                               
        }   
        for(int k=1;k<=i+1;k++){                       
            printf("%d", (i+2 - k));                   
        }   
        printf("\n");                                  
    } 

    return 0;                                          
}  

最初尝试的MIPS汇编代码

.data

prompt: .asciiz "Please enter the number of Columns: "
s: .asciiz " "
n: .asciiz "\n"

.text
main:
li $v0, 4
la $a0, prompt
syscall

li $v0,5
syscall
move $s0, $v0 #$s0 存储 N
li $s3, 0   #$s3 存储 I
li $s4, 0   #$s4 存储 J
li $s5, 1   #$s5 存储 K
add $s2, $zero, $s0 #存储 N-i

li $s2, 0
add $s2, $zero, $s0 
addi $s2, $s2, 1
sub $s2, $s2, $s3

for1:

blt  $s0,$s3, bottom

addi $s3, $s3, 1

li $s4, 0

j for2

for2:
blt  $s3, $s4,for3

li $v0, 4
la $a0, s
syscall

addi $s4, $s4, 1
li $s2, 0
add $s2, $zero, $s0 
addi $s2, $s2, 1
sub $s2, $s2, $s3
li $s5 , 1
j for2

for3:
blt $s2, $s5,newline1
li $t0, 0
add $t0, $zero, $s5
li $v0, 1
move $a0, $t0
syscall
li $t0, 0
addi $s5, $s5, 1

j for3

bottom:
li $s3, 1   #$s3 存储 I
li $s4, 1   #$s4 存储 J
li $s5, 1   #$s5 存储 K
add $s2, $zero, $s0 #存储 N-i

addi $s2, $s2, 1
sub $s2, $s2, $s3

for4:
blt  $s0,$s3, exit

addi $s3, $s3, 1
li $s4, 0
li $s2, 0
add $s2, $zero, $s0 
sub $s2, $s2, $s3

j for5

for5:
blt  $s2, $s4,for6

li $v0, 4
la $a0, s
syscall

addi $s4, $s4, 1
li $t2, 1
addi $t2, $s3, 0

li $s5 , 1
j for5

for6:
blt $t2, $s5,newline2

li $t3, 2
addi $t3,$s3, 0
sub $t3,$t3,$s5
li $v0, 1
move $a0, $t3
syscall
addi $s5, $s5, 1

j for6

newline1:
li $v0, 4
la $a0, n
syscall
j for1
newline2:
li $v0, 4
la $a0, n
syscall
j for4

exit:
li $v0, 10
syscall

修正后的可用MIPS汇编代码

.data

prompt: .asciiz "Please enter the number of Columns: "
s: .asciiz " "
n: .asciiz "\n"

.text
main:
li $v0, 4
la $a0, prompt
syscall

li $v0,5
syscall
move $s0, $v0 #$s0 存储 N
li $s3, 0   #$s3 存储 I
li $s4, 0   #$s4 存储 J
li $s5, 1   #$s5 存储 K
add $s2, $zero, $s0 #存储 N-i

li $s2, 0
add $s2, $zero, $s0 
addi $s2, $s2, 1
sub $s2, $s2, $s3

for1:

ble  $s0,$s3, bottom

li $s4, 0

j for2

for2:
blt  $s3, $s4,for3

li $v0, 4
la $a0, s
syscall

addi $s4, $s4, 1

li  $s2, 0
add $s2, $s0, 0
sub $s2, $s2, $s3
li $s5 , 1

j for2

for3:
blt $s2, $s5,newline1
li $t0, 0
add $t0, $zero, $s5
li $v0, 1
move $a0, $t0
syscall
li $t0, 0
addi $s5, $s5, 1

j for3

bottom:
li $s3,1    #$s3 存储 I
li $s4, 1   #$s4 存储 J
li $s5, 1   #$s5 存储 K
li  $s2, 0
add $s2, $s0, 0 #存储 N-i
j for4

for4:
blt $s0, $s3, exit

li  $s2, 0
add $s2, $s0, 0
sub $s2, $s2, $s3

li $s4, 1

j for5

for5:
blt  $s2, $s4,for6

li $v0, 4
la $a0, s
syscall
addi $s4, $s4, 1

li $t1, 1
li $t2, 2
add $t1, $t1, $s3
add $t2, $t2,$s3 

li $s5, 1

j for5

for6:

blt $t1, $s5,newline2

li $t3, 0
sub $t3, $t2,$s5
li $v0, 1
move $a0, $t3
syscall
addi $s5, $s5, 1

j for6

newline1:
addi $s3, $s3, 1
li $v0, 4
la $a0, n
syscall
j for1
newline2:
addi $s3, $s3, 1
li $v0, 4
la $a0, n
syscall

j for4

exit:
li $v0, 10
syscall

内容的提问来源于stack exchange,提问作者Raiu YMD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 00:55:54