如何在 mips 汇编中迭代字符串

2024-02-16

所以我现在正在做一个项目,我们必须接受一个字符串并将其转换为所有大写字母,然后如果 toUpper 或 toLower 字节不是 0,则转换为小写字母。现在我仍在处理大写字母部分(猜测小写字母几乎相同),但是当我遍历字符串查找大写字母时或者当我调用系统调用进行打印时,我遇到了困难。任何帮助都会很棒。这是我到目前为止所拥有的:

    .data

    toUpper: .byte   1
    toLower: .byte   0

    string:
        .asciiz "   A long time ago in a Galaxy far, far away...."

# Your code goes below this line

    origString:
        .asciiz "Original string:\n"

    toUpForwardStr:
        .asciiz "\nConverted to upper-case:\nForward:\n"

    toLowerForwardStr:
        .asciiz "\nConverted to lower-case:\nForward:\n"

    backwardStr:
        .asciiz "Backward:"

.text



main:   
    # Function prologue
    subu    $sp, $sp, 24                    # allocate stack space -- default of 24 here
    sw      $fp, 0($sp)                     # save caller's frame pointer
    sw      $ra, 4($sp)                     # save return address
    addiu   $fp, $sp, 20                    # setup main's frame pointer

    la      $a0, origString             #Print "Original String:"
    addi    $v0, $zero, 4
    syscall

    la      $a0, string                 #Print string
    addi    $v0, $zero, 4
    syscall

    la      $s0, toUpper
    sb      $s1, 0($s0)                 #toUpper stored in $s1

    la      $s0, toLower
    sb      $s2, 0($s0)                 #toLower stored in $s2

    bne     $s1, $zero, toUpperCase     #Jump toUpperCase if toUpper ≠ 0



    toUpperCase:
        la      $a0, toUpForwardStr     #Print "Converted to upper-case:"
        addi    $v0, $zero, 4               #      "Forward:"
        syscall

        la      $s3, string             #$s3 holds address to string

        addi    $s1, $zero, 0               #$s1 = i = 0

        j   upperCaseLoop                   #Goto upperCaseLoop

        upperCaseLoop:

            # Compute address of string[i]

            add     $t2, $s3, $s1           # $t2 = address of string[i]
            lb      $t3, 8($t2)             # $t3 = elements[i]

            beq     $t3, $zero, upperDone   # test if for loop is done

            addi    $t6, $zero, 96          #$t6 = 96 (lowercase letters)
            bgt     $t3, $t6, isLowercase1#If letter is lowercase goto isLowercase1

            comeBackFromLowercaseIfs:

            move    $t3, $a0
            addi    $v0, $zero, 11
            syscall




            addi    $s1, $s1, 1             # i++
            j       upperCaseLoop

    upperDone:

    bne     $s2, $zero, toLowerCase     #Jump toLowerCase if toLower ≠ 0


    toLowerCase:

        la      $a0, toLowerForwardStr  #Print "Converted to lower-case:"
        addi    $v0, $zero, 4               #      "Forward:"
        syscall
        j       done                        #The END!!







    isLowercase1:
        addi    $t7, $zero, 123         #$t7 = 123
        blt     $t3, $t7, isLowercase2  #Goto isLowercase2
        j       comeBackFromLowercaseIfs    #Go back to uppercaseLoop

    isLowercase2:
        addi    $t3, $zero, -30         #changes letter to lowercase
        j       comeBackFromLowercaseIfs    #Go back to uppercaseLoop



done:       
    # Epilogue for main -- restore stack & frame pointers and return
    lw    $ra, 4($sp)     # get return address from stack
    lw    $fp, 0($sp)     # restore the caller's frame pointer
    addiu $sp, $sp, 24    # restore the caller's stack pointer
    jr    $ra             # return to caller's code

1 This

move    $t3, $a0

应该

move    $a0, $t3

2 This

lb      $t3, 8($t2)

应该

lb      $t3, 0($t2)

3 This

addi    $t3, $zero, -30         #changes letter to lowercase

应该

addi    $t3, $t3, -32         #changes letter to lowercase
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 mips 汇编中迭代字符串 的相关文章

随机推荐

  • 无法获取 SAMSUNG S4 本机浏览器历史记录

    我正在从设备本机浏览器访问浏览器历史记录 我使用以下代码 Cursor cur getContentResolver query Browser BOOKMARKS URI new String Browser BookmarkColumn
  • 带间隔 Gurobi 约束的图形着色

    我正在尝试使用 networkx 和 gurobi 修复图形着色问题的一些限制 对于每个 i V 我们定义以下一组区间 每个区间 l u Ii 表示与顶点 i 相关的边集的一对可能的最小颜色 l 和最大颜色 u 此外 对于每个 k K 我们
  • 使用django反向传递查询参数?

    我有一个应该像这样访问的网址 people raj updates people raj updates tag food 但是 Django 反向 URL 解析器似乎没有任何规定可做tag food 即将其检测为额外参数并放入查询字符串中
  • 如果我使用 DOT 和 doxygen,如何更改由 graphviz 创建的图表在 HTML 中的位置?

    我在 doxygen 中使用 dot 和 Graphviz 以 HTML 格式创建代码的用户手册 doxygen 代码看起来有点像这样 br addtogroup MainProgram dot digraph G Main label M
  • C++ 编译器什么时候开始考虑字符串文字字符转义中超过两个十六进制数字?

    我在 C 中有一个 生成的 文字字符串 其中可能包含需要使用转义的字符 x符号 例如 char foo xABEcho 然而 g 版本 4 1 2 如果重要的话 会抛出错误 test cpp 1 error hex escape seque
  • Ecto 与某种情况的关联

    假设我有两个模型 Post and Comment评论模型可以是两种类型中的一种 normal and fancy由列定义type in the comments table 现在我想在我的上添加 2 个关联Post模型 其中一个指的是花哨
  • 如何切换到单击按钮后打开的新浏览器窗口?

    我遇到的情况是 当单击按钮时会打开带有搜索结果的新浏览器窗口 有什么方法可以连接并聚焦到新打开的浏览器窗口吗 并使用它 然后返回到原始 第一个 窗口 您可以按如下方式在窗口之间切换 Store the current window hand
  • 更新后自动缩小 Javascript/CSS 文件吗?

    我知道缩小 JS 和 CSS 文件的方法 但是有没有办法在生产系统中自动缩小这些文件 例如 我修改了原始JS文件中的一些内容并更新了生产环境 但是 在使用 JS 文件时 应该使用 JS 文件的自动缩小版本 如果源文件发生更改 最好更新当前的
  • Solr(太阳黑子),最大结果超过 30?

    我通过 Sunspot for Rails 使用 Solr 但我不知道如何返回超过 30 个结果 假设我有这个搜索块 posts Post search do keywords something end 我如何确定太阳黑子应该返回all比
  • Git 别名为新分支的名称添加前缀

    有没有办法编写一个别名 将当前日期添加到新分支的名称中 例如 git branch today new branch name 应该创建新分支22 09 2015 new branch name name 创建一个 git 别名并将其添加到
  • 识别串口/USB设备python

    这个问题的解决方案可能非常简单 但我对动态与设备交互还很陌生 我正在做的是制作一个Python可执行代码 这样用户的计算机上就不必有Idle或任何类型的Python解释器 这意味着我不知道设备将插入哪个USB端口到 该程序需要能够打开与通过
  • 在 Nginx docker 中,我们如何仅从 error.log 中查看日志

    Nginx Docker 文件配置为将 error log 发送到 dev stderr RUN ln sf dev stdout var log nginx access log ln sf dev stderr var log ngin
  • 检查文档是否为ROOT节点

    我需要知道文档元素是否是页面的根节点 例如 lt ROOT Node lt other document lt other document 在 iframe 1 或 2 中执行的 JavaScript 应该知道它们的文档节点是否是根节点
  • 新库中的异步方法与非异步方法[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在 NET 4 5 中 有许多方法现在以异步和非异步对的形式出现 例如Flush and FlushAsync 理想情况下 I O 交互在可能的
  • 如何在 mac 上结束 Tkinter python 模块,以便在程序完成后不必强制退出 python 启动器?

    这是我的代码 from Tkinter import app Tk app title example app geometry 400x300 200 200 b Button app text quit command app quit
  • EF - 具有自动迁移功能的新列的默认值

    我首先使用 EF 代码和自动迁移 我想向我的模型添加一个新列 一个布尔列来表示 活动 真 或 非活动 假 如何添加此列并为数据库中已有的行设置默认值 true 通过自动迁移 Tamar 您需要设置默认值 请参阅下一个示例 namespace
  • 如何防止操作栏被切断?

    当我将手机升级到 Marshmallow 后 我制作的所有应用程序的操作栏都被切断了 该应用程序在 Lollipop 和 Kitkat 上运行良好 该应用程序基本上只有一个视图 并且在我更新后的手机上无法正确显示 上半部分被切断 https
  • SSIS LookUp Transformation高级编辑器(修改SQL语句)

    我对SSIS中的查找转换有一个疑问 复选框 修改SQL语句 和参数选项有什么用 提前致谢 泽兰 感谢您的回答高德曼 我有一个场景 比如我的查找 参考 表正在访问 DB2 并且在 DB2 中我们有多个架构 我的要求是将架构名称作为参数传递给查
  • 使用 Maven 生成类路径文件

    我想从 pom xml 依赖项生成一个类路径文件 我需要它 所以在测试期间我有所有依赖项的类路径 稍后打包成一个包 maven dependency plugin不适合我有两个原因 它生成存储库中文件的路径 因此要使用它们首先需要运行的其他
  • 如何在 mips 汇编中迭代字符串

    所以我现在正在做一个项目 我们必须接受一个字符串并将其转换为所有大写字母 然后如果 toUpper 或 toLower 字节不是 0 则转换为小写字母 现在我仍在处理大写字母部分 猜测小写字母几乎相同 但是当我遍历字符串查找大写字母时或者当