您好,
我刚才有一个简短的问题。假设我有2个标签字符串和字符串,字符串是与字符串相关联的标签,而字是存储在其中的32位整数的实际字。现在让我们说我使用系统调用来使用标签字符串打印字符串,并使用加载地址和寄存器a0,它将打印字符串。但是,为什么不打印地址,因为这是加载地址。另一方面,如果我做完全相同的事情,但我没有使用字符串标签,而是使用单词label我现在将打印实际地址。我想知道它为什么会这样运作。
感谢您的时间
Varun G.
答案 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
它将打印字符串开头的地址及其内容。