标签: mars-simulator

在MIPS中创建(和访问)数组

我正在尝试在MIPS Assembly中创建一个数组,然后将所有元素添加到一起.但是,当我尝试组装以下内容时,它说

read_array第1行位置7出错:".word"指令不能出现在文本段中汇编:操作已完成但有错误.

这是我的集会:

list: .word 3, 2, 1, 0, 1, 2
li $t0, 0x00000000  #initialize a loop counter to $t0
li $t4, 0x00000005  #last index of array
li $t3, 0x00000000  #this will hold our final sum
la $t1, list  #the address of list[0] is in $t1

loop: addi $t0, $t0, 0x00000001 #index++
  add $t5, $t0, $t0 #array index X2
  add $t5, $t0, $t0 #array index X2 again
  add $t6, $t5, $t1 #4x array index in $t6

  lw $t2, 0($t6) …
Run Code Online (Sandbox Code Playgroud)

arrays assembly mips mars-simulator

7
推荐指数
2
解决办法
7万
查看次数

访问字符串中的一个字符

我正在使用类似SPIMS或MARS的系统调用函数.

我正在读一个字符串(它可以工作,因为我可以打印出来)如下:

li $v0, 8
la $a0, string
li $a1, 256
syscall
Run Code Online (Sandbox Code Playgroud)

但是,我在访问字符串的单个字符时遇到问题.因此,如果我想访问第一个字符并打印它,我正在尝试这样做:

la $t0, string
lb $a0, ($t0)
li $v0, 4
sys call
Run Code Online (Sandbox Code Playgroud)

如果我尝试这样的事情:

la $a0, string
li $v0, 4
syscall
Run Code Online (Sandbox Code Playgroud)

这会将整个字符串打印为字符串指向整个字符串.

如果我尝试类似的东西:

la $a0, string
lb $a0, ($t0)
li $v0, 4
syscall
Run Code Online (Sandbox Code Playgroud)

它给了我一个出界的错误.我不明白为什么 - 虽然不是一个字节长的字符,这只是将字符串中的第一个字节加载到$ a0?

谢谢

string assembly mips spim mars-simulator

7
推荐指数
1
解决办法
3万
查看次数

MIPS"la"伪指示

在MIPS中,la指令转换为luiori.但是,MARS Simulator似乎根本不这样做.当我转储以下机器代码时:

.text
    la $a0, array
    la $a1, array_size
    lw $a1, 0($a1)

.data
    array: .word 0:10
    array_size: .word 10
    message: .asciiz "The sum of numbers in array is: "
Run Code Online (Sandbox Code Playgroud)

我明白了:

00100000000001000010000000000000
00100000000001010010000000101000
10001100101001010000000000000000
Run Code Online (Sandbox Code Playgroud)

这显然是.它倾销la为一条指令.MARS做什么?我该如何解释laluiori

谢谢,

assembly mips mars-simulator

7
推荐指数
1
解决办法
3万
查看次数

使用 MIPS 程序集读取文件

我正在尝试编写一个程序,该程序从 .dat 文件中读取字符,这些字符对应于要在 LED 模拟器中显示的不同颜色;x = 关闭,R = 红色,等等。我的问题是,我无法弄清楚打开 .dat 文件时我做错了什么。我环顾四周并尝试了所有我能想到的,但是每次我组装和运行时,我都会在 $v0 中得到一个 -1 表示错误。这是我打开/读取/关闭文件的代码:

.data  
fin: .asciiz "maze1.dat"      # filename for input
buffer: .asciiz ""

.text
#open a file for writing
li   $v0, 13       # system call for open file
la   $a0, fin      # board file name
li   $a1, 0        # Open for reading
li   $a2, 0
syscall            # open a file (file descriptor returned in $v0)
move $s6, $v0      # save the file descriptor 

#read from file
li …
Run Code Online (Sandbox Code Playgroud)

io file mips mars-simulator

6
推荐指数
1
解决办法
4万
查看次数

火星4.5 Mips的黑暗主题?

我将Mars MIPS汇编程序和运行时模拟器4.5用于组装类,当您盯着屏幕看几个小时时,我发现白色背景很累。

我想将编辑器的颜色更改为较暗的色调(最好是整个窗口),例如崇高的文字Eclipse的深色主题

设置中没有这样的选项,因此我尝试在.jar中搜索Java代码,以查看是否存在没有运气的合理解决方案。

实际上有改变颜色的方法吗,有人尝试过吗?

themes mips mars-simulator

6
推荐指数
1
解决办法
1376
查看次数

从MIPS程序集中的用户输入读取文件名

我正在编写一个MIPS汇编代码,它会询问用户文件名,并会生成一些有关文件内容的统计信息.

但是,当我从头开始将文件名硬编码到一个变量中时它工作得很好,但是当我要求用户输入文件名时它不起作用.

经过一些调试,我发现程序在内存中的用户输入结束时添加了0x00 char和0x0a char(检查asciitable.com),这就是为什么它不能根据用户输入打开文件的原因.

任何人都知道如何摆脱那些额外的字符,或如何从用户获取其名称后打开文件?

这是我的完整代码(它正常工作,除了来自用户的文件名,任何人都可以自由地将它用于他/她想要的任何目的):

        .data
fin:   .ascii ""      # filename for input
msg0:   .asciiz "aaaa"
msg1:   .asciiz "Please enter the input file name:"
msg2:   .asciiz "Number of Uppercase Char: "
msg3:   .asciiz "Number of Lowercase Char: "
msg4:   .asciiz "Number of Decimal Char:   "
msg5:   .asciiz "Number of Words:          "
nline:  .asciiz "\n"
buffer: .asciiz ""
        .text

#-----------------------
    li $v0, 4
    la $a0, msg1
    syscall

    li $v0, 8
    la $a0, fin
    li $a1, 21
    syscall

    jal fileRead …
Run Code Online (Sandbox Code Playgroud)

assembly mips mars-simulator

5
推荐指数
1
解决办法
1万
查看次数

如何在不使用伪指令的情况下加载内存地址?

我正在尝试使用MARS模拟器自己学习MIPS汇编语言.

出于教学原因,我限制自己不使用伪指令.

在尝试将某些数据的地址放入寄存器时,我遇到了一个问题,因为我无法使用la.

我尝试lui结合使用ori,就像我直接加载一个数字一样,无济于事:

  .data
arr:
  .byte 0xa1
  .byte 0xb2
  .byte 0xc3
  .byte 0xd4
  .byte 0xe5
  .byte 0xf6
  .byte 0x7a
  .byte 0x8b
  .byte 0x9c
  .byte 0xad

.text

  lui $s0, mem # <--- mars just gives me errors here :(
  ori $s0, mem # ?? ... 
Run Code Online (Sandbox Code Playgroud)

这是否可以使用专门的MARS,没有伪指令?怎么样?

提前致谢!

assembly mips mips32 mars-simulator

5
推荐指数
1
解决办法
3062
查看次数

调整mips-gcc输出以与MARS一起使用

mips-gcc生成的MIPS汇编代码几乎(但不是完全)运行在Mars MIPS模拟器上。例如:

  • 编译器生成“ j $ 31”而不是“ jr $ 31”
  • 编译器将.align指令放置在Mars不允许的文本段中。

此外,生成的程序集还没有完全设置好,因此无法正确启动和停止(即,末尾没有sycall 10)。

这些问题似乎都可以通过简单的脚本轻松解决。但是,在我重新发明轮子之前,我想知道:(1)是否有任何gcc标志将使其中的一些问题消失?(2)是否有人知道可以修复mips-gcc输出以使其在火星上运行的现有程序?

(FWIW,我在gcc 3.3.6和4.6.1上看到相同的行为。)

mips spim mars-simulator

5
推荐指数
1
解决办法
347
查看次数

在 MIPS 汇编 `addi` 指令中,如何解释十六进制立即数?

addi当使用十六进制立即数时,是否有关于如何在汇编中解释指令(和其他指令)的标准或建议?

例子:

addi $t0, $zero, 0xffff
Run Code Online (Sandbox Code Playgroud)

我期待这意味着相同的addi $t0, $zero, -1地方0xffff是符号扩展到0xffffffff,如由处理器完成的,而是由一个事实,即火星模拟器解释的十六进制数为32张无符号数和尝试的汇编做惊讶addi $t0, $zero, 0x0000ffff的伪指令(如果启用了伪指令)。

需要明确的是,MARS 的汇编器将该addi $t0, $zero, 0xffff伪指令组装为多条机器指令,这些指令在寄存器中创建该常量 (65535 = 0xffff),然后在启用伪指令的情况下添加它。MARS 的模拟器可以正确模拟0x2008ffff( addi $t0, $zero, -1)等指令。

SPIM 汇编器只是因错误而中止。

我想知道的是,汇编程序是否总是以这种方式解释,以及是否有写或解释的地方,因为我找不到任何东西。

assembly mips spim mars-simulator immediate-operand

5
推荐指数
0
解决办法
1万
查看次数

是火星MIPS模拟器Big或Little Endian

我必须确定火星模拟器是大或小端作为家庭作业,这看起来非常简单,但我有一些问题.

首先我尝试在内存中存储4个字节,内存为0,0,0,1,在内存中显示为0x01000000,因此,以相反的顺序,这似乎表示模拟器是小端,但是,当我加载4字节作为寄存器的整数,寄存器中出现的内容再次为0x01000000,据我所知,如果它是小端,将加载的是0x00000001.

此外,当使用.word 1存储4个字节时,存储的是0x00000001,此时没有字节反转.

我想知道模拟器是大端还是小端,并解释这种行为

assembly mips endianness mars-simulator

3
推荐指数
2
解决办法
5608
查看次数