【问题标题】:I don't know how to chech if a string is symmetric or not in mips我不知道如何在 mips 中检查字符串是否对称
【发布时间】:2020-04-12 18:46:32
【问题描述】:

我是 StackOverFlow 的新手,我遇到了麻烦,我需要你的帮助。 我是学生,我需要编写一个 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:

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

【问题讨论】:

  • 你能用 C 做吗?如果没有,那么您需要算法方面的帮助。如果是这样,请告诉我们您正在努力将什么 C 构造转换为 MIPS。
  • 我在这一行有问题if(string1[i] != string1[length-i-1]){ 我不知道如何获取数组的 i 元素然后检查它们是否相同。谢谢

标签: string mips symmetric


【解决方案1】:

数组引用是通过指针运算完成的。首先我们必须知道变量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 条件相反。在汇编中:跳过 this if that,而在 C 中:do this if that。因此,为了跳过 then-part,在组装中测试相反的条件。

【讨论】:

  • 非常感谢先生。
猜你喜欢
  • 1970-01-01
  • 2014-09-08
  • 2017-03-28
  • 2016-06-13
  • 2013-04-14
  • 2013-09-14
  • 2021-11-20
  • 2021-06-01
  • 1970-01-01
相关资源
最近更新 更多