Mips asciiz和ascii有什么区别

Mips asciiz和ascii有什么区别,mips,Mips,我读到.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 0000

我读到.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
听起来像是“正确的”方法?

正如@osgx所写,asciiz表示字符串以
\0
(ASCII代码0)NUL字符结尾。他们甚至被称为。引述:

在计算中,C字符串是以字母结尾的字符序列 空字符('\0',在ASCII中称为NUL)。它通常存储为 一维字符数组。[可疑–讨论]名称指 使用此字符串表示的C编程语言。 可选名称是ASCIIZ(请注意,C字符串并不意味着使用 和以null结尾的字符串


null终止表示添加\0-值为0的字节。“.ascii”未被宏处理器终止若要查看差异,请添加第三个str:str2:.ascii“text”并重新检查段的二进制转储。好的,那么问题将是我何时使用每一个?您阅读正在调用的例程的规范,并传递输入以获得所需的输出。@jiewmeng我将始终使用asciiz,除非你知道你不需要0终结者。OS syscalls通常在unix上接受asciiz字符串,因为unix是用C.@jiewmeng编写的,因为缺少的区别:可能您的汇编程序正在尝试对齐32/64位边界上的字符串。因此,1个字符的ASCII(非Z)字符串将被3x
\0
填充,使其成为ASCIIZ字符串。可能4或8个字符长的字符串不会显示这种行为。一般来说,你应该在ASCII字符串后面加上第三个字符串,以准确地看到ASCII字符串的结束位置。否则,汇编程序只需在数据段中填充
\0