Saltar al contenido
Codifíca.me | Desarrollo web | Programación

Traducir lenguaje Ensamblador a lenguaje Máquina | CISC

9 junio, 2012

De lenguaje Ensamblador a lenguaje Máquina

Después de escribir los otros tutoriales acerca del lenguaje ensamblador en CISC vamos a realizar un tutorial de cómo traduciríamos el lenguaje Ensamblador al lenguaje Máquina.

El lenguaje Máquina es el código que puede ser interpretado directamente por el microprocesador, como ya sabéis todos los lenguajes de programación antes de ser interpretados por el microprocesador son traducidos a lenguaje Máquina.

Para traducir del lenguaje Ensamblador a lenguaje Máquina primero tenemos que tener el código Ensamblador que queremos traducir, que serán estas tres líneas:

MUL R3, [X+R5]
SUB R5, 4
MOV [M], R3

Los valores que utilizaremos serán los siguientes, primeramente el valor del PC es 00002027, por lo tanto las instrucciones se empezarán a codificar a partir de este punto. La dirección de memoria que apunta la variable X será 00000004 y la dirección de memoria que apunta la variable M será 00000008.

Ahora codificaremos el código anterior siguiendo la forma de codificar instrucción, codificar primer operando y codificar segundo operando.

Las instrucciones se codificarán por los valores que les preceden en la tabla:

 

  Operaciones 27h NEG
00h NOP 20h ADD Funciones Lógicas
01h STI 21h SUB 30h AND
02h CLI 22h MUL 31h OR
Movimiento de datos 23h DIV 32h XOR
10h MOV 24h INC 33h TEST
11h PUSH 25h DEC 34h NOT
12h POP 26h CMP 27h NEG

 

35h SAL Saltos en la ejecución
36h SAR 40h JMP
  41h JE
  42h JNE
  43h JL
  44h JLE
  45h JG
  46h JGE

Y dependiendo del direccionamiento que utilicen los operandos se codificarán de la siguiente manera:

Tipo de direccionamiento
0h     Inmediato
1h     Registro
2h     Memoria
3h     Indirecto
4h     Relativo
5h     Indexado
6h     PC

Comenzamos codificando la primera instrucción

MUL R3, [X+R5]

Para esto ponemos en @ la dirección que está apuntando PC, después codificamos la instrucción MUL, buscamos el código (22h MUL) y traducimos en la primera celda de la tabla.

 

@Dir

Ensamblador

Código Máquina

00002027 MUL R3, [X+R5] 22              
                   
                   
                   

Bytes

0

1

2

3

4

5

6

7

Después codificamos el primer operador que tenemos, que en este caso es R3, así que asignaremos a la segunda celda el tipo de direccionamiento y el número de registro 1 3.

@Dir

Ensamblador

Código Máquina

00002027 MUL R3, [X+R5] 22 13            
                   
                   
                   

Bytes

0

1

2

3

4

5

6

7

Para finalizar la instrucción ponemos el segundo operando en la tabla, que como tipo de direccionamiento utiliza el indexado, es decir una dirección de memoria más un desplazamiento, que en este caso se codificaría con el tipo “5” más el identificador del registro que es el “5” también.

Le añadimos la dirección a la que apunta la variable X, que es 00000004 y lo asignaremos de izquierda a derecha en grupos de dos, de esta forma asignaremos los bits de menor peso al número más pequeño y los de mayor peso al número más grande en la codificación.

Quedaría así:

@Dir

Ensamblador

Código Máquina

00002027h MUL R3, [X+R5] 22 13 55 04 00 00 00  
                   
                   
                   

Bytes

0

1

2

3

4

5

6

7

Realizamos la suma de los bytes que hemos utilizado e incrementamos la posición de memoria que apunta PC, que en este caso son 7, por lo que la PC ahora tendrá el valor de 00002027h+07h= 0000202Eh.

@Dir

Ensamblador

Código Máquina

00002027h MUL R3, [X+R5] 22 13 55 04 00 00 00  
0000202Eh                  
                   
                   

Bytes

0

1

2

3

4

5

6

7

Ahora realizamos de nuevo los mismos pasos con las otras instrucciones y finalmente la tabla quedaría así:

@Dir

Ensamblador

Código Máquina

00002027h MUL R3, [X+R5] 22 13 55 04 00 00 00  
0000202Eh SUB R5, 4 21 15 00 04 00 00 00  
00002036h MOV [M], R3 10 20 08 00 00 00 13  
0000203Ch                  

Bytes

0

1

2

3

4

5

6

7

 

Después de este proceso, finalmente habremos conseguido traducir estas tres lineas de lenguaje Ensamblador a lenguaje Máquina para la arquitectura CISC.
 

Entradas relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

Comentarios (6)

Hola,
Necesitaria ayuda con esto, quiero hacer un programa en lenguaje ensamblador que haga que un array con un texto se almacene en otro pero al revés, y después lo muestre por pantalla al derecho y al revés. Utilizando ciclos Loop o banderas solamente.
por ejemplo:
array1 byte “Hola que tal”
se almacene lo del arreglo1 al revés
array2 byte “lat euq aloH”
Voy a intententar cambiar el código de ordenación que tienes a ver si con ello me vale.!
Gracias

Responder

Algo no queda claro quiero convertir esto a maquina
inc [ecx]
mov edx,[ebp+08]
pero nunca e visto en codigo ensamblador una “R” asi que no tengo claro como combertir el ebp +08 y el ecx

pero nunca he visto en código ensamblador una “R” así que no tengo claro como convertir el ebp +08 y el ecx

Responder

Buenas Elias, qué tal.
Pues la verdad es que ya no recuerdo mucho de todo esto, fue hace mucho tiempo, creo que R eran los registros. Pero no te puedo ayudar con esto. 🙁

Responder

abra algun programa que combierta de codigo ensablador mov eax, [edx] a codigo maquina?

habrá algún programa que convierta de código ensamblador mov eax, [edx] a código máquina?

Responder

Pues es muy posible que existan si, yo recuerdo que realizar la traducción era bastante sencillo, laborioso pero muy sencillo.
Si lo encuentras deja el link si quieres, así se pueden beneficiar el resto de los usuarios de tu aportación. Gracias!

Responder

¿por qué le asignas a R3 el 13?

Responder