Mips-如何在Mars中运行多个文件

时间:2017-10-29 20:15:19

标签: assembly mips mars-simulator

我试图编写一个程序,用户输入一个选项,然后从另一个文件中分支并运行程序。 我试过寻找答案,但我没有运气。 我有我想要在同一目录中使用的所有文件,我将它们全部更改为.global,然后我进入设置以汇编目录中的所有文件。

.data
options: .asciiz "Enter 1 for Roadway\nEnter 2 for Equipment\nEnter 3 for Labor\nEnter 4 for Total Projects Costs\n"

.text
.global main

main:
    li $v0, 4   
    la $a0, options
    syscall

    li $v0, 5
    move $t0, $a0
    syscall

    beq $t0, 1, option1
    #beq $t0, 2, option2
    #beq $t0, 3, option3
    #beq $t0, 4, option4

    li $v0, 10
    syscall

option1:
    #this is where I'd like to run code from another file

    jr, $ra

1 个答案:

答案 0 :(得分:2)

MARS模拟器具有“设置/汇编目录中的所有文件”设置,允许多个文件链接到单个程序。

示例...我在磁盘上创建了新目录并将两个.asm文件保存到其中:

func.asm

.text

.globl printAsciiz

    # $t5 = address of ASCIIz string, modifies $v0
printAsciiz:
    # store original $a0 to stack (to preserve it)
    addi    $sp, $sp, -4
    sw      $a0, ($sp)
    # output the message from t5
    li      $v0, 4
    move    $a0, $t5
    syscall
    # restore $a0 from stack
    lw      $a0, ($sp)
    addi    $sp, $sp, 4
    # return from function
    jr      $ra

main.asm中

.data
    msg:    .asciiz     "Hello world\n" 

.text

.globl main
main:
    # call output function from other file
    la      $t5, msg
    jal     printAsciiz
    # terminate program
    li      $v0, 10
    syscall

现在使用main.asm切换到编辑器标签时(!重要,当编辑标签切换为func.asm时,构建过程将作为独立应用执行func.asm结果 - 有点笨拙和奇怪的行为),点击构建按钮(“所有文件”设置为ON),生成的二进制文件将在main.asm中通过加载$t5地址开始,然后调用{{ 1}}来自printAsciiz的函数。