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 |
0 |
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.