我试图用mips测试我的字符串长度函数。我想用像“快乐”这样的词来测试它,或者像那样的东西......但是我不知道该怎么做。如果将它打印到屏幕上也会很棒。
这是我的代码:
.globl StringLength
StringLength:
li $t0,0
StringLengthLoop:
lb $t1,0($a0)
beq $t1,$zero, StringLengthExit
add $a0,$a0,1
add $t0,$t0,1
j StringLengthLoop
StringLengthExit:
move $v0, $t0
jr $ra
答案 0 :(得分:1)
要打印到控制台,您将使用系统中可用的许多system calls之一。 (确切的系统调用值取决于您的系统/仿真器。)
字符串可以放在可执行文件的数据段中,并带有一个标签,可用于获取字符串开头的地址。 “.ascii”表示非空终止字符串,而“.asciiz”表示以空字符结尾的字符串。
这是一个关于如何打印字符串和整数值的简单示例:
.data
str: .asciiz "This is a string\n" # a null-terminated string to be printed.
.align 2 # make sure it's aligned to word boundary
int: .word 1234 # some number
.text
.global main
main:
la $a0, str # load the address of the start of our string
li $v0, 4 # syscall 4 usually means print string
syscall
la $t0, int # the address of our number
lw $a0, 0($t0) # get our number
li $v0, 1 # syscall 1 usually means print int
syscall
li $v0, 10 # syscall 10 usually means exit
syscall # exit.
更实际的例子:
如果我要使用你的函数,它将看起来像这样:(假设它遵循$ aN中参数的标准调用约定并返回$ vN中的值。确实如此。)
.data
str: .asciiz "This is an example"
.text
.global main
main:
la $a0, str # first argument, a pointer to the string
jal StringLength # call StringLength(str)
# print the length
add $a0, $zero, $v0
li $v0, 1
syscall
li $v0, 10
syscall # exit
大多数模拟器使用相同的系统调用。 Here is a list of system calls for the MARS simulator
最后注意:如果您打算使用lw指令加载一个值,请确保告诉汇编器将它与字边界(.align 2)对齐,就像我对第一个示例所做的那样。