首页 > 编程语言 >【MIPS汇编】ADDI,ADDIU,ADD,ADDU的区别、有符号无符号的谬误

【MIPS汇编】ADDI,ADDIU,ADD,ADDU的区别、有符号无符号的谬误

时间:2023-05-11 11:36:18浏览次数:53  
标签:rt ADDU rs 符号 rd ADD 寄存器 溢出

介绍

ADDI、ADDIU:加立即数,区别在于是否检测溢出。

Format: ADDI rt, rs, immediate

rt = rs + immediate

To add a constant to a 32-bit integer. If overflow occurs, then trap.

Format: ADDIU rt, rs, immediate

rt = rs + immediate

To add a constant to a 32-bit integer

ADD、ADDU:加寄存器,区别在于是否检测溢出。

Format: ADD rd, rs, rt

rd = rs + rt

To add 32-bit integers. If an overflow occurs, then trap.

Format: ADDU rd, rs, rt

rd = rs + rt

To add 32-bit integers

可知,在忽略溢出的前提下,ADDI与ADDIU等价,ADD与ADDU等价。原因如下

分析

1、忽略溢出,addi与addiu等价

addi是加立即数指令,支持溢出检测,具体表现为:遇到溢出时,溢出错误标志变为高电平,传送到控制器cu中,导致此时的寄存器写使能信号regwr无效,最终结果为不将运算结果写入目的寄存器。

addiu是加立即数指令,不受溢出限制,具体表现为:遇到溢出时,对溢出的结果进行32bit求模,将求模结果写入目的寄存器中,因而不受溢出限制。

在忽略溢出的前提下,addi和addiu都能计算出溢出后的结果(进行32bit求模),并且将结果写入目的寄存器中,因此二者是等价的。

2、忽略溢出,add与addu等价

Add是将rs与rt中的值相加,结果存储在rd寄存器中。检测溢出。如果不溢出,将结果存储在rd寄存器中,如果溢出,抛出溢出异常,不改变rd中的值。

Addu是将rs与rt中的值相加,结果存储在rd寄存器中。不检测溢出,如果溢出,不会抛出异常。
add是有符号数加法,addu是"无符号数"加法,但是对于cpu来说,都是一样的,不管有没有符号位,都是从最低位加,进位,一直到最高位。

在忽略溢出的条件下,无论是否溢出,二者都将计算结果存入rd中,因此二者是等价的。

结论

对于CPU来说,有符号或者无符号都不重要。他们的运算都是一样的,不管有没有符号位,都是从最低位加,进位,一直到最高位,区别在于是否具有溢出检测。

所以,ADDADDU都可以适用于有符号/无符号数的加法,其区别只是是否具有溢出检测

原文链接:https://blog.csdn.net/sinat_42483341/article/details/89511856

相关书籍:MIPS32 Architecture For Programmers

标签:rt,ADDU,rs,符号,rd,ADD,寄存器,溢出
From: https://www.cnblogs.com/liulangbxc/p/17390549.html

相关文章

  • HTML特殊符号
    3.特殊符号3.1尖角号-<左尖角号<->右尖角号>3.2空格-&nbsp;宽度受字体影响-&emsp;宽度是1个中文字符宽度,基本不受字体影响3.3版权-&copy;3.4商标-&trade;-&reg;3.5与号-&amp;3.6人民币-&yen;3.7摄氏度-&deg;3.8特殊符号练习<......
  • Unable to open debugger port (127.0.0.11774) java.net.BindException Address alre
    解决intellijIDEA启动项目报错:Unabletoopendebuggerport(127.0.0.1:1774):java.net.BindException"Addressalreadyinuse:bind"cause(原因)端口被占用❗resolve(解决)netstat-aon|findstr"端口号"taskkill-f-pid进程号参考博客解决idea启动项目报错:U......
  • “git add -A” 和 “git add .” 的区别
    gitadd-A和gitadd.gitadd-u在功能上看似很相近,但还是存在一点差别gitadd. :他会监控工作区的状态树,使用它会把工作时的所有变化提交到暂存区,包括文件内容修改(modified)以及新文件(new),但不包括被删除的文件。gitadd-u :他仅监控已经被add的文件(即trackedfile),他会......
  • MFC-GetProcAddress获取动态链接库中函数的地址
     HMODULEhmodule=::GetModuleHandle(_T("kernel32.dll"));//获取动态链接库的模块句柄typedefDWORD(*p)(void);//声明函数指针数据类型charch[]="GetCurrentThreadId";//【特别注意:这个函数名必须是ANSI的char类型】pf=(p):......
  • 无法解析符号 'Date'
    在程序运行的过程中无法导入,请关闭程序后正在导入  ......
  • 使用git add添加完文件,想要撤销
    gitresetHEAD<file>...参考https://git-scm.com/book/zh/v1/Git-%E5%9F%BA%E7%A1%80-%E6%92%A4%E6%B6%88%E6%93%8D%E4%BD%9C......
  • cmake add to linker from CLI
    CMAKE_EXE_LINKER_FLAGSCMAKE_MODULE_LINKER_FLAGSCMAKE_SHARED_LINKER_FLAGSCMAKE_STATIC_LINKER_FLAGShttps://cmake.org/cmake/help/latest/command/target_link_options.htmlhttps://stackoverflow.com/questions/24532853/how-can-i-add-linker-flag-for-libraries......
  • 【VBA】如何在Word表格里插入特殊符号
    Word里有插入特殊符号的功能,如下图。通过编程语言实现在Word表格插入特殊符号操作,可以参考下面VBA代码。ActiveDocument.Tables(1).Range.Cells(2).SelectSelection.MoveEndUnit:=wdCharacter,Count:=-1Selection.InsertSymbolFont:="Wingdings",_CharacterNumber:=-38......
  • flask--app.add_url_rule()函数 和 类视图详解
    flask--app.add_url_rule()函数和类视图详解app.add_url_rule()函数在flask中,我们知道给一个函数添加url的时候,只需要使用装饰器@app.route('')装饰对应的函数就可以了。为什么这个装饰器就可以给函数视图添加url规则呢?查看app.route()源码发现,这个装饰器在里面调用的另外一......
  • 门电路简称和图形符号
    与:and或:or非:not与非:nand或非:nor同或:xnor异或:xor双向传输门:pass三态门:tri-pass缓冲器:buf高电平:buf(Y,1'b1);低电平:buf(Y,1'b0);高阻态:buf(Y,1'bz);延迟逻辑:delay-cell锁存器:latch基本逻辑门电路图形符号表C1列出了基本逻辑门电路的国际图形符号和限定符号(GB/T4728.12-1996)、国......