假设有一个名为L1的标签。 在MIPS上,可以轻松做到:

beq $t1, $t2, L1

但是有没有办法使用间接寻址来做到这一点呢? 就是说,我的意思是使用一个寄存器来保存找到L1的地址。 我知道jr命令,但是我不知道如何将其用于此目的。

#1楼 票数:2 已采纳

beq的第3个参数需要立即数,而不是寄存器或内存地址。

根据本手册的第55页(PDF中的第63页), beq的范围是-128 KB至+ 128KB,这正好是有符号16位整数表示的4倍:-32 KB至+32 KB(由于指令的长度为4个字节,因此将自动应用4的乘数)。

我认为jr应该能够完成您想要的工作。 无需使用寄存器指向存储器地址XX,只需将地址XX的值加载到寄存器中并使用它进行跳转。

lw $t0, XX
jr $t0

  ask by Xpl0 translate from so

未解决问题?本站智能推荐:

1回复

MIPS-如何查找分支和跳转指令的地址值

我即将参加考试,我完全被这个问题困扰(见下文); 即使查看模型答案也无济于事。 我已经尝试阅读该主题的主要文章,但仍然不知道如何执行此操作。 如果有人可以逐步解决这个问题,我将不胜感激。 “假设下面的MIPS代码段的第一条指令位于内存地址0x10001000。在bne和j指令中e
1回复

x86和MIPS内存寻址

我对x86和MIPS上的内存寻址有疑问。 现在我在学校上计算机课程,但由于教授的解释对我来说不太清楚,因此遇到麻烦。 我对内存寻址的了解如下。 内存(堆栈)地址从上到下开始,esp(堆栈指针)指向具有最高内存的堆栈内存的顶部。 每当在堆栈上分配内存时,ebp(基本指针)就会下降并分配
2回复

将字存储在32位MIPS程序集中

我对32位MIPS汇编中的存储字指令有疑问。 假设我在数据部分中有这个: 并且内存中的向量从地址10开始(十进制基本示例)。 当我做: 标签vector被替换为10吗? 编辑: 我这样做了,但看到了起始地址,但我一无所知:如果立即数字段是16位,并且标签被vec
1回复

如何避免在MIPS的循环中对数组索引/索引进行硬编码?

例如, 我想在循环中访问数组的每个元素,对该元素执行算术运算,然后将其保存到下一个元素。 索引应在每次迭代中增加+1。 举一个简单的例子,我试图对数组中的每个先前元素求平方。 初始硬编码值为INDEX [0] = 0,ARRAY [0] = 2。 我已标记出我很困惑的地方。
1回复

将以下MIPS指令转换为32位指令

我正在尝试将以下MIPS指令转换为32位机器代码(使用Big-endian): swc1 $f1 8($t0) 我所做的是: 我只知道swc1的翻译,而其他人则不确定。 我在Google上搜索了很多,但找不到$ f1的数量。 我也阅读了该线程: 链接到类似的问题但是,我仍
1回复

如何修改Mips中.text段内的.data值?

我在.data段声明的Mips中有一个全局变量 如何在.text段中访问和修改其内容?
1回复

MIPS程序集中的面向对象的继承

我是一名计算机科学专业的学生,​​目前正在学习编译课程,我们在该课程中有一个项目旨在使用IC语言(它是Java语言的一个子集)构建编译器。 我在最后一部分需要生成MIPS程序集,而无需从IR树分配寄存器。 我试图了解对象实例如何在MIPS程序集中表示。 我确实知道我需要为每个对象实例生成
1回复

Mips32打印存储在堆栈中的字符串

我将每个字符压入堆栈,然后调用print_s函数:输出为h而不是hel 任何想法为什么它不打印字符串?