【问题标题】:Read MIPS String if String Contains an Integer如果字符串包含整数,则读取 MIPS 字符串
【发布时间】:2016-10-30 19:58:07
【问题描述】:

我正在尝试创建一个汇编语言程序(在 MIPS 中),它读取用换行符分隔的用户输入值。我想读取一个包含整数的字符串(例如,“A4”,但 MIPS 将字符串读取为“A”,将整数读取为“4”。如何让 MIPS 将字符串读取为“A4” " 与系统调用?这是我到目前为止的代码,它应该在一行上读取一个字符串,在下一行读取一个整数。

buffer: .space 2
.text
.globl main
main:
li $v0, 8
la $a0, buffer
li $a1, 2
syscall
move $s0, $a0


li $v0, 5               
syscall
move $s1, $v0

【问题讨论】:

    标签: assembly mips


    【解决方案1】:

    系统调用 8 最多读取 $a1-1 个字符,因为它总是以 NUL 结尾的字符串。因此,通过将$a1 设置为2,然后输入"A4",您将在buffer 中获得字符串"A\0"。如果您希望能够读取 2 个字符加上 NUL 终止符,请将 $a1 设置为 3。

    【讨论】:

    • 谢谢。我一开始也是这么想的,但一开始我不确定
    • 此更改还需要buffer: .space 3
    • 现在说当我按回车键输入整数时,系统调用 5 的整数输入无效。
    • @SufiIman "A5" 不是有效的十进制整数。它可能是有效的十六进制整数,但如果您在 MARS/SPIM 下(从使用的系统调用中看起来如此),它没有 hexa-string-to-value 系统调用,因此您可能必须自己转换它。我敢打赌,SO上有一些带有“mips hexadecimal input”的Q+A,例如stackoverflow.com/q/16693274/4271923(但这个看起来更像是一个很好的提示,你可以搜索更多......)
    • "现在说系统调用 5 的整数输入在我按回车输入整数时无效。" 系统调用 8 不会等你按回车如果您已经达到允许写入缓冲区的最大字符数,则返回键。所以如果你将$a1设置为3,然后输入“A4”,系统调用会将“A4\0”写入缓冲区,然后返回。因此,系统调用 5 会读取回车键按下,这可能就是您收到有关无效输入的消息的原因。
    猜你喜欢
    • 1970-01-01
    • 2014-03-22
    • 2020-02-14
    • 2020-03-24
    • 2017-10-19
    • 2019-03-15
    • 2014-10-30
    • 2021-11-22
    • 2021-02-07
    相关资源
    最近更新 更多