标签: mips32

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

我正在尝试使用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汇编中反转字符串

我试图提示用户输入字符串的长度,为该字符串分配空间,然后反向打印出来.

对于我的生活,我无法弄清楚为什么这不起作用..

Sample Output:
(spim) run    
Please enter an integer:    
7    
string
(spim)
Run Code Online (Sandbox Code Playgroud)

现在"字符串"的长度应该是6对吧?+应该成为它的空终止字符7.任何人都可以找到我的方法出错的地方吗?

.data
    nl: .asciiz "\n"
    inputPrompt: .asciiz "Please enter an integer:\n"

    theString: .space 32
    theInteger: .word 1

.text
main: 
    la $a0, inputPrompt #load address a0 with prompt
    li $v0, 4       #load system call, print string into v0
    syscall 

    li $v0, 5       #load system call, read int into v0
    syscall
    sw $v0, theInteger  #store saved int into $t0

    li $v0, 8           #load system call, read string with mem …
Run Code Online (Sandbox Code Playgroud)

string assembly mips spim mips32

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

从多 mips 中获取结果

我是汇编语言的新手,我对乘法感到非常困惑。

我正在阅读这里的快速教程(死链接,网络存档在这里

它说我使用后mult $t0, $t1结果存储在 Hi 和 Lo 中,我知道这些是特殊寄存器multdiv的特殊寄存器,但如何访问它们?

假设我在mult $t0, $t1where$t0$t1都是 2。我如何得到结果?(4)

mips spim mips32

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

使用 Valgrind 运行时 mmap 返回 EINVAL

我针对 Valgrind 运行的 mips32 应用程序在 mmap 函数中失败。如果我单独运行它可以正常工作,但是当我针对 valgrind 运行它时,它每次都会因 EINVAL 而失败。

   void * mem = (uint32_t *)mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, <fd>,
                                 mmap_size);
Run Code Online (Sandbox Code Playgroud)

valgrind mmap mips32

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

汇编MIPS - 如何将用户的整数存储到内存中?

所以,我不知道装配是如何工作的,也不知道我在做什么.我以为我做了,但当然我错了.所以这是我的问题 - 我甚至不知道如何让用户输入一个整数,所以我可以将它存储在内存中.我也不知道我的变量是否对齐,因为我甚至不理解"对齐"究竟是什么.下面是我的汇编代码,以及显示我想要代码执行的内容的注释.请帮忙

.data
                    # variables here

intPrompt:                  .asciiz "\nPlease enter an integer.\n"
stringPrompt:               .asciiz "\nPlease enter a string that is less than 36 (35 or less) characters long.\n"
charPrompt:                 .asciiz "\nPlease enter a single character.\n"
int:                    .space 4
string:                     .space 36
char:                   .byte  1







                    .text
                    .globl main
main:

                    # print the first prompt
                    li $v0, 4
                    la $a0, intPrompt
                    syscall


                    # allow user to enter an integer
                    li $v0, 5
                    syscall

                    # store the input in `int`
                    # don't …
Run Code Online (Sandbox Code Playgroud)

assembly mips spim mips32

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

为什么MIPS堆栈指针需要保持双字对齐?

我已经在几个地方阅读过此书,但并没有完全理解为什么。我理解为什么在MIPS32中所有指令必须字对齐到4个字节。

但是后来我读到堆栈帧必须是8的倍数,因为堆栈指针需要双字对齐。为什么?

我了解所附图像中的所有内容,但添加空白空间以将堆栈填充为8字节倍数的原因除外。

叠框

编辑:我在这里阅读本文的一个来源是第3页,项目符号4。另一个是过程调用示例下的Patterson和Hennessey的计算机组织与设计,第5版,附录A.6。但是,对我来说很明显,我现在误以为他们在谈论MIPS32。

assembly stack mips mips32

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

MIPS 中的 $fp 和 $sp 寄存器如何工作?

我目前正在阅读 John L. Henessy 的《计算机组织与设计》建筑课程。据我了解, $sp 指向堆栈中最近分配的地址, $fp 指向堆栈的开头。为什么我们需要$fp?如果一个过程调用另一个过程,它们会如何表现?例如,当堆栈增长时,堆栈指针递减,但是 $fp 会发生什么变化?

mips cpu-architecture mips32

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

在PIC32上运行的C++(MIPS32)

不幸的是,我的PIC32应用程序需要OO太多,我不能继续用C语言.

你知道PIC32的任何MIPS32 C++编译器吗?

谢谢

embedded gcc g++ microchip mips32

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

j(jump)指令在内存中能跳转多远?(MIPS)

考虑 MIPS 中的 j(jump) 指令。它在内存中能跳多远?会是32位吗?我可以解释一下吗?

assembly mips mips32

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

在MIPS中使用跳转表(如何跳转JT数组中的标签)

我正在尝试使用跳转表为我的工作制作菜单。一切对我来说看起来都很好,但下面的代码不起作用。在“jr $s0”指令之后,mars 给了我一个错误,如下所示:

Error in : invalid program counter value: 268501840

我知道十进制地址268501840是 L1 标签的实际地址,并且代码应该位于该标签,但此时我遇到了此错误。为什么?

main:   
.data
jTable: .word L0,L1,L2,L3,L4,L5,L6,default      #jump table definition  
msg:    .asciiz "\nEnter Your Choice;\n [1] for build,\n [2] for insert,\n [3] for       find,\n [4] for findMinMax,\n [5] for delete,\n [6] for print\n [0] for Exit\nYour    choice:#"
.text
userInteraction:
li  $v0,4           #print string
la  $a0,msg         #get string address
syscall

li  $v0,5           #get a menu option from user(0 to 6)
syscall
move    $s0,$v0         #get index in $s0 …
Run Code Online (Sandbox Code Playgroud)

mips mips32 smips

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