我不知道如何在 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:
请给我一个意见,我应该如何从对称部分开始。
谢谢
数组引用是用指针算法完成的。首先我们要知道变量string1
和i
的位置。假设 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;
比较是通过 beq
或 bne
指令完成的,这两个指令都需要两个寄存器进行比较(分别用于相等或不相等)和一个标签形式的分支目标.
我们使用条件分支来跳过 if-then。这个想法是推断何时跳过 then 部分——何时跳过与我们在 C 中编写的 if 条件相反。在汇编中:跳过这个如果那个,而在 C 中:如果那个做这个。因此,为了跳过 then 部分,在装配中测试了相反的条件。
我是 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:
请给我一个意见,我应该如何从对称部分开始。 谢谢
数组引用是用指针算法完成的。首先我们要知道变量string1
和i
的位置。假设 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;
比较是通过 beq
或 bne
指令完成的,这两个指令都需要两个寄存器进行比较(分别用于相等或不相等)和一个标签形式的分支目标.
我们使用条件分支来跳过 if-then。这个想法是推断何时跳过 then 部分——何时跳过与我们在 C 中编写的 if 条件相反。在汇编中:跳过这个如果那个,而在 C 中:如果那个做这个。因此,为了跳过 then 部分,在装配中测试了相反的条件。