Day-2 我也...可以跟电脑娘说话吗

我也...可以跟电脑娘说话吗

tags: IT铁人

首篇不会给大家太多压力,简单介绍我们写出来的程序往下是怎麽被电脑读取的,本篇以MIPS为ISA讨论。

电脑有甚麽零件??

所谓的电脑,英文称为Computer,而compute的中文为计算,所以电脑的基本功能就是能够计算,并且如果需要大量快速运算,必定需要存取数据,所以为了造出一台电脑,我们必定需要计算的单元以及储存的单元。

运算的单元最着名的为ALU(Arithmetic logic unit),它提供了多种运算功能如加减法以及逻辑的AND、OR、XOR等等。

储存的单元则是有必须在CPU中快速拿出计算的Register、程序当下需要的存取空间Memory,不过以上的储存空间大小从Register的KB到Memory的MB而已,另外我们会装的HDD跟SSD才会往上做到GB甚至TB,不过那个不在这次的讨论范围,容杰哥跳过一下。

下图为CPU以及储存装置的示意图,右边就是我们插在主机板上一条一条的Memory,底下指的就是HDD或是SSD。

甚麽是ISA

ISA的全名为Instruction Set Architecture,如果说电脑有不同的文化,ISA就是不同的语言,ISA决定了CPU可以执行怎麽样的指令,或是同样的一个行为,需要多少个指令才能完成。

杰哥只有碰过两种ISA,分别为MIPs跟,RISC-V。

MIPS已经存在许久,杰哥一年前修课的时候,教授已经全部使用RISC-V教学了,近期甚至听说了MIPS要彻底退出,也就是说未来的CPU都不会支援MIPS的ISA了。

不过基本上学会了一种ISA,他的逻辑或是想法基本上都已经接触过了,换成另外一种不会太困难啦,我也是听说的,但就现在读书没有遇到太大的困难。

指令长怎样

因为我们写出来的指令会经过两层翻译,第一层称为Assembly language(组合语言),第二层称为Machine language,杰哥认为两者需要分开介绍。

Assembly language

首先是Assembly language,他就是很简单的语言,我们不能宣告变数,只能使用特定的编号,编号对应到每个Register,MIPS支援的指令如下图。

instruction

举例来说,如果我们需要将Register S1跟Register S2中的值相加放进Register S3,那个Assembly language的写法就会是:

add $S3 $S1 $S2

MIPS规定目的地要放在第一个,另外两个放在後面。

Machine language

另一个是Machine language,就是我们看到骇客任务中那些0和1,因为电脑只看得懂那些东西。

the matrix

MIPS只有三种类型的指令,分别为R-type、I-type、J-type。
R-type:指定三个Register
I-type:指定两个Register
J-type:跳跃

每个指令都是32bits,也就是说由32个0或1组成。
只要对照底下的表格,我们就能在Assembly language跟Machine language之间转换了。

![type](https://i.imgur.com/cg5S3QX.png =50%x50%)

R-type I-type
code code2

比如说刚刚的add $S3 $S1 $S2就变成

000000 10001 10010 10011 00000 100000

跟R-type好好比对就是

op(6) rs(5) rt(5) rd(5) shamt(5) funct(6)
000000 10001 10010 10011 00000 100000

底下是Register的10进位对照表,别忘记转换成2进位喔~
register

小试身手

In the following problems, the data table contains the values of various fields of MIPS instructions.

a. op = 0, rs = 1, rt = 2, rd = 3, shamt = 0, funct = 32
b. op = 43, rs = 16, rt = 5, immediate = 4

What is the MIPS assembly instruction described above?
What type instruction do the instructions above represent?
What is the binary representation of the instructions above?

答案下回揭晓罗~

上一篇 下一篇
杰哥的考研纪录 小学数学(bit ver.)

做出来 派大星

派大星


<<:  【从零开始的Swift开发心路历程-Day2】牛刀小试

>>:  Day 1 : 前言-为什麽要撰写这系列文章

【Day 17】- 手动更新汇率太麻烦了! 汇率爬虫搭配 OpenPyXL 做到自动读取&更新汇率!

前情提要 前一篇介绍了 openpyxl 这项可以操作 excel 的工具。 开始之前 本篇实战 【...

[DAY 13]Discord频道对话文字云分析

先前的功能需求都是自己需要才做的 所以今天就来做个工会频道的文字云了解一下我们频道常聊的主题是什麽看...

用Stack 制作Queue

记录学习内容。 以下内容和截图大多引用文章。 还不了解,内容可能有错误。 Queue 可以用 Sta...

Day10-Go结构Struct

前言 今天要介绍 Go 语言的另一种资料型态,在先前,我们介绍的变数都是储存单一的值或是多个相同型态...

第15章:管理与设定网路介绍(二)

前言 本章节,是要讲述如何查看网路设定与设定在主机上的网路资讯。 识别与取得网路介面资讯 在一台主机...