我不知道如何在 mips 中检查字符串是否对称

I don't know how to chech if a string is symmetric or not in mips

我是 Whosebug 的新手,我遇到了麻烦,我需要你的帮助。 我是学生,我需要编写一个 MIPS 程序来检查一个字符串是否是对称的。 *示例对称字符串:ana、asddsa、fillif 等。

这是我将字符串读入数组的第一行代码,但我卡在了对称部分。

.data

array: .space 50 # char a[50];
.text

readText:

    li $v0,8 # input
    la $a0,array # loadiraj memorija vo adresata
    li $a1,20 #obezbedi memorija za string
    move $t0,$a0 #zachuvaj string vo $t0
    syscall

symmetry:

请给我一个意见,我应该如何从对称部分开始。 谢谢

数组引用是用指针算法完成的。首先我们要知道变量string1i的位置。假设 string1$a0 中,i$t0 中。我们需要将这两个变量加在一起。每当我们进行算术运算时,我们都必须将结果发送到某个地方,这里的想法是将结果发送到一个新的尚未使用的寄存器,比如 $t1。 (在这种情况下,$a0$t0 将不是发送结果的地方,因为这些寄存器保存我们稍后在当前或下一次循环迭代中需要的值。)

add $t1, $a0, $t0

接下来使用 lbu 取消引用该临时指针:

lbu $t2, 0($t1)

再次针对未使用的寄存器。

使用 three address code 的 C 版本如下所示:

char *p;
char ch;

p = string1 + i;
char ch = *p;

比较是通过 beqbne 指令完成的,这两个指令都需要两个寄存器进行比较(分别用于相等或不相等)和一个标签形式的分支目标.

我们使用条件分支来跳过 if-then。这个想法是推断何时跳过 then 部分——何时跳过与我们在 C 中编写的 if 条件相反。在汇编中:跳过这个如果那个,而在 C 中:如果那个做这个。因此,为了跳过 then 部分,在装配中测试了相反的条件。