【问题标题】:Converting while loop from C to MIPS将while循环从C转换为MIPS
【发布时间】:2018-01-15 16:09:14
【问题描述】:

我刚开始学习 MIPS 的基础知识。在阅读有关 MIPS 的书时,我想到了下一个问题:

我有以下代码:

while (x) {...}

括号之间的内容并不重要(只需将点放在代码的正确位置即可)。已知 x 包含一个布尔语句。让 reg $t0 包含 x。我正在尝试将此 C while 循环转换为 MIPS 代码。该怎么做?

【问题讨论】:

  • 考虑获得一些免费的软件交叉编译器(例如GCC,也许你会编译它的源代码)然后研究生成的汇编代码:mipsel-linux-gnu-gcc -O2 -fverbose-asm -S;在我的 Debian 上使用 gcc-mipsel-linux-gnu 交叉编译器包
  • 会的。这只是我在阅读 MIPS 时突然想到的一个问题
  • 仅使用 goto 转换 C 中的 while 循环,然后您将知道如何在 MIPS 中执行此操作

标签: c mips


【解决方案1】:

你可以用一个分支和一个标签来做到这一点。比如语句

while (n>0) { .... }

可以使用分支和标签转换为 MIPS:

    .data

    n: .word 100

    .text

    main:

    la $t0, n   
    lw $t1, 0($t0)
    li $s0, 0

    Loop:
       bgt $t1, $zero, EXIT
       add $t1, $s0, $t1
       addi $t1, $t1, -1

       j Loop

   EXIT:

【讨论】:

  • 我需要更一般的陈述。语句是什么并不重要,它只是一个布尔语句。将 x 视为语句。我如何表示 x?
  • “将 x 视为语句。” 你的意思是 表达式“我如何表示 x?” 通过计算表达式值的必要代码。这几乎可以说得非常具体了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-16
  • 1970-01-01
  • 1970-01-01
  • 2021-05-22
  • 2014-12-18
  • 1970-01-01
相关资源
最近更新 更多