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
相关产品推荐
相关产品推荐

