【问题标题】:Mips Assembly - StringsMips 组装 - 字符串
【发布时间】:2014-09-25 18:25:43
【问题描述】:

我开始学习一些 Mips Assembly 开发,遇到了以下问题,我发现很难解决:

A string which is recieved from the user consists only from Brackets, left and right. 
A legal string is one that for each left bracket has a closing right bracket.
A bracket can be inside another bracket, as long as it has a closing bracket.

The following "strings" are legal:
(), (()), ((()))

The following "strings" are not legal:
())), (, ((((()

An empty string is also legal.

我很清楚左右括号的数量必须相等。

如果我必须用 Java 来做,我会开始“数”左括号,直到找到右括号,然后检查数字是否匹配。

但是,我不知道如何在 Mips 上使用它。

编辑:见下面的答案。

【问题讨论】:

  • 只要用java写,然后将每一行翻译成一个或多个MIPS指令。
  • 算法可能是相同的。你具体有什么问题?如果您根本不了解任何 MIPS 程序集,您应该先阅读有关该主题的书籍或教程。
  • 我认为这个词是“很好的括号”,您可以阅读this question and its answer了解详细信息和应用程序。
  • @909Niklas 谢谢你,这是一个非常有趣的帖子。

标签: assembly mips computer-science


【解决方案1】:

我想我得到了正确的答案,在这里得到了一些人的帮助。关键是要知道,如果在任何时候,右括号多于左括号 - 退出。

    .data
theArray:   .space 64
str: .asciiz "\n enter a string, consists only of brackets. enter 0 in the end. \n"
msg1: "\n legal string\n"
msg2: "\n the string is not legal"

.text
    li $t0, 0 #left bracket counter
    li $t1, 0 #right bracket counter
    la $s0, theArray #pointer the string

loop:
    la $a0, str
    li $v0, 4
    syscall
    li $v0, 12
    syscall 

    beq $v0, 48, checkLegal
    beq $v0, 40, leftBracket
    beq $v0, 41, rightBracket
    j exit
leftBracket:
    addi $t0, $t0, 1
    j loop

rightBracket:
    addi $t1, $t1, 1
    #if at any point there are more right brackets than left, the string is not legal
    bgt $t1, $t0, notLegal
    j loop      

checkLegal:
    beq $t1, $t0, printLegal
    j notLegal
printLegal:
    la $a0, msg1
    li $v0, 4
    syscall
    j exit 
notLegal:
    la $a0, msg2
    li $v0, 4
    syscall

exit:
    li $v0, 10
    syscall

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多