【发布时间】:2011-10-16 07:58:01
【问题描述】:
我读到 .asciiz null 终止了字符串(附加 \n?)...但是在查看 QtSPIM 的用户数据段时,
User data segment [10000000]..[10040000]
[10000000]..[1000ffff] 00000000
[10010000] 6c6c6548 6f57206f 00646c72 6c6c6548 H e l l o W o r l d . H e l l
[10010010] 6f57206f 00646c72 00000000 00000000 o W o r l d . . . . . . . . .
[10010020]..[1003ffff] 00000000
我看不出有什么不同?
.data
str1: .asciiz "Hello World" # string str1 = "Hello World"
str2: .ascii "Hello World" # string str2 = "Hello World"
.text
.globl main
main:
li $v0, 4 # print_string
# print(str1)
la $a0, str1 # load address of str1 into $a0
syscall
# print(str2)
la $a0, str2 # load address of str2 into $a0
syscall
j $ra
输出“Hello WorldHello World”
更新
它们的含义是什么?我什么时候使用它们? asciiz 听起来像是“正确”的方法?
【问题讨论】:
-
null 终止意味着添加 \0 - 具有 0 值的字节。 “.ascii”没有被宏处理器终止
-
要查看差异,添加第 3 个 str: str2: .ascii "text" 并重新检查段的二进制转储。
-
好的,那么问题是我什么时候使用它们?
-
您阅读了您正在调用的例程的规范并传递输入以获得您想要的输出。
标签: mips