为什么加载地址对带有字符串的单词和标签的作用不同?
Why load address works different on words and labels with strings?
嗨,
我刚刚有一个简短的问题。假设我有 2 个标签 string 和 word,其中 string 是与字符串关联的标签,而 word 是实际单词,其中存储了 32 位整数。现在假设我使用系统调用来使用标签字符串打印字符串,我使用寄存器 a0 加载地址,它将打印字符串。但是为什么它不打印地址,因为这是加载地址。另一方面,如果我做完全相同的事情,但不是使用字符串标签,而是使用单词标签,我现在将打印实际地址。我想知道为什么它会这样工作。
感谢您的宝贵时间
Varun G.
我认为您误解了系统调用。你发出一个特定的系统调用来做不同的事情。
要打印字符串,您需要输入 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
它将打印字符串开头的地址及其内容。
嗨,
我刚刚有一个简短的问题。假设我有 2 个标签 string 和 word,其中 string 是与字符串关联的标签,而 word 是实际单词,其中存储了 32 位整数。现在假设我使用系统调用来使用标签字符串打印字符串,我使用寄存器 a0 加载地址,它将打印字符串。但是为什么它不打印地址,因为这是加载地址。另一方面,如果我做完全相同的事情,但不是使用字符串标签,而是使用单词标签,我现在将打印实际地址。我想知道为什么它会这样工作。
感谢您的宝贵时间
Varun G.
我认为您误解了系统调用。你发出一个特定的系统调用来做不同的事情。
要打印字符串,您需要输入 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
它将打印字符串开头的地址及其内容。