MIPS - Vérifier si un élément d'un tableau est le null-caractère de terminaison

Donc je suis en train d'écrire une fonction qui vous permettra de trouver la longueur d'une chaîne en MIPS.

Je suis en marche, traversant le long de la matrice, le chargement de chaque personnage, et je veux comparer chaque caractère null-caractère de terminaison pour voir si la chaîne a "terminé". À chaque itération, j'incrémente un compteur, puis stocker le compteur dans $v0, une fois que la chaîne a "terminé". Cependant, comment puis-je comparer l'actuel chargé caractère est le caractère null de la fin, "\0"? Plus précisément, comment dois-je représenter cette null caractère de terminaison? Est-il $zéro, comme je l'ai fait ci-dessous? Si oui, alors quoi d'autre ai-je fait de mal? D'obtenir une erreur d'adresse.

.data
msg1:.asciiz "Please insert text (max 20 characters): "
msg2:.asciiz "\nThe length of the text is: "

newline: .asciiz "\n"

str1: .space 20
.text
.globl main
main:
addi $v0, $v0,4
la $a0,msg1
syscall #print msg1
li $v0,8
la $a0,str1
addi $a1,$zero,20
syscall   #get string 1

la $a0,str1  #pass address of str1
jal len

len: 
addi $t2, $zero, 0 # $t2 is what we want to return in the end -- the count of the length of the character array
addi $s1, $zero, 0 # Index i for array traversing | init. to 0 | i = 0

Loop:

add $s1, $s1, $a0 # Adds the location of the index to the location of the base of the array | $t1 is now the location of: array[index]
lw $t0, 0($s1)

beq $t0, $zero, exit
addi $t2, $t2, 1 # Count = Count + 1
addi $s1, $s1, 1 # i = i + 1
j Loop

exit: 
la $a0,msg2 
li $v0,4
syscall
move $a0,$t0 #output the results 
li $v0,1
syscall

li $v0,10
syscall
  • J'ai ajouté les devoirs tag, n'hésitez pas à le retirer si ce n'est pas de devoirs.
InformationsquelleAutor Ryan Yu | 2012-09-11