Cómo el lenguaje C se convierte en un lenguaje binario de la computadora subyacente (MIPS)

A partir del artículo sólo quiero hacer una pregunta: escribir un montón de código, no es curioso sobre el código de computadora subyacente es lo que?

El siguiente paso a paso para explorar este proceso. En primer lugar, tenemos que tener una comprensión preliminar, una vez izquierda a derecha compilador , ensamblador.

lenguaje de alto nivel (lenguaje C) binario lenguaje de máquina en lenguaje ensamblador

int add (int a, int b) {add: 
    int c; agregar $ a2, $ a0, a1 $ // c = a + b 00000000100001010011000000100000 
    c = a + b;                  ->编译                agregar $ v0, $ A2, $ cero                ->汇编        00000000110000000001000000100000
    retorno c; jr $ ra 00000011111000000000000000001000
}

Sobre $ A2, $ registro RA y así sucesivamente, podemos ver en este artículo de blog resume los principales MIPS registros de propósito general  .

En primer lugar tenemos que entender el concepto de un ordenador - el proceso , lo que significa que los parámetros de subrutinas proporcionado para realizar ciertas tareas almacenados. Claramente, el procedimiento anteriormente descrito es el lenguaje C que añadir lógica de funcionamiento de ejecución en la CPU. 32 MIPS registros de dispensación de llamada a procedimiento es seguir las siguientes convenciones:

  • $ A0 ~ $ a3: se utiliza para pasar parámetros de cuatro registro de parámetros. Como se describió anteriormente A0 es el $ A, $ B A1 que es, ya que el registro de parámetros también es suficiente, por lo  $ A2 es el c.
  • $ ~ $ V0 V1: dos para los registros de valor de retorno.
  • $ Ra: Regreso al punto de empezar a devolver el registro de direcciones. Como se ha descrito anteriormente jr $ ra, lo que significa que un salto incondicional a la dirección de registro establecido. En términos sencillos, $ ra es la dirección de la instrucción de llamada a procedimiento almacenado previamente, después de realizar el proceso salta a la dirección de la instrucción antes de que el proceso de llamada, siga haciendo cálculos de seguimiento. int a1 = add (1,2), añadir, después de la lógica de ejecución de proceso, jr $ ra continúa de vuelta calcula a partir de a1. Debido a que el proceso es probable que llame a un programa en múltiples puntos . Es decir, int a2 = add (3,4); jr $ ra Después de la ejecución continúa calcula a2 espalda. Código puede ser como sigue:

#include <stdio.h>

int add (int a, int b) {
    int c;
    c = a + b;
    c retorno;
}

void main () {
    int a1 = agregar (1,2);
    int a2 = add (3,4);
}

En resumen, debemos saber por qué esto es, $ a0 a, $ a1 es el b, $ a2 es el c a. A continuación, seguimos, cómo el lenguaje ensamblador en lenguaje de programación binaria. Sin duda, todos sabemos, no importa lo que el programa, el último 01 están presentes en la parte inferior del equipo.

A continuación, seguimos, en comparación Todo el mundo quiere saber cómo el lenguaje ensamblador se convierte en lenguaje de máquina binario. La siguiente es una instrucción de MIPS y el significado de cada nombre de campo. Tipo I y R se divide en dos tipos formato de instrucción.

Tipo R : un registro, se realiza una operación lógica, tales como operaciones de suma y resta.

en rs rt rd SMT func
# 6 5 5 5 5 # 6
  •  op: instrucciones básicas, comúnmente conocido como código de operación (código de operación).
  • RS: registros una primera fuente de operando.
  • rt: el funcionamiento de un segundo número de registro fuente.
  • rd: registro de destino para almacenar los resultados de operación.
  • shamt: la cantidad de desplazamiento.
  • código de función (código de función): func.

Escriba el I : para la instrucción de transferencia de datos inmediata, es decir inmediata, tales como SW, LW y otras operaciones.

en rs rt constante y adress
# 6 5 5 # 16

 Éstos son los valores comunes MPIS instrucciones para dar a todos una mirada:

 instrucción

formato

en

rs

rt

rd

muchos

hinct

habla a

añadir

R

0

reg

reg

reg

0

32

n / A

Iw (palabra de carga)

yo

35

reg

norte. un

norte. un norte. un norte. un habla a

En la tabla anterior, "reg" se registra un número de referencia (de 0 a 31), "dirección" representa la dirección de 16 bits, "na". (No aplicable) indica que el campo no está presente en el formato de instrucciones. Tenga en cuenta que, la operación de instrucción para agregar hardware a cabo se determina basándose en el valor de HMCT campo: add (32) o restar (34)

Por lo tanto, para la conversión anterior, se puede obtener:

    lenguaje ensamblador                                             

 añadir: 

  agregar $ A2, $ a0, a1 $ // c = a + b                    
  agregar $ v0, $ A2, $ cero              
  jr $ ra        
}

en

rs

rt

rd

Dirección / shumt

hinct

0

4

5

6

0

32

6

0

2 0 32
0 31 0 0 0 8

Convertido a binario:

en

rs

rt

rd

Dirección / shumt

hinct

000000

00100

00101

00110

00000

100000 

000000 

00110

00000

00010 00000 100000
000000 11111 00000 00000 00000 001000

Aquí, vamos a tener un poco de sentimiento, un verdadero programa de instrucción está involucrado en una gran cantidad de cómputo de instrucciones. Mucho más que tres, por lo que tenemos que aprender a fortalecer y profundizar la comprensión de la computadora. 

referencias:

[1] Organización de Computadores y Diseño: interfaz de hardware / software (el libro quinta edición original) Pekín: Prensa de la Industria Mecánica, 2015.

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

Supongo que te gusta

Origin blog.csdn.net/taipoucha5799/article/details/104956366
Recomendado
Clasificación