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和XSPIM转换中的字符串_Assembly_Mips_Mips32_Spim - Fatal编程技术网

Assembly MIPS和XSPIM转换中的字符串

Assembly MIPS和XSPIM转换中的字符串,assembly,mips,mips32,spim,Assembly,Mips,Mips32,Spim,给定一个字符串,让我们说“长数字”,当我把它插入ASCII计算器时,我得到了这个 0x4c 0x6f 0x6e 0x67 0x4e 0x75 0x6d 0x62 0x65 0x72 0x73 及 这是我第一次使用MIPS,我找不到一个只教我如何使用它的指南 所以,我得到了32位,但似乎“长数字”比32位多得多? 所以让我们说“长数字”在记忆中 如果我想打印“长数字”,那该怎么办 我对地址和数据总线、数据传输(如果超过一个字节)以及它如何打印感到困惑,因为它不会只打印内存中的一个地址 我知道如果

给定一个字符串,让我们说“长数字”,当我把它插入ASCII计算器时,我得到了这个

0x4c 0x6f 0x6e 0x67 0x4e 0x75 0x6d 0x62 0x65 0x72 0x73

这是我第一次使用MIPS,我找不到一个只教我如何使用它的指南

所以,我得到了32位,但似乎“长数字”比32位多得多? 所以让我们说“长数字”在记忆中

如果我想打印“长数字”,那该怎么办

我对地址和数据总线、数据传输(如果超过一个字节)以及它如何打印感到困惑,因为它不会只打印内存中的一个地址


我知道如果数据只有一个字节,如何传输数据。如果不止这些,我会感到困惑。

我认为问题在于理解数据实际上是如何存储在内存中的,而不是在使用高级语言时数据是如何抽象的。从您对字符串如何存储在内存中的困惑中,我认为您应该从这里开始

在MIPS中操作的级别上,没有“字符串”(只有Zuul)。在你习惯于思考它们的方式中,也没有真正的“int”或“float”。只有位(1/0)以标准方式组合在一起,组成您习惯使用的数据类型。由于您的教授将要告诉您的原因,我们使用8位的组,我们称之为“字节”

字符串中的每个字符都可以用一个字节表示。看一看,看看如何做到这一点的标准。所以“L”由一个对应于十六进制值0x4c的位串表示,正好是十进制值76

该值存储在RAM中的单个字节中。下一个字母('o',由十六进制值0x6f表示)存储在下一个顺序字节中。下一个字母存储在下一个字节中,一直存储到最后一个字节。如果必须为该连续字节链命名,可以将其称为“字符串”:

正如@Michael所说,您需要知道以零结尾的ASCII字符串(也称为ASCIIZ字符串)的末尾有一个附加字符。该字符由十六进制值0x00(普通的旧零)表示,您将看到它被引用为“\0”

还有一件事。您需要找到更好的ASCII到十六进制转换工具。您使用的那个没有正确处理“空格”字符。空格对应于ASCII字符0x20(十进制32)。如果省略它,则字符串为“LongNumbers”。如果您尝试将0x00放入其中,字符串将在“Long”之后结束。

“如果我想打印“Long Numbers”,这将如何工作?”您将在字符串中附加一个NUL终止符(一个值为0的字节),然后使用syscall number 4(
print\u string
)并将字符串地址置于
$a0
“Long Numbers”中从我的理解是12字节?然后打印它会查看每个字母“长数字”的内存,但如何将每个字母存储在注册表中?如果字符串是“Supercalifragilisticexpialidocious”存储在注册表中,该怎么办?这在上下文中没有意义。也许你的意思是“这一串字母如何存储在32位寄存器中”?答案是没有。那里是不,绳子!您可以将第一个字节的地址存储在寄存器中。或者,您可以将其中一个字节的值存储在寄存器中。您不能在寄存器中存储“字符串”,因为寄存器不像您习惯的那样是变量。
1001100110111111011101100111 1001110111010111011011100010110010111100101110011