1

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

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

1001100110111111011101100111 1001110111010111011011100010110010111100101110011

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

所以,我得到了 32 位,但似乎“长数字”远不止 32 位?所以可以说“长数字”在内存中。

如果我想打印“Long Numbers”,那将如何工作?

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

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

4

1 回答 1

1

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

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

字符串中的每个字符都可以用一个字节表示。查看http://www.asciitable.com/以了解如何完成此操作的标准。因此,“L”由一串对应于十六进制值 0x4c 的位表示,恰好是十进制值 76。

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

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

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

于 2014-01-16T17:01:05.560 回答