Assembly MIPS初学者,为什么赢了';它不会打印我的第三个提示吗?

Assembly MIPS初学者,为什么赢了';它不会打印我的第三个提示吗?,assembly,mips,emulation,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

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

要打印提示并获取单个字符,我认为您需要立即加载到
$v0
系统调用的正确值。根据MARS 4.5帮助文件,可用服务的建议您的代码应该与第24行中的代码类似:

la $a0, prompt3
li $v0, 4
syscall
li $v0, 12
syscall
也就是说,您希望“打印字符串”prompt3中的任何内容,然后“读取字符”以获得单个字符。第一个
syscall
是12,这是“readcharacter”,所以它在等待您输入一些内容

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

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

什么是系统调用12?这似乎是第一个问题。不要在
.data
部分中放置神奇常量-这会浪费内存!使用如下常量定义:
.eqv SYS\u PRINT\u STRING 4