MIPS初学者,为什么不打印我的第三个提示?

时间:2019-01-25 16:59:18

标签: assembly mips emulation

我正在尝试用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

1 个答案:

答案 0 :(得分:1)

要打印提示并获取单个字符,我认为您需要立即将$v0的正确值加载到syscall。根据MARS 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