Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 如果字符串包含整数,则读取MIPS字符串_Assembly_Mips - Fatal编程技术网

Assembly 如果字符串包含整数,则读取MIPS字符串

Assembly 如果字符串包含整数,则读取MIPS字符串,assembly,mips,Assembly,Mips,我正在尝试创建一个汇编语言程序(在MIPS中),它读取用换行符分隔的用户输入值。我想读取一个包含整数的字符串(例如,“A4”,但MIPS将字符串读取为“a”,整数读取为“4”。如何使用syscall使MIPS将字符串读取为“A4”?以下是我迄今为止的代码位,它应该在一行读取字符串,在下一行读取整数 buffer: .space 2 .text .globl main main: li $v0, 8 la $a0, buffer li $a1, 2 syscall move $s0, $a0

我正在尝试创建一个汇编语言程序(在MIPS中),它读取用换行符分隔的用户输入值。我想读取一个包含整数的字符串(例如,“A4”,但MIPS将字符串读取为“a”,整数读取为“4”。如何使用syscall使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

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

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

谢谢。这是我最初的想法,但最初我不确定此更改是否也需要
buffer:.space 3
现在,当我点击enter t时,syscall 5的整数输入无效o输入整数。@SufiIman“A5”不是有效的十进制整数。它可能是有效的十六进制整数,但如果您在MARS/SPIM下(从使用的系统调用来看是这样),它没有十六进制字符串到值的系统调用,因此您可能必须自己转换它。我敢打赌,使用“mips十六进制输入”时,会有一些Q+A(但这看起来更像是一个好提示,您可以搜索更多…“现在,当我按enter键输入整数时,syscall 5的整数输入无效。”如果已达到允许写入缓冲区的最大字符数,则系统调用8不会等待您按下回车键。因此,如果将
$a1
设置为3,然后输入“A4”,系统调用将写入“A4\0”返回到缓冲区,然后返回。因此回车键被系统调用5读取,这可能就是为什么您会收到关于无效输入的消息。谢谢。这是我最初的想法,但最初我不确定此更改是否也需要
缓冲区:.space 3
,现在它说syscall 5的整数输入无效d当我按enter键输入整数时。@SufiIman“A5”不是有效的十进制整数。它可能是有效的十六进制整数,但如果您在MARS/SPIM下(从使用的系统调用来看是这样),它没有十六进制字符串来表示syscall的值,因此您可能必须自己转换它。我敢打赌,使用“mips十六进制输入”时会有一些Q+A,例如(但这一个看起来更像是好提示,您可以搜索更多提示…“现在,当我按enter键输入整数时,syscall 5的整数输入无效。”如果已达到允许写入缓冲区的最大字符数,则系统调用8不会等待您按下回车键。因此,如果将
$a1
设置为3,然后输入“A4”,系统调用将写入“A4\0”所以回车键被系统调用5读取,这可能就是为什么你会收到关于无效输入的消息。