我有一个快速的问题。我正在使用 MARS 汇编器(在 MIPS 指令集中编程)并且我有两个 MIPS 文件。一个文件包含我要运行的主要方法,它调用另一个文件中的函数。我的函数前面有.globl指令,但每次我尝试编译我的程序时,它都会说
在符号表中找不到符号“print_hex”。
以下是更多背景信息的屏幕截图:

标签print_hex位于名为 print_hex.s 的文件中。

如何将这两个文件链接在一起?最后,我如何告诉 MARS 在执行开始时调用特定标签,例如我希望它调用main。
我正在练习根据 Mips 参考表将 Mips 指令(beq $t5,$s0,循环)转换为二进制,并且有一系列指令(PC = PC + 4 + 分支地址)用于计算立即值“I”类型的指令,它一直引用“PC”。
电脑指的是什么?看来我应该寻找“循环”标签存储在内存中的位置:特别是找到该内存地址。
我目前正在使用MIPS处理器下的汇编语言.我目前正在使用MARS模拟器,由于原因未知,每次运行后都会收到以下错误消息:
Go:运行try.s
错误:程序计数器值无效:0
Go:执行因错误而终止.
我得到这个错误消息独立于我正在使用的代码,只是想知道这是否是MARS模拟器中的错误或者是否是我缺少的东西.
我已经下载了Mars MIPS Simulator .jar文件,我从oracle下载了java jdk文件.每当我打开jar文件时,IDE就在那里,但一切都是灰色的.我甚至无法编辑窗口中的文本.当您选择"执行"时,下面的框中会出现三个截止窗口,一个标题为"文本段",一个"数据段"和一个"标签".我认为这是一个失败的安装,但我不知道还能做什么.感谢您的任何帮助!
这是一个截图:
我正在使用MARS MIPS模拟器并使用Digital Lab Sim.
我的代码的目的是在Digital Lab Sim上以十六进制显示数字0到15.
我收到了这个错误
Runtime exception at 0x00400024: store address not aligned on word boundary 0xffff0011
Run Code Online (Sandbox Code Playgroud)
这是我正在使用的代码:
.data
digitos: .word 0x3F,0x6,0x5B,0x4F,0x66,0x6D,0x7D,0x7,0x7F,0x67,0x77,0x7F,0x39,0x3F,0x79,0x71
contador: .word 16
.text
main:
la $t0,0xFFFF0011
la $a0,contador
lw $t1,0($a0)
li $t9,0
la $t2, digitos
loop:
lw $t3,0($t2)
sw $t3, 0($t0)
addi $t9,$t9,1
addi $t2,$t2,4
blt $t9,$t1,loop
Run Code Online (Sandbox Code Playgroud)
该指令la $t0,0xFFFF0011是由错误负责的指令.0xFFFF0011控制左侧LED,0xFFFF0010控制右侧LED.
这是有趣的部分.如果我使用0xFFFF0010代码按预期工作,但如果我使用0xFFFF0011它不起作用.
我究竟做错了什么?
我正在尝试编写一个简单的代码,将字符串和整数输入保存到一个数组中,然后将它们打印出来(稍后我还将添加另一个对它们进行排序的部分,但我必须先使其工作)。
.data
array: .space 40 #10 elements array
in_name:
.asciiz "\nInsert name: "
in_date:
.asciiz "\nInsert date (mmdd): "
appt:
.asciiz "\nList: "
spaz: .asciiz " "
.text
main:
la $s0, array #load array in s0
addi $t0, $zero, 0 #t0=0 counter
addi $s1, $zero, 0 #s1=0 array size counter
j Input
Input:
li $v0, 4
la $a0, in_date
syscall #ask date
li $v0, 5
syscall #read date
add $t1, $zero, $t0 #offset in t1
add $t1, $t1, $t1 #t1*2 …Run Code Online (Sandbox Code Playgroud) I am trying to convert binary to decimal in the MIPS language, using the MARS simulator. The program accepts a binary number, and then does the conversion, by multiplying (shift left by the number's place $t9). Another way of saying that is multiplying each 1 digit by 2 raised to the power of the place, and summing that result.
I do not have a very good understanding of how values are stored and communicated between ascii, decimal, and the problem …
我正在尝试编写一个程序,让用户输入一个选项,它从另一个文件分支并运行一个程序。我试过寻找答案,但我没有任何运气。我将所有要使用的文件都放在同一个目录中,并将它们全部更改为 .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
Run Code Online (Sandbox Code Playgroud) 在讨论 32 位 MIPS 架构时,Patterson-Hennessy 解释说静态数据段开始于0x 1000 0000,结束于0x 1000 FFFF,全局指针$gp默认设置为中间地址0x 1000 8000。据说堆是下一个,因此应该从 开始0x 1001 0000。
然而,一些 MARS 实验告诉我,中间有一个额外的段,从0x 1001 0000到0x 1003 FFFF,因此堆仅从 开始0x 1004 0000。事实上,当我使用系统调用在堆上存储数组时,该数组将被存储在0x 1004 0000以后的位置。
.data当我在程序标题下初始化数据时,似乎会使用这个附加段。这让我感到困惑,因为我期望在下面初始化的数据.data被认为是静态的,因此应该存储在由全局指针控制的段中。
问题。MARS 标准表现出的行为吗?如果是,那么位于静态数据和堆之间的这个附加数据段与位于其前面的静态数据段有何不同?