【计算机本科补全计划】指令:计算机的语言(MIPS) --计算机组成原理

正文之前

今天的主题就是,重新学一次汇编语言,不过总感觉跟单片机的汇编语言没啥差别,不过就是地址变宽,然后一些限制多了不少,因为计算机要进行大量的运算,所以更加全面并且更加开阔吧,毕竟单片机只是嵌入式常用,属于比较低端的,不过操作其实差不多,幸甚至哉~~


正文

1、要让计算机服从指挥,就必须要有计算机的语言,计算机语言的基本单词称之为指令,一台计算机的所有指令称之为该计算机的指令集。(MIPS讲述)


2、在MIPS体系结构中,对寄存器和存储器的操作如下:

寄存器的大小为32位,由于32位为一组的情况很常见,所以称之为 “字(word)”,另外由于MIPS使用字节编址,所以连续的地址字的地址也就相差4。另外,处理器只能将少量的数据保存在寄存器上,剩下的数以十亿记的数据都是放在存储器上的。比如数据结构和数组等。所以MIPS体系中要对存储器和寄存器之间的数据进行传输,就有了 数据传送指令 。其具体的实现方法是:讲一个基址存于寄存器中,然后通过数据传送指令进行取值,所以当使用数据传送指令取存储器中的数据(字)的时候,其地址偏移量是基址+4*逻辑偏移量。按字节编址的情况下,所有字的起始地址必须是4的倍数,这就是 对齐限制


3、计算机硬件设计的三大原则:

  • 简单源于规整
  • 越小越快
  • 优秀的设计需要适宜的折中方案

4、根据以上的结论,可以得出以下两个结论:

  • 存储器一定比寄存器慢,符合越小越快原则,因为存储器的数量远大于寄存器
  • 寄存器中的数据更绒里利用。访问时间短,吞吐率高,功耗更小。

5、在MIPS汇编语言中,有如下几个通行定理:

对立即数(也就是常数1,2··· 这些存放在存储器中的数据)的操作一般都是相对于对寄存器操作的指令加上一个i(immediately),对于无符号数则加上一个u,默认情况下是对寄存器进行有符号数的操作。另外注意,由于“0”这个数用处远比别的常数大,所以专门在寄存器zero中存放了0,且恒为0;至于为什么大?有的时候是要判断一个数是否小于0.有时候是要用0进行操作,比如异或,或非等一些操作可能用的上,所以其概率远远的高于别的常数,这就是前面讲过的“加速大概率事件发生”的重要思想的体现!


6、有符号数与无符号数。

目前普遍采用二进制补码的方式实现负数,为什么呢?我也是一阵苦恼,后来慢慢的摸索发现,二进制补码可以直接进行想加操作就得出其具体的数值,与无符号数完美的统一,具体的实现方式是把符号位,也就是最左端的一位作为符号位,然后在计算机十进制数值的时候,对符号位的十进制值取负数,然后与后面的位数的十进制数相加,就会得到其表示的负数,而取反码这一方式虽然正数负数对称,但是存在了两个0 的问题,对于粗心的程序员是很麻烦的,另外,求一个正数的相反数的补码表现形式很简单,补码=反码+1,比如0010 表示+2,第一位是符号位, 如果要取-2,那么只需要先变为1101,然后加1 得到1110,这就是二进制的-2的补码表示。转换为十进制的时候就是

-1 * 2^3+1 * 2^2+1 * 2^1+0 * 2^0=-2。当然,这一公式仅仅针对负数,正数的反码补码都是原码。


7、符号扩展。

很多时候存在了把十六位数转换为32位数的情况。这个时候,只需要把符号位复制16次,并且把原来的16位数放在右边,符号位复制后的16个数放在左边,组合之后的32位数就是32位的符号数了。然后你再算相反数的补码表示,就会发现,好神奇哟~~


8、计算机中的指令其实是早期的计算机工程师们为了方便自己编程而实现的,但是计算机本质上是只接受二进制语言的,也就是机器语言,所以所有的指令语言都存在一个转换过程,也就是前面说过的。汇编语言到机器语言的翻译,操作志林分为R I(J)两(3)种型号,前者对寄存器进行操作,后者对因为对存储器进行取址等操作,所以在32位的操作指令中后16全部划归地址表示。


9、当今计算机基于以下两个重要准则来构建:(这些原则引出了存储程序的概念,释放了计算机的巨大潜力。好处就是程序可以被当成二进制数的文件发行)

  • 指令用数的形式表示
  • 和数据一样,程序存储在存储器中,并且可以读写。

10、逻辑操作:

  • AND 和
  • OR 或
  • NOT(引入NOR或非操作,实现NOT(A)= NOT (A OR 0 )= A NOR 0 )
  • XOR 异或

11、决策指令:(可用这些指令进行判断,循环,小于,相等,小于或等于,大于,大于或等于等操作,实现基本块)

  • beq 如果想等就跳转
  • bne 如果不相等就跳转
  • slt 小于则置位,如果第二个操作数小于第三个,那么就对第一个操作数置位1
  • slti 对立即数的小于则置位

正文之后

今天有神秘嘉宾开赴武汉,所以现在18:45写完笔记的我要先回去,然后去吃个饭,然后再去接驾咯!~~~

原文发布于微信公众号 - 工科狗和生物喵(gh_3507b116a1f8)

原文发表时间:2017-10-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏怀英的自我修炼

Java漫谈11

这次我们接着聊String,这次我们聊聊String类为什么是final的。 之所以聊这个,是因为在知乎上看了一篇帖子,看完后让我对这个点有了认识,在这里跟你分...

36611
来自专栏编程坑太多

java最困扰你的那些事?又将如何解决?

1105
来自专栏点滴积累

shapeless官方指南翻译写在前面

目录 前言 Shapeless简介 The Type Astronaut's Guide to Shapeless简介 总结 一、前言        在我的20...

3737
来自专栏GopherCoder

由 Python 到 Shell

2023
来自专栏灯塔大数据

技术 | Python从零开始系列连载(五)

导读 为了解答大家初学Python时遇到各种常见问题,小灯塔特地整理了一系列从零开始的入门到熟练的系列连载 上一期学习了Python的基本运算和表达式,相信大家...

35411
来自专栏程序员互动联盟

【新技术分享】C++17 最新进展

C++标准委员会最近在夏威夷的科纳召开了一次会议,大家可能关心最新的进展,但是按照以往的情况,某些文件需要很久才会公开。会议进行的时候,大家都在忙着修订自己的文...

3446
来自专栏MixLab科技+设计实验室

关于编程语言OC之9个基础知识点

这是《给自己的一份自学IOS开发的学习清单》中的《关于编程语言OC》读书笔记系列的第1篇。 入门务必记住这9点。 1、MAC操作系统上的整个开发环境成为Coco...

3618
来自专栏惨绿少年

Python入门篇

3934
来自专栏为数不多的Android技巧

一种绕过Android P对非SDK接口限制的简单方法

众所周知,Android P 引入了针对非 SDK 接口(俗称为隐藏API)的使用限制。这是继 Android N上针对 NDK 中私有库的链接限制之后的又一次...

5693
来自专栏Java帮帮-微信公众号-技术文章全总结

02.工厂模式/抽象工厂模式

工厂模式 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在...

3083

扫码关注云+社区

领取腾讯云代金券