assembly - 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
解决方案
要打印提示并获取单个字符,我认为您需要立即加载$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
推荐阅读
- c++ - 将 int[n][n] 转换为向量
> - pdf - 是否可以在 Edge PDF Viewer 中提交 PDF 表单?
- java - 如何添加插页式广告
- python - 如果我不使用批量训练,为什么训练/测试损失会出现峰值?
- php - 更改自定义帖子类型 slug
- continuous-integration - Gitlab ci 作业正在执行错误的脚本
- r - R导入json列表作为数据集
- python - Django 的 SessionAuthentication 不起作用
- python - BeautifulSoup 只返回第一个实例
- python - 使用 flow_from_directory() 时如何知道标签的顺序?