我试图编写一个程序,用户输入一个选项,然后从另一个文件中分支并运行程序。 我试过寻找答案,但我没有运气。 我有我想要在同一目录中使用的所有文件,我将它们全部更改为.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
答案 0 :(得分:2)
MARS模拟器具有“设置/汇编目录中的所有文件”设置,允许多个文件链接到单个程序。
示例...我在磁盘上创建了新目录并将两个.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
.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
的函数。