Assembly MIPS和XSPIM转换中的字符串
给定一个字符串,让我们说“长数字”,当我把它插入ASCII计算器时,我得到了这个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位多得多? 所以让我们说“长数字”在记忆中 如果我想打印“长数字”,那该怎么办 我对地址和数据总线、数据传输(如果超过一个字节)以及它如何打印感到困惑,因为它不会只打印内存中的一个地址 我知道如果
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