1

我正在尝试编写一个 MIPS 程序,该程序将检查可以从终端输入的十个单个数字(正数、零或负数)的集合。检查数字后,只需将负数(带有适当符号)及其计数输出到终端。

下面是我的 MIPS 程序

        .data
prompt: .asciiz "Input Score: "
        .align 2
HR_Neg:        .asciiz "\n negative Scores: "
        .align 2
HR_Pos:        .asciiz "\n positive Scores: "
        .align 2
HR_Negsc:        .asciiz "\n Number of Negative Scores: "
        .align 2
HR_Posc: .asciiz "\n Number of positive Scores: "
        .align 2
HR_coma: .asciiz ", "
        .align 2
HR_brk:         .asciiz "\n\n"
        .align 2
NEg:        .space 10
        .align 2
Pos:        .space 10
        .align 2

        .globl main
        .text
main:
        li $t0, 0
        la $t1, Neg
        li $t2, 0
        la $t3, pos
        li $t4, 0
        li $t5, 0
        li $t6, 0

loop:
        li $v0, 4
        la $a0, prompt
        syscall

        li $v0, 5
        syscall

        bltu $v0, 50, else
        sw $v0, 0($t1)
        addi $t1, $t1, 4
        addi $t0, $t0, 1
        b l_end

else:
        sw $v0, 0($t3)
        addi $t3, $t3, 4
        addi $t2, $t2, 1

l_end:
        addi $t4, $t4, 1
        bltu $t4, 15, loop

#output counts
        li $v0, 4
        la $a0, HR_negc
        syscall

        la $v0, 1
        add $a0, $t0, 0
        syscall

        li $v0, 4
        la $a0, HR_posc
        syscall

        la $v0, 1
        add $a0, $t2, 0
        syscall

#output neg scores
        li $v0, 4
        la $a0, HR_neg
        syscall

        la $t1, Neg
        lw $a0, 0($t1)
        li $v0, 1
4

1 回答 1

1

请在您的代码中添加一些注释,以便我们这些感兴趣的人可以尝试了解它正在尝试做什么。

此外,上面的代码有一个错字,因为你有一个标签 HR_Negsc 和一个对 HR_negc 的引用,这让我觉得当你说“它没有运行”时,你实际上意味着它无法运行,因为它没有链接!

第 1 步 - 加入一些注释,尤其是在系统调用周围

第 2 步 - 让它实际执行

第 3 步 - 现在您可以开始调试了

您可以查看以下几个方面:

.space 给你多少空间,够不够?

您用来评估 +ve 和 -ve 的 bltu 指令是否正确?

您的程序如何结束 - 看起来有些东西丢失了?

后来评论:

嘿,从您之前的一个问题的问题描述中,我怀疑您当时编写的一些代码已经在这个项目中幸存下来。我指的是数字 15 和 50。

你知道,当我们不得不猜测你知道多少和不知道多少时,很难提供有用的帮助。问题越详细,答案就越有针对性。回答其他问题的一些建议显然仍然适用。

于 2009-12-03T08:03:14.343 回答