Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly MIPS程序集.空间数据_Assembly_Mips - Fatal编程技术网

Assembly MIPS程序集.空间数据

Assembly MIPS程序集.空间数据,assembly,mips,Assembly,Mips,做家庭作业。 我试图使用循环打印.space 11数据,并使用 lb $a0, data($t9) 我必须加载每个字节才能打印。空格项,还是有更好的方法 loop2: lbu $t9, newNum($t8) li $v0, 11 move $a0, $t9 syscall addi $t8, $t8, 1 lbu $t9,

做家庭作业。 我试图使用循环打印
.space 11
数据,并使用

lb $a0, data($t9)
我必须加载每个字节才能打印。
空格
项,还是有更好的方法

loop2:
        lbu $t9, newNum($t8)
        
        li $v0, 11
            move $a0, $t9
            syscall
                
        addi $t8, $t8, 1
            lbu $t9, newNum($t8)
            bnez $t9, loop2
        
旁注:是否有其他方法检测
.space
的结尾

多谢各位

我必须加载每个字节才能打印.space项,还是有更好的方法

loop2:
        lbu $t9, newNum($t8)
        
        li $v0, 11
            move $a0, $t9
            syscall
                
        addi $t8, $t8, 1
            lbu $t9, newNum($t8)
            bnez $t9, loop2
        
如果将空间格式化为C字符串,则可以使用“print string”syscall,4。将空间格式化为C字符串意味着具有最后一个空字符,看起来您已经具有了

顺便说一句,循环假设字符串至少有一个字符(其长度>=1),这通常不是真的(有些字符串的长度为0),但在程序中可能是这样

旁注:是否有其他方法检测.space的结尾

这取决于您如何使用该空间。如果它是编译时常量字符串的固定缓冲区,则可以计算两个标签之间的差异:

myspace:    .space 11
myspaceEnd:

...
la $t0, myspaceEnd
la $t1, myspace
sub $t3, $t0, $t1
这将把.space的大小放入
$t3
。一些但不是所有的汇编程序都允许常量表达式,例如
myspaceEnd myspace
,因为这是一个编译常量,它将转换为一个运行时常量立即值,我们可以放弃运行时计算(上述3条指令)编译时常量的

但是,这些将计算空间的静态/编译时大小。如果将空间用作缓冲区:在运行时将一个长度仅为动态/在运行时已知的字符串放在那里,则不会计算该动态长度,它只会给出空间的静态长度(即最大允许长度)

很可能您正在使用空格作为任何长度的运行时字符串的缓冲区,因为
.space
指令不允许初始化,而
.asciiz
.byte
指令则允许初始化

MARS&QtSpim允许从控制台或文件中读取字符串。从控制台读取字符串时,系统调用不会给出字符串的长度,因此
strlen
-必须执行某种类型的操作才能找到此类字符串的长度。我们能做的最好的事就是在需要时计算长度,如果我们需要的话,在程序中的几个地方存储这个长度

从文件读取时,系统调用确实返回长度,因此如果系统调用返回的长度在程序需要时保留,则无需执行
strlen
操作