【问题标题】:comparing characters in string MIPS比较字符串 MIPS 中的字符
【发布时间】:2012-06-13 01:47:01
【问题描述】:

我目前正在尝试编写一个 MIPS 程序,该程序将对用户输入的字符串进行排序并对其进行冒泡排序。 A在前面,Z在最后。

现在我有点困惑如何比较字符串中的每个字符。比如:

字符串:堆栈溢出 比较 S 和 T 的前两个字母。由于 S 属于前面,所以它保持不变,不会发生交换。

我将如何继续进行下一组字符进行比较,以便 T 和 A 成为下一组要比较的字符。

我想我会使用 lb(加载字节)指令,但我不完全确定正确使用偏移量。

感谢您的帮助。

【问题讨论】:

  • 只需将偏移量增加 1。
  • 那么它看起来像这个 lb $t1, 1($t0) 吗?还是 lb $t1, 4($t0)。
  • Nvm。由于字符串是任意长度的,您应该通过将基指针加 1 作为 ASCII 的 1 个字符 = 1 个字节来递增基指针(您可能希望将基指针复制到另一个寄存器以保留其原始值)。
  • 嗯,我有点明白你在说什么。所以为了澄清一下,如果字符串是stackoverflow。我将第一个字节“S”加载到寄存器中,因此要将字节“T”加载到另一个寄存器以比较我应该使用什么作为偏移量?
  • 你要做的是:(检查长度,以免与终止 0 进行比较),加载偏移量为 0 的当前字节(例如 S),加载下一个字节(例如 t ) 偏移量为 1,比较,必要时交换,然后递增基指针。

标签: string sorting assembly compare mips


【解决方案1】:

提醒一下,在循环中,必须检查当前指针是否大于索引(基指针 + 字符串长度 - 1),或者也可以检查索引处的值(当前指针 + 1 ) 是否等于 0 (NUL) 字符串终止字符。

确保在某处(在寄存器或内存中)保留基指针的副本。

在每个循环中,你会在当前指针的偏移量为0的地方通过加载字节读取当前指针当前指向的字符,并在当前指针的偏移量为1的地方通过加载字节读取下一个字符。然后你可以做比较和交换。之后,将当前指针加 1(因为 ASCII 中的字符是 1 个字节,所以您只会将地址加 1 个字节)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-21
    • 1970-01-01
    • 2020-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多