使用说明sra和使用srl说明时有什么变化?我无法理解两者之间的区别。使用的语言是 MIPS 汇编语言。
sll $t1,$t0,2
sra $t2,$t0,2
sll $t1,$t0,2
srl $t2,$t0,2
Run Code Online (Sandbox Code Playgroud) 我正在用 Verilog 创建一个模拟。
我有一个内存模块,加载了 MIPS 指令,如下所示......
20082000
200d2030
8dad0000
240a0001
ad0a0000
..
..
..
Run Code Online (Sandbox Code Playgroud)
存储模块将指令输出到“控制”模块的输入端,该模块有以下信号:
RegDst、跳转、分支、MemRead、MemtoReg、ALUOp、MemWrite、ALUSrc、RegWrite
将为内存模块加载的支持指令列表生成信号值。add、addi等指令
我如何知道对于给定指令信号是真还是假?
我刚刚开始使用 Mips,所以这可能听起来很简单,但是:当我在没有
li $v0,10 指令的情况下
编写上面的代码时,我收到一条错误消息:内存地址超出范围
当我添加它时,它没有任何警告。
这意味着什么?
.text
.globl main
main:
li $t1,27
li $t2,2
mulou $t3,$t1,$t2
li $v0,10
syscall
Run Code Online (Sandbox Code Playgroud) 寄存器间接和基本加偏移有什么区别,它如何影响您在MIPS架构上编写汇编的方式?我认为这意味着你只能在一条指令中引用寄存器,那个寄存器必须指向更多的指令?
我如何创建一个char数组并访问MIPS中的那些字符?我正在做一个项目,其中一部分就是这样做.我理解如何使用整数并且无法在线找到关于如何处理chars的任何参考,特别是我试图移植...
static char hexdigits[16] = "0123456789ABCDEF";
Run Code Online (Sandbox Code Playgroud)
这是我失败的尝试:
hexarray: .word '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F' #declare memory space for our hex array
Run Code Online (Sandbox Code Playgroud)
编辑:如果有人可以提供一个例子如何打印出其中一个项目,这将是非常有帮助的(你可以修改我想要的任何代码).因为我只是得到一个内存地址错误.
我正在生成mips反汇编以模拟它.我需要有大数据来处理它,但我不想拥有大的汇编文件,所以我想要处理一个大的未初始化的数组(然后可能在我的模拟器中初始化它...).所以我需要这个数组是全局的.并且全局变量似乎放在.bss部分,以便在实际访问页面时进行初始化.问题是在我的二进制文件中,数组在.bss部分,但显式填充为零...如果我正确理解我在互联网上找到的内容,这不是预期的行为......有没有办法说编译器(或链接器,或者加载器......我不明白哪一个为此做了什么)在这个数组中没有真正归零?或者,我们可以在编译时有一个选项,还是一个C指令,说我们不希望这个数组用0初始化?(我尝试使用属性更改数组部分,但仍使用0初始化).
顺便说一句,我用objdump生成我的反汇编文件,它通常跳过零块,但我真的需要反汇编其他的零块,所以我使用"-z"选项.
我真正不明白的是,无论我看到的是什么,都说.bss部分并没有真正把二进制文件中的零写入...
似乎两者都是出于各种原因使用,ARM用于功耗,x86用于扩展功能.
我仍然很好奇,因为我的计算机科学文化有点空洞,像x86(或其前辈)这样的CISC芯片的真正目的是什么.
如果他们使用RISC,我们的计算机会更好吗(例如,如果微软将其内核和工具链移植到RISC,如MIPS或ARM)?或者作为一项任务完成任务是不可能的?
我正在阅读CISC的目的是能够接近更高级别的语言,我觉得这很奇怪.英特尔和微软之间是否有交易专注于x86?
如何在嵌入式Linux机器上运行valgrind来查找主软件中的内存泄漏?
在rcS脚本中,我运行如下:
./main_app
Run Code Online (Sandbox Code Playgroud)
如何将./main_app程序与valgrind联系起来?main_app进程永远不会终止.
我想不断将数据记录到文件中.此外,我想访问日志文件而不终止该main_app过程.我可以做telnet并可以访问日志文件.但问题是,除非处理程序关闭,我怎么能打开文件,即我不太明白哪个valgrind参数控制如何将内存泄漏记录到文件中.请帮忙!
我的最终目标是以这种方式在MIPS中编写代码
temp = 0;
if (x == y)
temp = 1
...rest of the program...
Run Code Online (Sandbox Code Playgroud)
我应该为==,!=,<=,> =,<,>写它
我想到了这样的事情:
li $t1 0
beq $r1 $r2 Temp1
/**rest of the program...**/
Temp1:
li $t1 1
(1) /** how do I return to rest of the program? **/
Run Code Online (Sandbox Code Playgroud)
我在mips中看到了BGEZAL命令(beq的insetad),该命令允许我放入(1)行
jr $ra
Run Code Online (Sandbox Code Playgroud)
但我没有找到适合所有情况的命令:bge,bne,neq等。
我的问题 :
所有情况下进行此分支和链接的简单方法是什么?
我的意思是,如果发生某些情况,请分支到标签,并将pc + 4的地址存储在$ ra中,以便返回代码?
另外,我无法创建另一个标签来表示程序的其余部分(并跳转它),我必须在$ ra中以某种方式返回,因为它是从基于Java的代码到mips的转换
谢谢。