【问题标题】:How to concatenate two strings in MIPS?如何在 MIPS 中连接两个字符串?
【发布时间】:2014-06-19 10:50:00
【问题描述】:
concat:
    lb $t0, 0($a0)                   # $t0 = string1[i]
    beq $t0, $0, string2             # if end of string1, go to string2
    sb $t0, 0($a2)                   # stringconcat[i] = string1[i]
    addi $a0, $a0, 1                 # increment index into string1
    addi $a2, $a2, 1                 # increment index into stringconcat
    j concat                         # loop back

string2:
    lb $t0, 0($a1)                   # $t0 = string2[j]
    beq $t0, $0, done                # if end of string2, return
    sb $t0, 0($a2)                   # stringconcat[j] = string2[j]
    addi $a1, $a1, 1                 # increment index into string2
    addi $a2, $a2, 1                 # increment index into stringconcat

done:
    sb $0, 0($a2)                    # append null to end of string
    jr $ra

我是 MIPS 的新手,我有这个代码作为作业,我不知道要添加什么才能让它在 QtSpim 上运行,请帮忙。

【问题讨论】:

  • PC=0x00400024 发生异常
  • 如果您没有将$a0 设置为任何值,则第一条指令可能会出现空指针异常。
  • @user3724875 我正在使用Mars软件运行Mips汇编程序,非常好。下载链接:cld.persiangig.com/download/E68KaQp7cj/Mars4_3.jar/dl

标签: mips string-concatenation spim


【解决方案1】:

在第二个循环结束时,您错过了回到 string2 的跳转。

string2:
  lb $t0, 0($a1)
  beq $t0, $0, done
  sb $t0, 0($a2)
  addi $a1, $a1, 1
  addi $a2, $a2, 1
  j string2                        # Missing line!

为了完整起见,bellow 是一个基于您的代码的完整工作程序。它将字符串:"Bull""Dozer" 连接成:"BullDozer"

.data
  first: .asciiz "Bull"
  second: .asciiz "Dozer"
  .align 2
  result: .space 10       #10 bytes for result: strlen("Bull") + strlen("Dozer") + 1
  .align 2

.globl main
.text
  main:
    la $a0, first
    la $a1, second
    la $a2, result

  concat:
    lb $t0, 0($a0)          # $t0 = string1[i]
    beq $t0, $0, string2    # if end of string1, go to string2
    sb $t0, 0($a2)          # stringconcat[i] = string1[i]
    addi $a0, $a0, 1        # increment index into string1
    addi $a2, $a2, 1        # increment index into stringconcat
    j concat                # loop back

  string2:
    lb $t0, 0($a1)          # $t0 = string2[j]
    beq $t0, $0, done       # if end of string2, return
    sb $t0, 0($a2)          # stringconcat[j] = string2[j]
    addi $a1, $a1, 1        # increment index into string2
    addi $a2, $a2, 1        # increment index into stringconcat
    j string2               # **Missing line!**

  done:
    sb $0, 0($a2)           # append null to end of string
    jr $ra

【讨论】:

    猜你喜欢
    • 2011-11-04
    • 2022-11-16
    • 1970-01-01
    • 2012-01-17
    • 2011-04-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多