为什么加载地址在带字符串的单词和标签上有不同的作

时间:2015-06-16 15:16:39

标签: mips

您好,

我刚才有一个简短的问题。假设我有2个标签字符串和字符串,字符串是与字符串相关联的标签,而字是存储在其中的32位整数的实际字。现在让我们说我使用系统调用来使用标签字符串打印字符串,并使用加载地址和寄存器a0,它将打印字符串。但是,为什么不打印地址,因为这是加载地址。另一方面,如果我做完全相同的事情,但我没有使用字符串标签,而是使用单词label我现在将打印实际地址。我想知道它为什么会这样运作。

感谢您的时间

Varun G.

1 个答案:

答案 0 :(得分:1)

我认为你误解了系统调用。您发出某个系统调用来执行不同的操作。

要打印字符串,请发出syscall 4($v0 = 4)。此服务打印由您先前加载的$a0中给出的地址指向的字符串。

要打印整数,请发出syscall 1($v0 = 1)。此服务打印存储在$a0的整数。如果您使用la伪指令加载它,则可以将此整数视为地址。

因此,如果您有以下代码段:

.data
str: .asciiz "hello!"

.text
  la $a0, str
  li $v0, 1
  syscall  # This will print the starting address of the string
  li $v0, 4
  syscall  # This will print the contents of the string pointed by label str

它将打印字符串开头的地址及其内容。