Mips- 如何在火星上 运行 多个文件
Mips- How to run multiple files in Mars
我正在尝试编写一个程序,让用户输入一个选项,然后它分支并运行来自另一个文件的程序。
我试过寻找答案,但我没有任何运气。
我将所有要使用的文件都放在同一个目录中,并将它们全部更改为 .global,然后进入设置 assemble 目录中的所有文件。
.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
MARS 模拟器有 "Settings/Assemble all files in directory" 设置,允许多个文件 link 到一个程序中。
示例...我在磁盘上创建了新目录并将两个 .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
结果app - 有点笨拙和奇怪的行为),然后点击构建按钮("all files" 设置为 ON),生成的二进制文件将通过加载 $t5
和地址从 main.asm
开始,然后调用来自 func.asm
.
的 printAsciiz
函数
我正在尝试编写一个程序,让用户输入一个选项,然后它分支并运行来自另一个文件的程序。 我试过寻找答案,但我没有任何运气。 我将所有要使用的文件都放在同一个目录中,并将它们全部更改为 .global,然后进入设置 assemble 目录中的所有文件。
.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
MARS 模拟器有 "Settings/Assemble all files in directory" 设置,允许多个文件 link 到一个程序中。
示例...我在磁盘上创建了新目录并将两个 .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
结果app - 有点笨拙和奇怪的行为),然后点击构建按钮("all files" 设置为 ON),生成的二进制文件将通过加载 $t5
和地址从 main.asm
开始,然后调用来自 func.asm
.
printAsciiz
函数