标签: mips

在Assembly中添加两个64位数字

所以我正在使用SPIM模拟器学习MIPS并且我坚持这个问题.

我想添加两个64位数字,存储在四个32位寄存器中.所以我添加了LO字节,然后是进位和HI字节.但是没有adc/addc命令,即添加进位.

所以我必须在状态寄存器中添加进位.但是,我究竟如何阅读这个寄存器?

如果$ t0是临时寄存器1,那么持有进位标志的状态寄存器的等价物是什么?

我google了很多,我仍然找不到任何甚至使用状态寄存器的例子.

assembly mips

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

从MIPS切换到x86汇编时应该知道什么?

在学校,我们已经用MIPS汇编语言编程了一段时间.我有兴趣深入研究x86程序集,我听说这有点难度(甚至我的MIPS教科书都说这个).

在进入x86世界之前,我应该知道哪些核心信息是MIPS程序员?

x86 assembly mips

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

如何在x86 linux上执行MIPS汇编程序?

是否有任何命令行解释器或x86 linux的任何其他程序集来运行MIPS汇编程序?

我希望能够编写简单的MIPS汇编程序,并在本地计算机的控制台上运行它们.

我知道SPIM但它需要X Windows,我很好奇是否有更好的选择.

编辑:原来它不需要X Windows.我仍然有SPIM的问题.在我的拙见中,这不是最好的.Qemu/Cross编译的工具链是一个更多的工作,但我有更少的怪癖.

linux x86 assembly qemu mips

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

为什么对未签名数字的MIPS操作会给出签名结果?

当我尝试在MIPS中处理无符号整数时,我执行的每个操作的结果都保持有符号(即,整数都是2的补码),即使我执行的每个操作都是无符号的:addu,multu所以第四个......

当我在该范围内打印数字时,[2^31, 2^32 - 1]我得到它们的"溢出"负值,好像它们已经签名(我猜它们是).

但是,当我尝试这样的事情:

li $v0, 1
li $a0, 2147483648                # or any bigger number
syscall
Run Code Online (Sandbox Code Playgroud)

打印的号码总是 2147483647 (2^31 - 1)

我很困惑......我错过了什么?

PS:我没有包含我的代码,因为它不是非常易读(例如汇编代码)并且抛开这个问题,似乎工作正常.如果有人认为有必要,我会马上加入!

unsigned mips

14
推荐指数
1
解决办法
9434
查看次数

有没有办法使用gcc将C转换为MIPS?

我为一个类完成了C到MIPS的转换,我想针对程序集进行检查.我听说有一种配置gcc的方法,它可以将C代码转换为MIPS架构而不是x86架构(我的计算机用户使用Intel i5处理器)并打印输出.

在Ubuntu(gcc附带)中运行终端,我用什么命令配置gcc转换为MIPS?我还需要安装什么吗?

编辑:让我澄清一下.请阅读这个.我不是在寻找使用哪种编译器,或者人们说"你可以交叉编译,但你应该使用其他没有指示如何设置的东西."

如果您要发布,至少请参阅说明.GCC附带Ubuntu.我没有关于如何安装编译器的经验,除了GCC之外,找不到其他任何内容的在线教程并不容易.然后是我需要知道的交叉编译的情况.谢谢.

c compiler-construction gcc mips

14
推荐指数
4
解决办法
3万
查看次数

MIPS - JAL混淆:$ ra = PC + 4或PC + 8?

我无法理解指令jal在MIPS处理器中的工作原理.我的两个问题是:
a)在"jal"之后存储在R31中的值是什么:PC + 4PC + 8
b)如果它真的是PC + 8,那么PC + 4上的指令会发生什么?它是在跳转之前执行还是从未执行过?

在Patterson和Hennessy(第四版),第113页:

"跳转和链接指令:跳转到并寻址并同时将下一条指令的地址保存在寄存器中的指令(MIPS中的$ ra)"

"程序计数器(PC):包含正在执行的程序中的指令地址的寄存器"

阅读完这两个陈述之后,$ ra中保存的值应为(PC + 4).

但是,在本书附带的MIPS参考数据(绿卡)中,jal指令的算法定义如下:
"跳转和链接:jal:J:R [31] = PC + 8; PC = JumpAddr"

网站还声明"它真的是PC + 8 ",但奇怪的是,之后它说由于流水线是一个高级主题"我们假设返回地址是PC + 4 ".
我来自8086汇编,所以我知道返回地址和跟随地址之间存在很大差异,因为如果我假设某些事情并非如此,那么程序将无法工作.谢谢.

mips program-counter

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

add和addu之间的区别

我对add和addu之间的区别感到困惑.

MIPS指令参考说:

  • 添加(溢出)
  • 添加无符号(无溢出)

我的理解是使用带有签名操作数的add和带有无符号操作数的addu.

但是让我们考虑这个例子(只有6位):

overflow
|
V
1 | 1 1 1  <- carry
  | 1 1 1 1 0 1 +
  | 1 1 1 1 1 0 =
-----------------
  | 1 1 1 0 1 1

这是我的理由:

  • 如果我考虑第一个和第二个操作数有符号数(二进制补码),那么结果是正确的(-3 + -2 = -5),我不想要溢出异常.所以我会使用addu来避免这个异常,但是,虽然结果是一样的,但名称建议使用addu是为了无符号数!
  • 如果我考虑第一个和第二个操作数无符号数,那么我想要引发一个异常(因为61 + 62不等于59).因此,我会使用add来引发异常,而不是addu,正如名称所暗示的那样.

现在我的问题是:

  • 假设操作数已签名(上例中为负数),我应该使用addu(正如我的推理所示)还是应该使用add(顾名思义)?
  • 假设操作数是无符号(正数),我应该使用add(如我的推理所示)还是addu(顾名思义)?

add mips isa

14
推荐指数
4
解决办法
3万
查看次数

CMake:C编译器无法编译简单的测试程序

我正在尝试针对Mips处理器交叉编译Azure IoT SDKC。使用较旧版本的CMake(2.8.12.2)交叉编译同一SDK的较旧版本是否可以正常工作,因此我怀疑它本身就是代码。我猜这是Mips GCC编译器。

错误信息:

CMake Error at /usr/share/cmake-3.10/Modules/CMakeTestCCompiler.cmake:52 (message):
  The C compiler

    "/usr/local/mipsisa32r2el/r23/bin/mipsisa32r2el-axis-linux-gnu-gcc"

  is not able to compile a simple test program.

  It fails with the following output:

    Change Dir: /home/axis/azure-iot-sdk-c/cmake/iotsdk_linux/CMakeFiles/CMakeTmp

    Run Build Command:"/usr/bin/make" "cmTC_2cc84/fast"
    /usr/bin/make -f CMakeFiles/cmTC_2cc84.dir/build.make CMakeFiles/cmTC_2cc84.dir/build
    make[1]: Entering directory '/home/axis/azure-iot-sdk-c/cmake/iotsdk_linux/CMakeFiles/CMakeTmp'
    Building C object CMakeFiles/cmTC_2cc84.dir/testCCompiler.c.o
    /usr/local/mipsisa32r2el/r23/bin/mipsisa32r2el-axis-linux-gnu-gcc --sysroot=/usr/local/mipsisa32r2el/r23    -o CMakeFiles/cmTC_2cc84.dir/testCCompiler.c.o   -c /home/axis/azure-iot-sdk-c/cmake/iotsdk_linux/CMakeFiles/CMakeTmp/testCCompiler.c
    Linking C executable cmTC_2cc84
    /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_2cc84.dir/link.txt --verbose=1
    /usr/local/mipsisa32r2el/r23/bin/mipsisa32r2el-axis-linux-gnu-gcc --sysroot=/usr/local/mipsisa32r2el/r23      -rdynamic CMakeFiles/cmTC_2cc84.dir/testCCompiler.c.o  -o cmTC_2cc84 
    /usr/local/mipsisa32r2el/r23/lib/gcc/mipsisa32r2el-axis-linux-gnu/4.7.2/../../../../mipsisa32r2el-axis-linux-gnu/bin/ld: this linker was not configured to use sysroots
    collect2: error: …
Run Code Online (Sandbox Code Playgroud)

gcc mips cmake cross-compiling

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

我在哪里可以找到*all*MIPS指令的描述,

有谁知道我可以找到32位MIPS指令/操作码列表的网站,具有以下功能:

  • 清楚地区分真实操作码和汇编语言宏
  • 描述指令行为,包括取决于权限级别的差异.
  • 指示引入/修改指令的指令集修订版(例如MIPS I,MIPS II,MIPS32等)
  • 包括特权指令,例如系统调用.

我知道很多网站都记录了指令集的"一部分",主要用于教学目的.他们倾向于遗漏或仅部分描述浮点和特权指令.

如果你想知道,我正在研究MIL处理器子集的Verilog代码,并试图弄清楚它在多大程度上符合任何真正的MIPS处理器的指令集!谢谢你的任何指示.

assembly reference mips instruction-set

13
推荐指数
2
解决办法
4466
查看次数

如何交叉编译MIPS?

我有一个类似于Dreambox的DVB接收器(机顶盒),它有MIPS cpu

嵌入了Linux,我可以用telnet连接它

问题是如何在C中编译简单的" Hello World "应用程序?哪里有工具链,SDK

c mips cross-compiling embedded-linux toolchain

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