首页 > 解决方案 > MIPS 初学者,为什么它不打印我的第三个提示?

问题描述

我正在尝试在 MARS(MIPS 汇编器和运行时模拟器)中编写一个程序,该程序将从用户那里获取两个整数,然后根据用户选择的操作进行相加或相乘。无论如何,我还没有深入了解该程序,但是我真的无法弄清楚为什么它不会打印我的第三个提示。你能帮我么?

.data
prompt1: .asciiz "Enter an Integer!"
prompt2: .asciiz "Enter Another Integer!"
prompt3: .asciiz  "Would you like to add or multiply? (+ for add, * for multiply)"
resultout: .asciiz "The result is:"

.text

main:
    la $a0, prompt1
    li $v0, 4
    syscall
    li $v0, 5
    syscall
    add $t0, $v0, $zero

    la $a0, prompt2
    li $v0, 4
    syscall
    li $v0, 5
    syscall
    add $t1, $v0, $zero

    la $a0, prompt3
    li $v0, 12
    syscall
    li $v0, 11
    syscall
    add $t2, $v0, $zero

标签: assemblymipsemulation

解决方案


要打印提示并获取单个字符,我认为您需要立即加载$v0syscall. 根据 MA​​RS 4.5 帮助文件,可用服务表建议您的代码从第 24 行开始应该是这样的:

la $a0, prompt3
li $v0, 4
syscall
li $v0, 12
syscall

也就是说,您想“打印字符串”中的任何内容prompt3,然后“读取字符”以获取单个字符。你做的第一个syscall是12,它是“读取字符”,所以它在等你输入一些东西。

我建议将代表特定系统调用的幻数(如 4 和 12)作为常量放入代码中:

.eqv SYS_PRINT_STRING 4
[...]
li $v0, SYS_PRINT_STRING

推荐阅读