Wie C-Sprache in eine binäre Sprache des zugrunde liegenden Computer umgewandelt wird (MIPS)

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

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.

发布了3 篇原创文章 · 获赞 0 · 访问量 69

Ich denke du magst

Origin blog.csdn.net/taipoucha5799/article/details/104956366
Empfohlen
Rangfolge