Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.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
如何检查用户输入字符串在mips中是否为空字符串_Mips - Fatal编程技术网

如何检查用户输入字符串在mips中是否为空字符串

如何检查用户输入字符串在mips中是否为空字符串,mips,Mips,我尝试编写一个简单的MIPS程序,它接受用户输入的字符串,然后检查用户是否没有输入任何内容以退出程序。我尝试使用beq来比较用户的输入和空字符串,但我不知道如何将空字符串分配给寄存器 .data userinput: .space 8 .txet loop: li $v0,8 la $a0,userinput syscall li $v0, 4 la $a1, // try to assgin an empty string to $a1 beq $a0,$a1,

我尝试编写一个简单的MIPS程序,它接受用户输入的字符串,然后检查用户是否没有输入任何内容以退出程序。我尝试使用beq来比较用户的输入和空字符串,但我不知道如何将空字符串分配给寄存器

.data
  userinput: .space 8
.txet
 loop:
  li $v0,8
  la $a0,userinput
  syscall
  li $v0, 4
  la $a1, // try to assgin an empty string to $a1
  beq $a0,$a1, exit
  j loop

exit:   li $v0 10
        syscall
  • 因为字符串是一种可变长度的数据结构,所以它们进入内存-在连续(字节)内存位置一个字符接一个字符,通常与C一样,以NUL字符结尾。它们由起始地址(也称为字符串中的最低地址,也称为指向字符串第一个字节的指针)引用

  • 如果您通过引用地址比较字符串,您将知道两个字符串是否位于同一内存位置,如果它们位于同一内存位置,则它们是相等的(当然,在这种情况下,字符串具有相同的值),但如果它们不在同一内存位置,那么你就不知道字符串数据是否相同。要比较两个字符串,你需要比较它们在内存中的字节,看看它们是否相同

  • 你不需要一个完整的、通用的字符串比较来判断字符串是否为空。通过简单的返回操作来尝试输入内存中的字符串,看看你得到了什么。这就是当你想查看字符串是否为空时要查找的内容

  • 我相信它将有一个换行符,后跟一个nul字符。我不认为任何使用syscall#8的用户输入可以合法地在换行符之后有任何进一步的字符数据,所以我认为对于空输入字符串测试,将换行符作为字符串的第一个字符就足够了

  • beq
    /
    bne
    很有用,但正如我前面所说,您需要比较字符数据而不是引用地址。因此,从内存中加载字符串的第一个字节,并将其与换行符常量值进行比较
  • 一个真正的空字符串将以一个NUL终止字节开始(和结束),这是我们将查找的字符,而不是换行符,但是MARS syscall#8将换行符(用户键入以完成输入)附加到输入字符中,因此,查找真正的空字符串和查找来自syscall#8的最小可能(空)输入是有区别的