Mips 存储字节

Mips 存储字节,mips,Mips,我对这个代码有问题。它应该这样做: gabriele->grl 但不是3个字符,而是将最后一个字符加倍。因此:gabriele->grll 为什么? .数据0x10010000 诺姆:“加布里埃尔” voc:。asciiz“aeiou” 圣诺梅: .文本0x400000 主要:la$s1,voc#s1中voc的地址 la$s2,nome#s2中的地址di nome li$t3,0#索引名 li$t4,0#索引元音 li$t5,0#内存索引 li$a1,最多4个字符 cerca名称:lbu$t0,

我对这个代码有问题。它应该这样做:
gabriele->grl
但不是3个字符,而是将最后一个字符加倍。因此:gabriele->grll
为什么?

.数据0x10010000 诺姆:“加布里埃尔” voc:。asciiz“aeiou” 圣诺梅: .文本0x400000 主要:la$s1,voc#s1中voc的地址 la$s2,nome#s2中的地址di nome li$t3,0#索引名 li$t4,0#索引元音 li$t5,0#内存索引 li$a1,最多4个字符 cerca名称:lbu$t0,nome$t3 beqz$t0,好的 sc_voc2:lbu$t1,voc$t4 beq$t0、$t1、ignora2 加上$t4,$t4,1 1美元,萨尔瓦 j sc_voc2 萨尔瓦n:sb$t0,圣诺梅($t5) 加5美元,5美元,1美元 bge$t5,$a1,优质 ignora2:addi$t3、$t3、1 李$t4,0 cerca_nom杂志 总理:李$t5,0 洛杉矶1美元,圣诺美 lbu$t0,0($t1) sb$t0,圣诺梅($t5)#取第一个字符 addi$t5、$t5、1 lbu$t0,2$t1 sb$t0,st_nome($t5)#取第三个字符 addi$t5、$t5、1 lbu$t0,3($t1) sb$t0,st_nome($t5)#取第四个字符 好的:
在您的
cerca\u nom
循环中,您将从名称中删除元音,并将剩余字符(
'g'
'b'
'r'
'l'
)存储在
圣诺美

现在你在圣诺美的
有了
'gbrl'

然后你会:

st_nome[0] = st_nome[0]   ; still 'gbrl'
st_nome[1] = st_nome[2]   ; 'grrl'
st_nome[2] = st_nome[3]   ; 'grll'

你永远不会覆盖st_nome[3]
,因此那里仍然会有一个
'l'

你发布的代码无法用于重现问题,因为你的程序的某些部分丢失。首先,有一个名为
fine
的标签,但是你发布的代码中没有
fine:
标签。啊,不,这是一个空标签。这是这个“计划”的结束。我要编辑了,对不起,我该怎么解决呢?我可以使用一个临时区域并将所有剩余字符保存在那里,然后使用“sb”将第一个、第三个和第四个字符放在另一个区域吗?我不确定有什么问题需要解决(?)。您已经获得了正确的字符(
'grl
),从
st_nome
开始。为什么后面的下一个字节是什么很重要?如果需要将字符串传递给
print\u string
syscall,只需将零写入该字节即可。
st_nome[0] = st_nome[0]   ; still 'gbrl'
st_nome[1] = st_nome[2]   ; 'grrl'
st_nome[2] = st_nome[3]   ; 'grll'