Diferencia entre revisiones de «Código máquina»

De Wiki~eWa
Ir a la navegaciónIr a la búsqueda
m
 
(No se muestran 39 ediciones intermedias del mismo usuario)
Línea 1: Línea 1:
El '''Lenguaje de Código máquina''' o '''de Instrucciones básicas''' que entiende la [[Arquitectura eWa]] es un [[lenguaje]] muy simple de solo deiciséis '''instrucciones básicas'''. Estas deiciséis '''instrucciones básicas''' están clasificadas en cuatro grupos.
+
El '''Lenguaje de Código máquina''' o '''de Instrucciones básicas''' que entiende la [[Arquitectura eWa]] es un [[lenguaje]] muy simple de solo deiciséis '''instrucciones básicas'''. Estas deiciséis '''instrucciones básicas''' están clasificadas en cuatro grupos. El [[Lenguaje eWamblador]] es el [[lenguaje]] basado en el [[Idioma eWa]] inmediatamente superior al '''código máquina'''.
  
 
[[Imagen:AeWa.png|thumb|450px|Gráfico ilustrativo del núcleo de la Arquitectura eWa: Sólo aparecen las [[Unidades]].]]
 
[[Imagen:AeWa.png|thumb|450px|Gráfico ilustrativo del núcleo de la Arquitectura eWa: Sólo aparecen las [[Unidades]].]]
Línea 9: Línea 9:
 
== Explicación del funcionamiento ==
 
== Explicación del funcionamiento ==
 
{{AP|Arquitectura eWa}}
 
{{AP|Arquitectura eWa}}
En cuanto se inicializa el [[Sistema Informático|sistema]], se escriben los cuatro primeros bits desde (inclusive) la dirección que indica el '''PC''', inicialmente 0x0000 en '''G''', se incrementa a 0x0001 y se escribe en '''H''', se vuelve a incrementar a 0x0002 y se escribe en '''I''', se incrementa a 0x0003 y se escribe en '''J''', y por último, se vuelve a incrementar. En total, se habrá aumentado en cuatro el valor del '''PC''' después de la lectura. Después, se ejecuta la instrucción de '''GHIJ''' (por ejemplo, '''1001''' para '''G=J=1''' y '''H=I=0'''), que coinciden con los siguientes diecicéis '''instrucciones básicas''' posibiles. Por último, se vuelve a repetir el proceso de lectura de los registros '''GHIJ'''.
+
En cuanto se inicializa el [[Sistema Informático|sistema]], se escriben los cuatro primeros bits desde (inclusive) la dirección que indica el '''PC''', inicialmente 0x0000 en '''G''', se incrementa a 0x0001 y se escribe en '''H''', se vuelve a incrementar a 0x0002 y se escribe en '''I''', se incrementa a 0x0003 y se escribe en '''J''', y por último, se vuelve a incrementar. En total, se habrá aumentado en cuatro el valor del '''PC''' después de la lectura. Después, se ejecuta la instrucción de '''GHIJ''' (por ejemplo, '''1001''' para '''G=J=1''' y '''H=I=0'''), que coinciden con una de las siguientes diecicéis '''instrucciones básicas''' posibiles. Por último, se vuelve a repetir el proceso de lectura de los registros '''GHIJ'''.
  
== Las de posición ==
+
== Las de asignación ==
 
{{AP|CPU}}
 
{{AP|CPU}}
 
=== Negativas ===
 
=== Negativas ===
Línea 73: Línea 73:
 
=== '''8''' (1000) ===
 
=== '''8''' (1000) ===
  
Escribe en el registro '''W''' de la [[CPU]] el valor del registro '''K''' de la [[CPU]].
+
Ejecuta la siguiente '''instrucción básica''' si el valor del registro '''K''' de la [[CPU]] es distinto de cero.
  
W = K;
+
O, dicho de otra manera, omite la siguiente instrucción básica si el valor del registro '''K''' de la [[CPU]] es cero.
  
== Las de ejecución ==
+
if( K == 0 ){
 +
    PC += 4;
 +
}
 +
 
 +
== La de promoción ==
  
 
=== '''9''' (1001) ===
 
=== '''9''' (1001) ===
{{AP|ABU}}
+
{{AP|CPU}}
Realiza la llamada a [[ABU#Operaciones_de_la_ABU|la función de ejecución]] de la [[ABU]], que modificará los registros '''XY''' de la [[ABU]].
+
Copiará el valor de los registros de la [[CPU]] ('''ABCD''') a los registros, también de la [[CPU]], ('''ZUVW''').
 +
cpu_promociona();
  
abu_ejecuta();
+
== La de ejecución ==
  
 
=== '''A''' (1010) ===
 
=== '''A''' (1010) ===
Línea 89: Línea 94:
 
Llama a la [[MMU#Operaciones_de_la_MMU|función de ejecución]] de la [[MMU]], que hará modificaciones en los [[MMU#Registros de la MMU|punteros]] de la [[MMU]] dependiendo de los valores pasados de los registros '''ZUVW''' de la [[CPU]].
 
Llama a la [[MMU#Operaciones_de_la_MMU|función de ejecución]] de la [[MMU]], que hará modificaciones en los [[MMU#Registros de la MMU|punteros]] de la [[MMU]] dependiendo de los valores pasados de los registros '''ZUVW''' de la [[CPU]].
  
  mmu_ejecuta( K, U, V, W );
+
  mmu_ejecuta( Z, U, V, W );
  
 
== Las de lectura y escritura ==
 
== Las de lectura y escritura ==
Línea 97: Línea 102:
 
Realiza la llamada a la [[ABU#Acceso_a_los_registros|función de acceso]] a los [[ABU#Registros de la ABU|registros]] de la [[ABU]] que, dependiendo de la naturaleza del registro de la [[ABU]] apuntado por los ''registros azules'' '''UVW''' de la [[CPU]] ('''solo lectura''' o '''solo escritura'''), escribirá su valor en '''K''' o le asignará el de '''K'''.
 
Realiza la llamada a la [[ABU#Acceso_a_los_registros|función de acceso]] a los [[ABU#Registros de la ABU|registros]] de la [[ABU]] que, dependiendo de la naturaleza del registro de la [[ABU]] apuntado por los ''registros azules'' '''UVW''' de la [[CPU]] ('''solo lectura''' o '''solo escritura'''), escribirá su valor en '''K''' o le asignará el de '''K'''.
  
  K = abu_dameytoma( K, U, V, W );
+
Si el valor pasado de '''Z''' es ''1'', antes de devolver el valor en '''K''' si se trata de una '''lectura''' (y después de recibirlos si se trata de una '''escritura''') realizará la función de [[ABU#Operaciones_de_la_ABU|función de ejecución]] de la [[ABU]].
 +
 
 +
  K = abu_dameytoma( K, Z, U, V, W );
  
 
=== '''C''' (1100) ===
 
=== '''C''' (1100) ===
Línea 103: Línea 110:
 
Llama a la [[CPU#Operaciones_de_la_CPU|función de lectura]] de [[CPU#Registros de la CPU |registros]] de la [[CPU]], que leerá el valor de uno de los registros '''0123456789ABCDEF''' de la [[CPU]] dependiendo de los valores pasados de los registros '''ZUVW''' de la [[CPU]] y lo copiará en el registro '''K''' de la [[CPU]] .
 
Llama a la [[CPU#Operaciones_de_la_CPU|función de lectura]] de [[CPU#Registros de la CPU |registros]] de la [[CPU]], que leerá el valor de uno de los registros '''0123456789ABCDEF''' de la [[CPU]] dependiendo de los valores pasados de los registros '''ZUVW''' de la [[CPU]] y lo copiará en el registro '''K''' de la [[CPU]] .
  
  K = cpu_leeRegistro( K, U, V, W );
+
  K = cpu_leeRegistro( Z, U, V, W );
  
 
=== '''D''' (1101) ===
 
=== '''D''' (1101) ===
Línea 109: Línea 116:
 
Llama a la [[CPU#Operaciones_de_la_CPU|función de escritura]] de [[CPU#Registros de la CPU |registros]] de la [[CPU]], que copiará el valor del registro '''K''' de la [[CPU]] en uno de los registros '''0123456789ABCDEF''' de la [[CPU]] dependiendo de los valores pasados de los registros '''ZUVW''' de la [[CPU]].
 
Llama a la [[CPU#Operaciones_de_la_CPU|función de escritura]] de [[CPU#Registros de la CPU |registros]] de la [[CPU]], que copiará el valor del registro '''K''' de la [[CPU]] en uno de los registros '''0123456789ABCDEF''' de la [[CPU]] dependiendo de los valores pasados de los registros '''ZUVW''' de la [[CPU]].
  
  cpu_escribeRegistro( K, U, V, W );
+
  cpu_escribeRegistro( K, Z, U, V, W );
  
 
=== '''E''' (1110) ===
 
=== '''E''' (1110) ===
 
{{AP|MMU}}
 
{{AP|MMU}}
Llama a la [[MMU#Funciones de acceso al Bus de Direcciones|función de acceso]] al [[Bus de Direcciones]] que escribirá en el registro '''K''' el valor de la dirección de memoria apuntada por el '''puntero actual''' de la [[MMU]].
+
Llama a la [[MMU#Funciones de acceso al Espacio de Direcciones|función de lectura]] al [[Espacio de Direcciones]] que escribirá en el registro '''K''' el valor de la dirección de memoria apuntada por el '''puntero actual''' de la [[MMU]].
  
 
  K = mmu_dame();
 
  K = mmu_dame();
Línea 119: Línea 126:
 
=== '''F''' (1111) ===
 
=== '''F''' (1111) ===
 
{{AP|MMU}}
 
{{AP|MMU}}
Llama a la [[MMU#Funciones de acceso al Bus de Direcciones|función de acceso]] al [[Bus de Direcciones]] que escribirá en la dirección de memoria apuntada por el '''puntero actual''' de la [[MMU]] el valor del registro '''K'''.
+
Llama a la [[MMU#Funciones de acceso al Espacio de Direcciones|función de escritura]] al [[Espacio de Direcciones]] que escribirá en la dirección de memoria apuntada por el '''puntero actual''' de la [[MMU]] el valor del registro '''K'''.
  
 
  mmu_toma( K );
 
  mmu_toma( K );
Línea 125: Línea 132:
 
== Tabla resumen de las instrucciones ==
 
== Tabla resumen de las instrucciones ==
  
{| border="1"
+
{| border="2" style="padding: 0.5em; border: 1px #aaa solid; border-collapse: collapse;background:#F9F9F9" cellpadding="4" align="center"
|-  
+
|- bgcolor="#aaffcc"
! align="center" | HEX. || G || H || I || J || align="center" | --- Instrucción que se ejecuta en en Sistema Informático ---
+
! align="center" | HEX. || G || H || I || J || Instrucción que se ejecuta en en Sistema Informático || Unidad asociada
 
|-
 
|-
| align="center" | '''0''' || 0 || 0 || 0 || 0 || align="center" | '''W = 0;'''
+
| align="center" | '''0''' || 0 || 0 || 0 || 0 || align="center" | '''W = 0;''' || align="center" | [[CPU]]
 
|-
 
|-
| align="center" | '''1''' || 0 || 0 || 0 || 1 || align="center" | '''V = 0;'''
+
| align="center" | '''1''' || 0 || 0 || 0 || 1 || align="center" | '''V = 0;''' || align="center" | [[CPU]]
 
|-
 
|-
| align="center" | '''2''' || 0 || 0 || 1 || 0 || align="center" | '''U = 0;'''
+
| align="center" | '''2''' || 0 || 0 || 1 || 0 || align="center" | '''U = 0;''' || align="center" | [[CPU]]
 
|-
 
|-
| align="center" | '''3''' || 0 || 0 || 1 || 1 || align="center" | '''Z = 0;'''
+
| align="center" | '''3''' || 0 || 0 || 1 || 1 || align="center" | '''Z = 0;''' || align="center" | [[CPU]]
 
|-
 
|-
| align="center" | '''4''' || 0 || 1 || 0 || 0 || align="center" | '''W = 1;'''
+
| align="center" | '''4''' || 0 || 1 || 0 || 0 || align="center" | '''W = 1;''' || align="center" | [[CPU]]
 
|-
 
|-
| align="center" | '''5''' || 0 || 1 || 0 || 1 || align="center" | '''V = 1;'''
+
| align="center" | '''5''' || 0 || 1 || 0 || 1 || align="center" | '''V = 1;''' || align="center" | [[CPU]]
 
|-
 
|-
| align="center" | '''6''' || 0 || 1 || 1 || 0 || align="center" | '''U = 1;'''
+
| align="center" | '''6''' || 0 || 1 || 1 || 0 || align="center" | '''U = 1;''' || align="center" | [[CPU]]
 
|-
 
|-
| align="center" | '''7''' || 0 || 1 || 1 || 1 || align="center" | '''Z = 1;'''
+
| align="center" | '''7''' || 0 || 1 || 1 || 1 || align="center" | '''Z = 1;''' || align="center" | [[CPU]]
|}
+
|- bgcolor="#aaffcc"
{| border="1"
+
! HEX. || G || H || I || J || Instrucción que se ejecuta en en Sistema Informático || Unidad asociada
|-  
 
! HEX. || G || H || I || J || align="center" | --- Instrucción que se ejecuta en en Sistema Informático ---
 
 
|-
 
|-
| align="center" | '''8''' || 1 || 0 || 0 || 0 || align="center" | '''W = K;'''
+
| align="center" | '''8''' || 1 || 0 || 0 || 0 || align="center" | '''if( K == 0 ){ PC += 4;}''' || align="center" | [[CPU]] y [[MMU]]
 
|-
 
|-
| align="center" | '''9''' || 1 || 0 || 0 || 1 || align="center" | '''abu_ejecuta();'''
+
| align="center" | '''9''' || 1 || 0 || 0 || 1 || align="center" | '''cpu_promociona();''' || align="center" | [[CPU#Operaciones_de_la_CPU|CPU]]
 
|-
 
|-
| align="center" | '''A''' || 1 || 0 || 1 || 0 || align="center" | '''mmu_ejecuta( K, U, V, W );'''
+
| align="center" | '''A''' || 1 || 0 || 1 || 0 || align="center" | '''mmu_ejecuta( Z, U, V, W );''' || align="center" | [[CPU]] y [[MMU#Funciones_de_acceso_al_Espacio_de_Direcciones|MMU]]
 
|-
 
|-
| align="center" | '''B''' || 1 || 0 || 1 || 1 || align="center" | '''K = abu_dameytoma( K, U, V, W );'''
+
| align="center" | '''B''' || 1 || 0 || 1 || 1 || align="center" | '''K = abu_dameytoma( K, Z, U, V, W );''' || align="center" | [[CPU]] y [[ABU#Acceso_a_los_registros|ABU]]
 
|-
 
|-
| align="center" | '''C''' || 1 || 1 || 0 || 0 || align="center" | '''K = cpu_leeRegistro( K, U, V, W );'''
+
| align="center" | '''C''' || 1 || 1 || 0 || 0 || align="center" | '''K = cpu_leeRegistro( Z, U, V, W );''' || align="center" | [[CPU#Operaciones_de_la_CPU|CPU]]
 
|-
 
|-
| align="center" | '''D''' || 1 || 1 || 0 || 1 || align="center" | '''cpu_escribeRegistro( K, U, V, W );'''
+
| align="center" | '''D''' || 1 || 1 || 0 || 1 || align="center" | '''cpu_escribeRegistro( K, Z, U, V, W );''' || align="center" | [[CPU#Operaciones_de_la_CPU|CPU]]
 
|-
 
|-
| align="center" | '''E''' || 1 || 1 || 1 || 0 || align="center" | '''K = mmu_dame();'''
+
| align="center" | '''E''' || 1 || 1 || 1 || 0 || align="center" | '''K = mmu_dame();''' || align="center" | [[CPU]] y [[MMU]]
 
|-
 
|-
| align="center" | '''F''' || 1 || 1 || 1 || 1 || align="center" | '''mmu_toma( K );'''
+
| align="center" | '''F''' || 1 || 1 || 1 || 1 || align="center" | '''mmu_toma( K );''' || align="center" | [[CPU]] y [[MMU]]
 
|}
 
|}
  
  
[[Categoría:LeWaS]]
+
[[Categoría: Idioma]]
 +
[[Categoría: Solución Informática]]
 +
[[Categoría: Solución]]

Revisión actual del 00:23 6 mar 2013

El Lenguaje de Código máquina o de Instrucciones básicas que entiende la Arquitectura eWa es un lenguaje muy simple de solo deiciséis instrucciones básicas. Estas deiciséis instrucciones básicas están clasificadas en cuatro grupos. El Lenguaje eWamblador es el lenguaje basado en el Idioma eWa inmediatamente superior al código máquina.

Gráfico ilustrativo del núcleo de la Arquitectura eWa: Sólo aparecen las Unidades.

Uso

Es usado para optimizar de forma extrema los códigos, generalmente, ensamblado por alguno de los tres Lenguajes eWa y se ha utilizado para programar de forma realmente eficaz el Gestor de Arranque Mínimo y demás inicializadores del sistema. Dentro del Julio Verne es posible incorporar secciones de código o soluciones completas con esta nomenclatura.

Explicación del funcionamiento

Artículo principal: Arquitectura eWa

En cuanto se inicializa el sistema, se escriben los cuatro primeros bits desde (inclusive) la dirección que indica el PC, inicialmente 0x0000 en G, se incrementa a 0x0001 y se escribe en H, se vuelve a incrementar a 0x0002 y se escribe en I, se incrementa a 0x0003 y se escribe en J, y por último, se vuelve a incrementar. En total, se habrá aumentado en cuatro el valor del PC después de la lectura. Después, se ejecuta la instrucción de GHIJ (por ejemplo, 1001 para G=J=1 y H=I=0), que coinciden con una de las siguientes diecicéis instrucciones básicas posibiles. Por último, se vuelve a repetir el proceso de lectura de los registros GHIJ.

Las de asignación

Artículo principal: CPU

Negativas

Estas cuatro instrucciones básicas consisten en poner los registros WVUZ de la CPU a valores 0.

0 (0000)

Escribe en el registro W de la CPU el valor 0.

W = 0;

1 (0001)

Escribe en el registro V de la CPU el valor 0.

V = 0;

2 (0010)

Escribe en el registro U de la CPU el valor 0.

U = 0;

3 (0011)

Escribe en el registro Z de la CPU el valor 0.

Z = 0;

Positivas

Estas cuatro instrucciones básicas consisten en poner los registros WVUZ de la CPU a valores 1.

4 (0100)

Escribe en el registro W de la CPU el valor 1.

W = 1;

5 (0101)

Escribe en el registro V de la CPU el valor 1.

V = 1;

6 (0110)

Escribe en el registro U de la CPU el valor 1.

U = 1;

7 (0111)

Escribe en el registro Z de la CPU el valor 1.

Z = 1;

La de condición

8 (1000)

Ejecuta la siguiente instrucción básica si el valor del registro K de la CPU es distinto de cero.

O, dicho de otra manera, omite la siguiente instrucción básica si el valor del registro K de la CPU es cero.

if( K == 0 ){
   PC += 4;
}

La de promoción

9 (1001)

Artículo principal: CPU

Copiará el valor de los registros de la CPU (ABCD) a los registros, también de la CPU, (ZUVW).

cpu_promociona();

La de ejecución

A (1010)

Artículo principal: MMU

Llama a la función de ejecución de la MMU, que hará modificaciones en los punteros de la MMU dependiendo de los valores pasados de los registros ZUVW de la CPU.

mmu_ejecuta( Z, U, V, W );

Las de lectura y escritura

B (1011)

Artículo principal: ABU

Realiza la llamada a la función de acceso a los registros de la ABU que, dependiendo de la naturaleza del registro de la ABU apuntado por los registros azules UVW de la CPU (solo lectura o solo escritura), escribirá su valor en K o le asignará el de K.

Si el valor pasado de Z es 1, antes de devolver el valor en K si se trata de una lectura (y después de recibirlos si se trata de una escritura) realizará la función de función de ejecución de la ABU.

K = abu_dameytoma( K, Z, U, V, W );

C (1100)

Artículo principal: CPU

Llama a la función de lectura de registros de la CPU, que leerá el valor de uno de los registros 0123456789ABCDEF de la CPU dependiendo de los valores pasados de los registros ZUVW de la CPU y lo copiará en el registro K de la CPU .

K = cpu_leeRegistro( Z, U, V, W );

D (1101)

Artículo principal: CPU

Llama a la función de escritura de registros de la CPU, que copiará el valor del registro K de la CPU en uno de los registros 0123456789ABCDEF de la CPU dependiendo de los valores pasados de los registros ZUVW de la CPU.

cpu_escribeRegistro( K, Z, U, V, W );

E (1110)

Artículo principal: MMU

Llama a la función de lectura al Espacio de Direcciones que escribirá en el registro K el valor de la dirección de memoria apuntada por el puntero actual de la MMU.

K = mmu_dame();

F (1111)

Artículo principal: MMU

Llama a la función de escritura al Espacio de Direcciones que escribirá en la dirección de memoria apuntada por el puntero actual de la MMU el valor del registro K.

mmu_toma( K );

Tabla resumen de las instrucciones

HEX. G H I J Instrucción que se ejecuta en en Sistema Informático Unidad asociada
0 0 0 0 0 W = 0; CPU
1 0 0 0 1 V = 0; CPU
2 0 0 1 0 U = 0; CPU
3 0 0 1 1 Z = 0; CPU
4 0 1 0 0 W = 1; CPU
5 0 1 0 1 V = 1; CPU
6 0 1 1 0 U = 1; CPU
7 0 1 1 1 Z = 1; CPU
HEX. G H I J Instrucción que se ejecuta en en Sistema Informático Unidad asociada
8 1 0 0 0 if( K == 0 ){ PC += 4;} CPU y MMU
9 1 0 0 1 cpu_promociona(); CPU
A 1 0 1 0 mmu_ejecuta( Z, U, V, W ); CPU y MMU
B 1 0 1 1 K = abu_dameytoma( K, Z, U, V, W ); CPU y ABU
C 1 1 0 0 K = cpu_leeRegistro( Z, U, V, W ); CPU
D 1 1 0 1 cpu_escribeRegistro( K, Z, U, V, W ); CPU
E 1 1 1 0 K = mmu_dame(); CPU y MMU
F 1 1 1 1 mmu_toma( K ); CPU y MMU