私は質問をしたい資料の冒頭:あなたは根本的なコンピュータコード好奇心じゃない、多くのコードを書くことは何ですか?
ステップによって次のステップは、このプロセスを探求します。まず第一に、我々は左から右へと、予備的な理解を持っている必要があり、コンパイラ、アセンブラ。
高級言語(C言語)バイナリの機械語、アセンブリ言語
int型の追加(int型B、INT){追加:
INT C。$ A2を追加し、$ A0、A1 $ // C = A + B 00000000100001010011000000100000
C = A + B; - >编译 $ V0、$ A2、$ゼロを追加 - >汇编 00000000110000000001000000100000
リターンcを、JR $ RA 00000011111000000000000000001000
}
$ A2について、$の登録など、RA、我々はこのブログの記事を見ることができ、メインまとめたMIPS汎用レジスタを 。
-まず、コンピュータの概念を理解する必要があるプロセスを、サブルーチンのパラメータが保存された特定のタスクを実行するために提供されることを意味します。端的に、上述したプロセスは、CPUで実行機能のロジックを追加するC言語です。プロシージャ・コールを分配する32個のMIPSのレジスタは、次の規則に従うことです。
- $ A0〜$ A3:パラメータを4つのパラメータレジスタを渡すために使用されます。A0、上述のように、パラメータレジスタは、また十分であるので、ある$ A、$ B A1で $ A2はCです。
- $ V0〜$ V1:戻り値レジスタのための2つ。
- $ RA:アドレスレジスタを戻すための戻し開始点を。アドレスへの無条件ジャンプが確立し登録することを意味し、JR $ RA前述しました。素人の面では、$ Raは事前にストアドプロシージャ呼び出し命令のアドレスである、処理を行った後のフォローアップの計算を行うために引き続き、呼処理前の命令アドレスにジャンプします。INT A1 =(1,2)を追加する処理実行ロジック後追加、JR $ RAバックA1から算出し続けます。プロセスは、複数のポイントでプログラムを呼び出す可能性があるため。即ちINT A2 =(3,4)を追加し、JR $ RA実行を算出a2をバック継続後。次のようにコードは次のようになります。
書式#include <stdio.hに>
int型の追加(INT BをINT){
int型、C。
C = A + B。
Cを返します。
}ボイドメイン(){
int型A1 =追加(1,2)。
INT A2 =(3,4)を加えます。
}
それは、A0 $である理由を要約すると、我々が知っておくべき、$ a1はBである、$ A2はC Aです。次に、我々はどのようにアセンブリ言語バイナリプログラミング言語に、続けています。確かに我々はすべて知っている、何があっプログラム、最後の01は、コンピュータの底面に存在しています。
次に、我々は引き続き、比較に誰もがアセンブリ言語は、バイナリ機械語に変換する方法を知りたいです。以下は、MIPS命令と、各フィールド名の意味です。タイプIとRの2種類の命令形式に分割されます。
タイプR:レジスタ、例えば加減算などの論理演算を行います。
上の | RS | RT | RD | SMT | FUNCT |
6位 | 5位 | 5位 | 5位 | 5位 | 6位 |
- OP:基本的な取扱説明書は、一般にオペレーションコード(オペコード)と呼ばれます。
- RS:最初のソースオペランドのレジスタ。
- RT:第2のソースレジスタ番号を操作します。
- RD:演算結果を格納するためのデスティネーションレジスタ。
- shamt:変位量。
- FUNCT:機能コード(ファンクションコード)。
I型:そのようなSW、LWおよびその他の操作として即時、即ち即値データ転送命令、のため。
上の | RS | RT | 定数および住所 | ||
6位 | 5位 | 5位 | 16位 |
ここでは誰もが外観を与えるために共通の値MPIS命令です。
命令 |
フォーマット |
上の |
RS |
RT |
RD |
多くの |
hinct |
住所 |
追加 |
R |
0 |
REG |
REG |
REG |
0 |
32 |
NA |
IW(ロードワード) |
私 |
35 |
REG |
n個。A |
n個。A | n個。A | n個。A | 住所 |
上記の表において、「REG」(0〜31)から符号レジスタは、「アドレス」は、16ビットのアドレスを示す「NA」(該当なし)フィールドは、命令フォーマット内に存在しないことを示しています。(34)を追加(32)またはsubstract:ノートハードウェアの追加指示操作がフィールドhmctの値に基づいて決定された実行、すなわち
したがって、上記の変換のために、あなたが得ることができます:
アセンブリ言語
追加:
$ A2、$ A0を、追加$ A1 // C = A + B
$ V0、$ A2、$ゼロを追加
JR $ RA
}
上の |
RS |
RT |
RD |
アドレス/ shumt |
hinct |
0 |
4 |
5 |
6 |
0 |
32 |
0 |
6 |
0 |
2 | 0 | 32 |
0 | 31 | 0 | 0 | 0 | 8 |
バイナリに変換します:
上の |
RS |
RT |
RD |
アドレス/ shumt |
hinct |
000000 |
00100 |
00101 |
00110 |
00000 |
100000 |
000000 |
00110 |
00000 |
00010 | 00000 | 100000 |
000000 | 11111 | 00000 | 00000 | 00000 | 001000 |
ここでは、命令の実際のプログラムが命令コンピューティングの多くに関与している、気持ちで少しを持っています。はるか3よりも、私たちは、コンピュータの理解を強化し、深化することを学ぶ必要があります。
参考文献:
[1] [コンピュータの構成と設計:ハードウェア/ソフトウェア・インターフェース(オリジナルブック第5版)北京:機械工業プレス、2015。