【问题标题】:I can't print "enter" in Mips我无法在 Mips 中打印“输入”
【发布时间】:2019-09-28 05:34:45
【问题描述】:

我正在将 C 代码转换为 Mips 代码

C 代码是

int main(void) {
int i;
int data [10] = { 10, -2, 5, 22, 99, 0, -5, 8, 30, 7};
    for(i=0; i<10; i++){
        printf("%d\n", data[i]);
       }
  return 0;
 }

我的 Mips 代码是

.data
    data: .space 10

    enter: .asciiz "\n"
.text
.globl main
main:
addi $s0, $zero, 10
add $t0, $zero, $zero
sw $s0, data($t0)

addi $s0, $zero, -2
addi $t0, $t0, 4
sw $s0, data($t0)

addi $s0, $zero, 5
addi $t0, $t0, 4
sw $s0, data($t0)

addi $s0, $zero, 22
addi $t0, $t0, 4
sw $s0, data($t0)

addi $s0, $zero, 99
addi $t0, $t0, 4
sw $s0, data($t0)

addi $s0, $zero, 0
addi $t0, $t0, 4
sw $s0, data($t0)

addi $s0, $zero, -5
addi $t0, $t0, 4
sw $s0, data($t0)

addi $s0, $zero, 8
addi $t0, $t0, 4
sw $s0, data($t0)

addi $s0, $zero, 30
addi $t0, $t0, 4
sw $s0, data($t0)

addi $s0, $zero, 7
addi $t0, $t0, 4
sw $s0, data($t0)

addi $t0, $zero, 0
Loop: slti $t1, $t0, 10
      beq $t1, $zero, Exit
      mul $t2, $t0, 4

      li $v0, 1
      lw $a0, data($t2)
      syscall

          li $v0, 4
      la $a0, enter
      syscall

      addi $t0, $t0, 1
      j Loop
Exit:




end:
li $v0, 10
syscall

s1 用于保存值。 t0 用于索引 t1 是 slt 的标志 t1 乘以 4 是 t2

你应该只关注

          li $v0, 4
      la $a0, enter
      syscall

它打印 10-2522990-58307

dddddddddddddddddddddddddddddddddddddasdfasdfasdfasdfasdfasdfasdf

请帮我dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

【问题讨论】:

  • 您使用哪种操作系统?
  • 我用的是Window10!!

标签: mips qtspim


【解决方案1】:

您没有为data 数组保留足够的内存。 .space 10 保留 10 bytes 内存,但您尝试存储 10 words(40 字节)。所以你最终会覆盖换行符。

如果您将声明更改为data: .space 40,您应该会得到预期的输出。

【讨论】:

  • 哦,非常感谢!!!为什么我不检查...但我有一个问题。我如何首先用 10 字节的内存初始化数组?
  • 我必须在数据段中初始化数组,而不是在 main 中。你能告诉我怎么做或者我可以参考什么吗?
  • 嘿 Micahel,你如何一次获得多个输入整数?我已经发布了另一个关于它的问题。你可以看看
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多