Mon programme est supposé effectuer les opérations suivantes: -Getting continuellement un entier de l'utilisateur (x), -impression du caractère à la position x dans la chaîne. -Les sorties du programme lorsque les entrées utilisateur 0.Impression du caractère x dans une chaîne (MIPS)
.text
.globl __start
__start:
li $s3,20 #string length
start: li $v0,5
syscall
move $s0,$a0 #integer now in $a0
beq $s0,$zero,exit
li $s1,0 #counter is 0
la $s2,str #address of string now is $s2
loop:lbu $t1,0($s2) #choosing char of string
addi $s1,1 #increment counter by 1
addi $s2,1 #next char
beq $s1,$s0,print #is the char at the position we entered?
j loop
print: lbu $a0,0($t1) #<------------#
li $v0,11
syscall
j start
exit: li $v0,10
syscall
.data
str: .asciiz "abcdefghijklmnopqrst"
Je continue à obtenir: « Une exception est survenue au PC = 0x00400034 » et « Mauvaise adresse dans les données pile suivante: 0x ... » exactement quand je tente d'exécuter la ligne que j'ai marquée.
Bien que cela semble correct, il imprime toujours le caractère « b », peu importe ce que je type.In ma méthode (je sais que pas le plus efficace) je veux pour déplacer ce personnage à $ a0, de sorte que je ne peux pas être imprimé.J'ai essayé d'utiliser à la fois sb et lbu, aucun d'entre eux semble fonctionner. – Trojax
Eh bien, vous déplacez la mauvaise valeur à '$ s0'. syscall 5 renvoie l'entier lu dans '$ v0', pas' $ a0'. – Michael
Merci beaucoup, ça explique tout. – Trojax