Anfang des Artikels Ich möchte nur eine Frage stellen: eine Menge Code schreiben, sind Sie über den zugrunde liegenden Computercode nicht neugierig ist , was Sie?
Der folgende Schritt für Schritt um diesen Prozess zu untersuchen. Zunächst einmal brauchen wir ein vorläufiges Verständnis haben, einmal von links nach rechts Compiler , Assembler.
Hochsprache (Sprache C) Binäre Maschinensprache Assemblersprache
int add (int a, int b) {add:
int c; $ a2 hinzufügen, $ a0, $ a1 // c = a + b 00000000100001010011000000100000
c = a + b; ->编译 plus $ v0, $ a2, $ Null ->汇编 00000000110000000001000000100000
return c; jr $ ra 00000011111000000000000000001000
}
Über $ a2, registrieren $ ra und so weiter, können wir diese Blog - Artikel fasst die wichtigsten sehen Allzweckregister MIPS .
Zuerst müssen wir das Konzept eines Computers verstehen - der Prozess , was bedeutet , dass das Unterprogramm Parameter bestimmte Aufgaben gespeichert auszuführen zur Verfügung gestellt. Ganz offensichtlich ist das oben beschriebene Verfahren der C - Sprache , die Funktionslogik fügt in der CPU ausgeführt wird . 32 MIPS Register Prozeduraufruf Abgabe ist es, den folgenden Konventionen folgen:
- $ A0 ~ $ a3: verwendete Parameter vier Parameter - Register zu übergeben. Wie oben beschrieben , ist die A0 $ A, $ B A1 , das heißt, da das Parameterregister auch ausreichend ist, so $ A2 die C.
- $ V0 ~ $ v1: zwei für das Rückgabewert-Register.
- $ Ra: Rückkehr Startpunkt zum Rückführen des Adressregisters. Wie oben jr $ ra beschrieben, was bedeutet , dass ein unbedingter Sprung an die Adresse festgelegt Register. In juristischer Hinsicht ist $ ra vorgespeicherten Prozeduraufruf Befehlsadresse, nach Durchführung des Verfahrens vor dem Aufruf Prozess Befehlsadresse springt, weiterhin Follow-up - Berechnungen zu tun. int a1 = add (1,2), hinzufügen , nachdem die Ausführungslogik Prozess jr $ ra von a1 berechnet weiter zurück. Da der Prozess wird wahrscheinlich ein Programm in mehreren Punkten nennen . D. h int a2 = add (3,4); jr $ ra Nach der Ausführung weiter zurück a2 berechnet. Code kann wie folgt sein:
#include <stdio.h>
int add (int a, int b) {
int c;
c = a + b;
c zurückkehren;
}void main () {
int a1 = Hinzufügen (1,2);
int a2 = add (3,4);
}
Zusammenfassend sollten wir wissen, warum das so ist, $ a0 a, $ a1 ist der b, ist $ a2 die c a. Als nächstes wir weitermachen, wie Assembler-Sprache in binäre Programmiersprache. Sicher wissen wir alle, egal, was das Programm, die letzten 01 in der Unterseite des Computers vorhanden sind.
Als nächst wir weitermachen, im Vergleich jeder wissen will, wie die Assemblersprache in binäre Maschinensprache umgewandelt wird. Im Folgenden ist ein MIPS-Befehls und die Bedeutung der einzelnen Feldnamen. Typ I und R in zwei Typen unterteilt Befehlsformat.
Type R : ein Register, eine logische Operation wie Addition und Subtraktion Operationen.
auf | rs | rt | rd | smt | Funkt |
# 6 | 5 | 5 | 5 | 5 | # 6 |
- op: grundlegende Betriebsanweisungen, gemeinhin als Operationscode (opcode).
- rs: einen ersten Quelloperanden-Register.
- rt: eine zweite Quellenregisterzahl arbeitet.
- rd: Zielregister für die Operationsergebnisse zu speichern.
- shamt: der Betrag der Verschiebung.
- FKT: Funktionscode (Funktionscode).
Geben Sie den I : sofort, das heißt sofort Datenübertragungsanweisung, wie SW, LW und andere Operationen.
auf | rs | rt | konstant und Adresse | ||
# 6 | 5 | 5 | # 16 |
Hier sind gemeinsame Werte Mio.PIs Anweisungen jeder einen Blick zu geben:
Anweisung |
Format |
auf |
rs |
rt |
rd |
viele |
hinct |
Adresse |
hinzufügen |
R |
0 |
reg |
reg |
reg |
0 |
32 |
n / a |
Iw (load Wort) |
ich |
35 |
reg |
n. ein |
n. ein | n. ein | n. ein | Adresse |
In der obigen Tabelle steht „reg“ ein Bezugszeichen Register (von 0 ~ 31), „Adresse“ für die 16-Bit-Adresse „na“. (Nicht zutreffend) zeigt an, dass das Feld im Befehlsformat ist nicht vorhanden. Beachten Sie, dass, die Hardware-Befehlsoperation durchgeführt wird basierend auf dem Wert des Feld hmct: add (32) oder subtrahiert (34)
Daher wird für die obigen Konvertierung können Sie erhalten:
Assembly Language
hinzufügen:
fügen Sie $ a2, $ a0, $ a1 // c = a + b plus
$ v0, $ a2, null $
jr $ ra
}
auf |
rs |
rt |
rd |
Adresse / shumt |
hinct |
0 |
4 |
5 |
6 |
0 |
32 |
0 |
6 |
0 |
2 | 0 | 32 |
0 | 31 | 0 | 0 | 0 | 8 |
Umgerechnet in binär:
auf |
rs |
rt |
rd |
Adresse / shumt |
hinct |
000000 |
00100 |
00101 |
00110 |
00000 |
100000 |
000000 |
00110 |
00000 |
00010 | 00000 | 100000 |
000000 | 11111 | 00000 | 00000 | 00000 | 001000 |
Hier werden wir ein wenig mit Gefühl, ein echtes Unterrichtsprogramm wird in vielen Instruction Computing beteiligt. Weit mehr als drei, so müssen wir lernen, zu stärken und das Verständnis des Computers zu vertiefen.
Referenzen:
[1] Rechnerorganisation und Design: Hardware / Software-Schnittstelle (das Original Buch 5. Auflage) Beijing: Mechanical Industry Press, 2015.