【MIPS汇编】ADDI,ADDIU,ADD,ADDU的区别、有符号无符号的谬误
ADDI、ADDIU:加立即数,区别在于是否检测溢出。
Format: ADDI rt, rs, immediate
To add a constant to a 32-bit integer. If overflow occurs, then trap.
Format: ADDIU rt, rs, immediate
To add a constant to a 32-bit integer
ADD、ADDU:加寄存器,区别在于是否检测溢出。
Format: ADD rd, rs, rt
To add 32-bit integers. If an overflow occurs, then trap.
Format: ADDU 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来说,有符号或者无符号都不重要。他们的运算都是一样的,不管有没有符号位,都是从最低位加,进位,一直到最高位,区别在于是否具有溢出检测。
所以,ADD
和ADDU
都可以适用于有符号/无符号数的加法,其区别只是是否具有溢出检测。
附:四个指令的官方定义
MIPS32 Architecture For Programmers这本书中,对于这四个指令的定义如下:
ADDI
ADDIU
ADD
ADDU
【MIPS汇编】ADDI,ADDIU,ADD,ADDU的区别、有符号无符号的谬误相关推荐
- 计算机中符号位正负,负数在计算机中的表示+有符号无符号的区别+负数按位运算...
部分转载自:https://blog.csdn.net/kebi007/article/details/89741960 一.负数的二进制位表示法 原码:一个整数按照绝对值的大小转换成的二进制数,称为 ...
- 负数在计算机中的表示+有符号无符号的区别+负数按位运算
部分转载自:https://blog.csdn.net/kebi007/article/details/89741960 一.负数的二进制位表示法 原码:一个整数按照绝对值的大小转换成的二进制数,称为 ...
- 无符号整型和有符号整型的区别,以及无符号整型的使用
有符号整型: 无符号整型: 注意: 无符号数据表示数量,只有正值 unsigned无符号标识不会改变数据类型的字节大小 无符号型数据打印要将之前的%d,全部替换成%u,如果在vs中没有注意转换,将无符 ...
- linux mips汇编指令集,MIPS汇编与指令
一.MIPS寄存器 MIPS的系统结构及设计理念比较先进,其指令系统经过通用处理器指令体系MIPS I.MIPS II.MIPS III.MIPS IV.MIPS V,以及嵌入式指令体系MIPS16. ...
- mips汇编计算开方_清华考研辅导班-2020清华大学912计算机专业基础综合考研经验真题参考书目...
清华大学912计算机专业基础综合考试科目,2020年初试时间安排为12月22日下午14:00-17:00业务课二进行笔试,清华大学自主命题,考试时间3小时. 一.适用院系及专业 清华大学计算机科学与技 ...
- MIPS介绍与MIPS汇编的常用指令
描述 CTF做题时会遇见MIPS汇编的题目,而我们接触的是8086汇编,IDA是不能反汇编的需要自己了解一些MIPS方面的知识; 1. List 1 在不同的设备中,汇编语言对应着不同的机器语言指令集 ...
- 【汇编语言与计算机系统结构笔记17】MIPS 汇编初步
本次笔记内容: 25.MIPS汇编初步-1 26.MIPS汇编初步-2 27.MIPS指令集与汇编程序设计 注:我找到了对应内容的课件,请见我于GitHub的CS笔记仓库.因此,为了节省时间,我只记录 ...
- 计算机组成原理之MIPS汇编:冒泡排序
一. 实验目的 认识和掌握MIPS汇编语言程序设计的基本方法: 熟悉PCSpim模拟器的使用. 二. 实验内容 从键盘输入10个无符号字数并从大到小进行排序,排序结果在屏幕上显示出来. 三. 实验器材 ...
- 寄存器(3)KDB入门+MIPS汇编及汇编代码详解
KDB入门和MIPS汇编 1. KDB 介绍及进入退出命令 1.1 KDB 介绍 1.2 进入KDB及退出KDB 2. KDB 调试 2.1 断点类 2.2 内存操作类 md 2.3 堆栈跟踪类 2. ...
最新文章
- 通过conda命令卸载已安装的各种包
- button 与 input type=button 的区别【2012/07/23】
- 1.8 Boolean类
- 8 分钟了解 Kubernetes
- step1 . day8 C语言基础练习之指针和函数
- 解决Springboot文件上传报错,java.io.FileNotFoundException: D:\System\Temp\tomcat.819...00.tmp (系统找不到指定的文件。)
- java网页截图_Java实现的简单网页截屏功能示例
- 求助!C++ 实践之引入外部头文件失败
- 廖雪峰 - nodejs教程
- linux 查看各个用户下线程使用情况
- unity使用html播放器,Unity Web Player and browser communication Unity网络播放器和浏览器通信...
- python 调用海康linux下psdatacall_demo,实现获视频取码流并返回到python,以及上传信息到人脸库的方法
- 微信小程序图片转换成文字_涨知识!这个微信小程序,能将纸上文字转换成电子版...
- Unity SteamVR锁定头盔位置旋转
- 客观评价,一起看看iPhone 12是否值得你入手?
- [ ECUG 专题回顾]《再谈 CERL:详论 GO 与 ERLANG 的并发编程模型差异》-许式伟(七牛云存储 CEO)...
- strus2常用标签自己一点小小的应用
- ASP.NET Core 3.x 学习笔记(7)——Blazor
- QQ出现大规模盗号,为什么会这样?就没有解决方法了吗?
- 微信小程序 TypeError: r.apply is not a function
热门文章
- android debug bridge tools_如何优雅的管理多环境下的Android代码
- BorderDet论文解读
- Docker教程-简介
- linux wine运行效率,Wine 3.0让Windows应用在Linux上流畅运行!
- 绕过360安全卫士的部分代码
- 内核隐藏进程(源码)
- 网狐棋牌(六) DataBaseEngine 和 网狐棋牌(七) CEventService
- C++ 泛型编程(一):模板基础:函数模板,类模板,模板原理,模板匹配规则
- C语言程序设计 | 结构体,枚举,联合
- C++学习路线和参考资料