MIPS 汇编语言 printString(p) 函数

MIPS Assembly Language printString(p) function

提问人:Zuja Plays 提问时间:4/6/2023 更新时间:4/6/2023 访问量:25

问:

我在程序内存中存储了一个字符串,我试图将其打印到控制台,但它未能越过第一个 ascii 字母,只是重复 w 表示无穷大。我只是使用汇编程序来隐藏它,但它基本上会不断重印 W。将内存映射 IO 与0x80000008一起使用以写入或控制台输出。

.data
welcome: .asciiz "Welcome to tab!\n"

.text
main:
  # Load the address of the "welcome" string into register $4
  la $4, welcome

  # Call the printString function
  jal printString

  # Exit the program
  li $v0, 10


# Function to print a null-terminated string to the console
printString:
  # Initialize count to 0
  add $2, $0, $0

  # Loop over the characters in the string
  loop:
    # Load the next byte from memory
    lb $8, 0($4)

    # If the byte is null, exit the loop
    beq $8, $0, end

    # Print the character to the console
    li $v0, 11
    addi $a0, $8, 0


    # Increment the current character pointer and the count
    addi $4, $4, 1
    addi $2, $2, 1

    # Jump back to the beginning of the loop
    j loop

  # Return to the calling function
  end:
    jr $ra
组装 MIPS

评论

2赞 Peter Cordes 4/6/2023
$4是 ,与您用于打印到控制台的那个相同(您删除了它?请参见 en.wikibooks.org/wiki/MIPS_Assembly/Register_File。这就是为什么将寄存器编号与“ABI”名称混合使用是个坏主意的原因。我不得不查找它才能找到 的名称,但是当我看到您的程序使用原始寄存器编号时,我立即怀疑了类似的事情。$a0syscall$4

答: 暂无答案