MIPS 输出对齐

问题描述

我已经为这个任务完成了整个代码,但我一生都无法弄清楚如何将它对齐到列中,以便更好地表示乘法表。寻求一些帮助,通过左对齐或类似性质的方式使此输出看起来更具可读性。

.text

main:
    move    $s0,$zero
    lw  $s1,MAXROW 
    lw  $s2,MAXCOL
    li  $t0,1
    li  $t1,1

oLoop:
    bgt $t1,$s2,done
    li  $t0,1
    li  $v0,4
    la  $a0,break
    syscall
    
iLoop:
    bgt     $t0,$s1,oLoop2  
    mul $s0,$t0,$t1
    li  $v0,1
    la  $a0,($s0)
    syscall
    li  $v0,space
    syscall
    addi    $t0,1
    b   iLoop

oLoop2:
    addi    $t1,$t1,1
    j oLoop

done:
    li  $v0,10
    syscall
    

.data

MAXROW:        .word    20
MAXCOL:        .word    16
break:         .ascii "\n"
space:         .ascii " "

电流输出

 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 
 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 
 3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 
 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 
 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 
 6 12 18 24 30 36 42 48 54 60 66 72 78 84 90 96 102 108 114 120 
 7 14 21 28 35 42 49 56 63 70 77 84 91 98 105 112 119 126 133 140 
 8 16 24 32 40 48 56 64 72 80 88 96 104 112 120 128 136 144 152 160 
 9 18 27 36 45 54 63 72 81 90 99 108 117 126 135 144 153 162 171 180 
 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 
 11 22 33 44 55 66 77 88 99 110 121 132 143 154 165 176 187 198 209 220 
 12 24 36 48 60 72 84 96 108 120 132 144 156 168 180 192 204 216 228 240 
 13 26 39 52 65 78 91 104 117 130 143 156 169 182 195 208 221 234 247 260 
 14 28 42 56 70 84 98 112 126 140 154 168 182 196 210 224 238 252 266 280 
 15 30 45 60 75 90 105 120 135 150 165 180 195 210 225 240 255 270 285 300 
 16 32 48 64 80 96 112 128 144 160 176 192 208 224 240 256 272 288 304 320 

解决方法

MARS toy system calls 用于输出没有格式选项(例如,与 Linux MIPS 不同的是,将参数传递给 printf 像 "%5d" 以将数字填充到 5 个空格宽)。它们也没有任何光标位置移动或查询功能。

因此,要实现相同的目的,您需要弄清楚每个数字中有多少个十进制数字,并手动打印正确数量的空格以获得固定宽度。 (例如,从 w=1 开始,重复乘以 10,直到其 > 您的数字。但对于大数字,其中 10 的下一个幂不适合寄存器的情况,这将失败。)

或者手动将您的数字格式化为从固定宽度缓冲区的末尾开始的字符串,该缓冲区以空格开头,并使用 MARS 打印字符串系统调用。 (重复除以 10 的余数,就像 How do I print an integer in Assembly Level Programming without printf from the c library? 中的 C 函数一样)

(您可能希望在每个字段内正确对齐,以便每个数字的 1 位置位于同一列。)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...