MIPS回文

MIPS回文,mips,palindrome,uppercase,lowercase,punctuation,Mips,Palindrome,Uppercase,Lowercase,Punctuation,我拥有的当前代码看起来就是这样。如果未输入标点符号,则可以成功读取回文字符串 .data 缓冲区:。空间为80 输入:.asciiz“输入字符串:” 输出:.asciiz“您的字符串:” 帕利:.asciiz“这是一个回文” notp:.asciiz“这不是回文” .文本 主要内容: li$v0,4#打印str的系统调用代码 la$a0,输入#要打印的字符串地址 syscall#打印输入 li$v0,8#系统调用读取字符串的代码 la$a0,缓冲区#告诉syscall缓冲区在哪里 li$a1,8

我拥有的当前代码看起来就是这样。如果未输入标点符号,则可以成功读取回文字符串

.data
缓冲区:。空间为80
输入:.asciiz“输入字符串:”
输出:.asciiz“您的字符串:”
帕利:.asciiz“这是一个回文”
notp:.asciiz“这不是回文”
.文本
主要内容:
li$v0,4#打印str的系统调用代码
la$a0,输入#要打印的字符串地址
syscall#打印输入
li$v0,8#系统调用读取字符串的代码
la$a0,缓冲区#告诉syscall缓冲区在哪里
li$a1,80#告诉syscall缓冲区有多大
系统调用
la$a0,缓冲区#将缓冲区移到a0
li$v0,4#打印缓冲区
系统调用
la$t1,缓冲区#字符串的开头
la$t2,缓冲区#字符串的末尾
李$t0,0
循环:
lb$t3,($t2)#加载字符串末尾的字节
beqz$t3,endl#如果它等于0,则分支出循环
添加$t2,$t2,1#如果在循环中增加到下一个字符
日航环路#重复环路
上:
加上$t4,$t4,32
降低
降低:
addi$t0,$t0,1
sb$t4,0($a0)
addi$a0,$a0,1
j环
完:
subu$t2,$t2,2#减去2从\0和\n向后移动
检查:
#英镑$t4,0($a0)
#beqz$t4,之后
#beq$t4,10,之后
#slti$t2、$t4、91
#李$t3,1
#贝币$t2,$t3,上
bge$t1,$t2,回文#如果双方相等,则为回文
#称回文
lb$t3,($t1)#将字节加载到寄存器t3中
lb$t4,($t2)#将结束字节加载到寄存器t4中
bne$t3,$t4,notpaly#如果两个寄存器字节不相等,它就不是回文
addu$t1,$t1,1#将字符串的开头增加到下一个字符
subu$t2,$t2,1#将字符串末尾减量到下一个要比较的字符
日航检查#重复循环
回文:
洛杉矶$a0,帕利#通过数据呼叫帕利
li$v0,4#要求读取字符串
系统调用
日本航空公司出口#跳到终点
诺帕利:
la$a0,notp#从数据调用notp
li$v0,4#要求读取字符串
系统调用
日本航空公司出口#跳到终点
之后:
李$v0,4
la$a0,产量
系统调用
la$a0,缓冲区
李$v0,4
系统调用
出口:
li$v0,10#呼叫结束程序
系统调用#调用操作系统
现在我知道我需要实现一些代码,比如使大写字母变成小写字母,以及删除标点符号

检查我已经存储的位:我有一些注释代码,这是为了测试一个字符是否为大写,然后跳转到函数并通过添加32来降低它。但是它没有正确编译,我假设这是因为我没有正确存储位

#lb   $t4, 0($a0)
#beqz $t4, after
#beq  $t4, 10,  after
#slti $t2, $t4, 91
#li   $t3, 1
#beq  $t2, $t3, upper

定义“未正确编译”。如果你从汇编程序中得到错误信息,那么你需要在你的问题中包含这些信息。当它运行时,它会给出一个超出范围的错误。自从发帖以来,我把代码弄乱了,所以不能得到完全相同的错误。但这是由于我没有使用加载字节和正确的寄存器造成的。我试图修改缓冲区,但不知道在哪个循环中执行。好的,编译时错误和运行时错误是两件不同的事情。如果你不能重现错误,那么我就不清楚问题的确切含义。注意:这段代码不能正确处理长度为奇数的回文[e.g.civic]——在MARS 4.5上测试