我知道 (asciiz) 字符串以 '\0' 结尾,而 (ascii) 则不是。
但我还是很困惑。在这段代码中,为什么会打印:
‘一二三三四五五’
而不是简单地按照与打印命令相同的顺序打印它们?
.data
str1: .asciiz"One"
str2: .ascii " Two"
str3: .asciiz" Three"
str4: .ascii " Four"
str5: .ascii" Five"
.text
main:
la $a0,str1
li $v0,4
syscall
#---------------------------
la $a0,str2
li $v0,4
syscall
#---------------------------
la $a0,str3
li $v0,4
syscall
#---------------------------
la $a0,str4
li $v0,4
syscall
#---------------------------
la $a0,str5
li $v0,4
syscall
#---------------------------
#End
li $v0, 10
syscall
.end main
NULL 终止符 ('\0'
) 是必要的print_string
系统调用来知道字符串在哪里结束。系统调用将继续打印字符,直到到达 NUL 终止符。
印刷str1
prints One
.
印刷str2
prints Two Three
, since str2
不是 NUL 终止的。
印刷str3
prints Three
.
印刷str4
prints Four Five
, since str4
不是 NUL 终止的。
印刷str5
prints Five
.
把所有这些放在一起,你就得到了One Two Three Three Four Five Five
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)