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

MIPS汇编实现100字符字符串按每行10字符分行打印求助

Got it, let's work through this together! You've got a single-line 10x10 ASCII board, and you need to split it into 10 neat lines of 10 characters each using the provided print and printlf subroutines. Here's a straightforward MIPS assembly solution that does exactly that:

Step-by-Step Explanation & Code

We'll use a loop to iterate 10 times (once per line). In each iteration, we'll print 10 characters from the board, then print a newline, and shift our pointer to the start of the next line.

# Your board definition (double-check it's exactly 100 characters long!)
board: .asciiz " x xx x x x x xxx x x x x x xxxx x x x xx x x xx"

main:
    la $t0, board       # Load the starting address of our board string into $t0
    li $t1, 0           # Initialize a line counter to 0 (we need 10 total lines)

print_loop:
    bge $t1, 10, exit_program  # If we've printed all 10 lines, exit the loop

    # Set up arguments for the print subroutine
    move $a0, $t0       # Pass the current start address of the line to print
    li $a1, 10          # Tell print to output exactly 10 characters
    jal print           # Call the print subroutine

    jal printlf         # Print a newline after the current line

    addi $t0, $t0, 10   # Shift our board pointer 10 bytes forward (next line's start)
    addi $t1, $t1, 1    # Increment our line counter

    j print_loop        # Jump back to the start of the loop to print the next line

exit_program:
    # Exit the program (standard MIPS exit syscall)
    li $v0, 10
    syscall

Key Details to Note

  • Pointer Shifting: Since each ASCII character takes up 1 byte, adding 10 to our board pointer ($t0) moves us directly to the start of the next row in the 10x10 grid.
  • Loop Control: The line counter ($t1) keeps track of how many lines we've printed. Once it hits 10, we exit the loop.
  • Register Safety: If your print or printlf subroutines modify temporary registers like $t0 or $t1, you'll need to save these registers to the stack before calling the subroutines, then restore them afterward. For example:
    # Before calling jal print:
    addi $sp, $sp, -8
    sw $t0, 0($sp)
    sw $t1, 4($sp)
    
    jal print
    
    # After returning from print:
    lw $t0, 0($sp)
    lw $t1, 4($sp)
    addi $sp, $sp, 8
    
  • Board Length: Make sure your board string is exactly 100 characters long (10 rows × 10 columns). If it's shorter or longer, the output will be misaligned.

内容的提问来源于stack exchange,提问作者Nicolas Dahbar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:05:56