首页 > 解决方案 > MIPS 写数字列表的练习

问题描述

正如下面要求的问题,

用 MIPS32 汇编语言编写一个程序,读取一个正整数 N 并打印出以下内容: 1 12 123 1234 12345 ... 1 2 3 4 5 6 ... N

这是我的代码如下所示:

    .data
word:   .asciiz "Please enter a random row: \n"
    .text
    .globl main

main:   
    la $a0, word        # load word
    li $v0, 4
    syscall

    li $v0, 1           # service 1 is print integer
    move $a0, $t0       # move register to be printed into argument 
register $a0
    syscall

    lw $s0, row         # $s0 = row
    addi $s0, $s0, -1   # for accommodating loop condition
    li $s1, 1           # set i = 1
    li $s2, 1           # set j = 1


loop1:
    blt $s0, $s1, Exit  # for(i = 0; i < row; i++)
    addi $s1, $s1, 1    # i++
    li $s2, 1           # resets j to 1 after every iteration of for 
loop
    move $a0, $t0       # move register to be printed into argument 
register $a0
    j loop2             # executing the nested for loop


loop2:
    blt $s1, $s2, loop1 # for(i = 0; i < j; i++)
    li  $v0, 1          # read_double => scanf("%d")
    move $a0, $t0       # move register to be printed into argument $a0
    syscall
    j loop2


   li $v0, 10           # loading exit code
   syscall              # execute exit

由于我倾向于通过它,然后我仍然无法达到预期的结果。

标签: mips

解决方案


以下是您将如何编写代码来执行此操作:

向用户询问 N 值,然后保存。

创建一个将持续到 N 次迭代的循环(请参阅条件分支)

对于 N 次迭代,将值 1, 1+=1, ... N 保存在寄存器中。

请记住,每个字是 4 个字节。确保您正在更改访问寄存器的位置以正确保存您的值,否则它们将相互覆盖。

使用另一个循环打印所有值(再次,条件分支)。

如果您需要代码方面的帮助,请先尝试编写一些代码。:-)


推荐阅读