标签: mips

MIPS 如何将双精度值加载到寄存器中?

在 mips 汇编中有指令(addi)将整数值放入寄存器,我的问题是:

addi $t1,$zero,8.9 #MIPS ERROR
Run Code Online (Sandbox Code Playgroud)

如果我想将双精度值放入 M​​IPS 中的寄存器中,我必须使用哪条指令?

mips

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

为什么 x86 将参数放在堆栈上?

在 MIPS 中,参数被放置在 $a0 到 $a4 寄存器中以实现更快的访问。为什么某些 x86 架构选择将参数放置在堆栈上而不是寄存器中?这样做有什么好处呢?

linux x86 assembly mips

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

为什么我们在 MIPS 中将程序计数器增加 4 而不是 32?

在MIPS中,我知道每条指令PC都会增加4。这是因为该字位于 32 位边界(4 个字节)上。这对我来说是有意义的,自然地我们需要通过两个连续单词的空间位置差异来增加 PC。

例如,我们可能将 0x00000000 作为 PC 值,但是当我们递增 PC 时,它会变为 0x00000004。但是,这个差异实际上是 4 位,而不是 4 个字节(32 位)。为什么是 0x00000004 而不是 0x80000000?

从二进制角度来看,这个问题变成: 0000 0000 0000 0000 0000 0000 0000 0000 到 0000 0000 0000 0000 0000 0000 0000 0010 与 1000 0000 0000 0000 0000 0000 000 0 0000。第二个似乎是 32 位(4 字节)与首先是 4 位的差异。

我唯一能想到的是,必须将 PC 乘以 8 才能得到单词的实际起点。加4应该还不够吧?有人可以解释一下我缺少什么吗?

assembly mips cpu-architecture

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

为什么 MARS 的 .data 段从 0x10010000 开始,而不是像 Patterson 和 Hennessy 描述的那样从 0x10000000 开始?

在讨论 32 位 MIPS 架构时,Patterson-Hennessy 解释说静态数据段开始于0x 1000 0000,结束于0x 1000 FFFF,全局指针$gp默认设置为中间地址0x 1000 8000。据说堆是下一个,因此应该从 开始0x 1001 0000

然而,一些 MARS 实验告诉我,中间有一个额外的段,从0x 1001 00000x 1003 FFFF,因此堆仅从 开始0x 1004 0000。事实上,当我使用系统调用在堆上存储数组时,该数组将被存储在0x 1004 0000以后的位置。

.data当我在程序标题下初始化数据时,似乎会使用这个附加段。这让我感到困惑,因为我期望在下面初始化的数据.data被认为是静态的,因此应该存储在由全局指针控制的段中。

问题。MARS 标准表现出的行为吗?如果是,那么位于静态数据和堆之间的这个附加数据段与位于其前面的静态数据段有何不同?

memory assembly mips mars-simulator

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

您能给我一些关于如何有效设计汇编语言程序的指导吗?

我是一名大学计算机科学学生,我应该为考试开发一个 MIPS 汇编语言程序,但我确实很难设计它,特别是在分配寄存器、遵循调用约定、将寄存器保存在堆栈...这一切似乎很快变得非常混乱和难以承受,我迷失了方向!

至少在概念上,我不难找出解决特定问题的算法。它更多地与项目的大局、整体结构和设计有关。

鉴于此,您能否指出一种模式,提供一些技巧或最佳实践,以在实际编写代码之前对所有内容进行排序,以便我不会在这个过程中迷失自己?

software-design mips mips32

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

混合字节

我的计算机似乎以bigendian顺序存储整数.例如0xFF440022是4 282 646 562.但是它以小端顺序存储字符串数据?IE浏览器.你好世界就像lleh o wo rld.为什么是这样?这台机器被认为是big-endian还是little-endian?

assembly mips endianness

-1
推荐指数
1
解决办法
607
查看次数

MIPS 汇编中的 XOR 使用

好吧,我很确定我已经用完了所有可能的 XOR 变体来将 $s0 与 $s1 交换,但是,我仍然无法让它工作!这是 MIPS 大会,我正在使用 MARS。请问有人可以为我提供解决方案吗?

您将不胜感激!

assembly mips xor

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

了解此 MIPS 代码的工作原理

所以我的教授把这个问题放在他的幻灯片中,这就是他的答案,不明白他如何将其转换为 MIPS,所以如果有人可以帮助解释这一点,那就太好了。变量i在$s3中,k在$s5中,save[]的基地址在$s6中

他给了我们这个 C 代码:

    while( save[i] == k ) {
        i += 1;
    }
Run Code Online (Sandbox Code Playgroud)

并给了我们这个 MIPS 代码作为回应:

Loop: sll $t1, $s3, 2
      add $t1, $t1, $s6
      lw $t0, 0($t1)
      bne $t0, $s5, Exit
      addi $s3, $s3, 1
      j Loop
Exit:
Run Code Online (Sandbox Code Playgroud)

c mips

-1
推荐指数
1
解决办法
1949
查看次数

偏移量在这行 MIPS 代码中做了什么:lw $s0,4($t0)?

不确定偏移量是否意味着将指令提取并存储在距“加载字”程序计数器一行(4 字节)的地方到寄存器 $s0,4($t0) 中。这在内存中是如何工作的?如果可能,请提供示例。

assembly mips cpu-architecture cpu-registers

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

MIPS-32 操作码格式:大写还是小写?

我目前正在学习计算机组织课程,并且一直在研究 MIPS-32 架构。我注意到我们使用的书列出的操作码全部为小写,而教授列出的操作码全部为大写。我在不同的网站上查找了这一点,发现有些网站的操作码全部为大写,而其他网站的操作码全部为小写。我在堆栈溢出上查找了类似的问题,但没有找到。

例如,要添加,我们可以这样:

ADD $s2, $s1, $s0
Run Code Online (Sandbox Code Playgroud)

但是,其他网站和本书将其描述为:

add $s2, $s1, $s0
Run Code Online (Sandbox Code Playgroud)

谁能澄清哪种操作码格式更传统?我还没有构建汇编语言程序,所以我不确定操作码是否区分大小写;他们是吗?

注:我使用的书是David A. Patterson 和 John L. Hennessy 编写的《Computer Organization and Design MIPS Edition: The Hardware/Software Interface》。

assembly mips opcode mips32

-1
推荐指数
1
解决办法
600
查看次数

如何将涉及数组的高级语言语句转换为MIPS 32位?

这是高级函数:J[6] = K[d-e]

d = $t0,e = $t1,J = $s1,K = $s2,最终结果放入$s4

到目前为止我有:

lw $t2, 24($s1) #Load J[6] into $t2
sub $t3, $t0, $t1 #Subtract e from d to $t3
Run Code Online (Sandbox Code Playgroud)

我知道我不能做的是lw $t4, $t3($s2)但我不知道如何翻译 K[$t0 - $t1]。

arrays assembly mips mips32

-2
推荐指数
1
解决办法
227
查看次数

从C转换为MIPS

我需要将其翻译成MIPS汇编(在Mars Assembler上工作)

void mm ( double x[][], double y[][], double z[][], int n)
{
    int i,j;
    for (i=0; i !=n; i++)
        for (j=0; j !=n; j++)
            z[i][j] = 0.0;
    for (k=0; k !=n; k++)
        z[i][j] = z[i][j] + x[i][k] * y[k][j];
}
Run Code Online (Sandbox Code Playgroud)

c assembly mips

-3
推荐指数
1
解决办法
355
查看次数