Boletín No. 47
1o. de Marzo de 2015
DECODIFICADOR DE LENGUAJE MAQUINA DEL PROCESADOR INTEL 8088
Cynthia Yolanda Sosa Cervantes -
Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.
,
Prof.: M. en C. Israel Rivera Zárate. –
Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.
,
Prof.: M. en D. Patricia Pérez Romero. –
Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.
Centro de innovación y desarrollo tecnológico en cómputo - IPN
Abstract
El lenguaje ensamblador es el lenguaje de programación utilizado para escribir programas de bajo nivel, mediante una representación de código máquina. El código máquina se encuentra representado en forma binaria, sin embargo, la longitud de los programas hace un tanto complicada la comprensión de cada instrucción, es por esto, que el lenguaje ensamblador utiliza una representación equivalente para cada instrucción.
Introducción
Formato de instrucción ‘mov’
Para poder llevar acabo dicho programa, es necesario comprender el formato de la instrucción ‘mov’. Tal como se muestra en [2], existen 7 tipos de transferencia de datos, de los cuales se tomaran en cuenta los siguientes:
- Registro/memoria a/de registro
- Inmediato a registro
- Memoria a acumulador
- Acumulador a memoria
- Registro/memoria a registro de segmentación
- Registro de segmentación a registro/memoria
A continuación se muestra el formato para cada una de las instrucciones:
Donde:
‘W’ nos informa del tamaño de los operandos. Con W = 0 estamos accediendo a 8 bits y con W = 1 a una palabra, es decir 16 bits.
‘D’* nos informa si el registro especificado en el campo REG se trata del operando fuente u operando destino de instrucción especificada por el código de operación. (Para nuestro caso ‘d’ tendrá un valor de 1, y ‘mod’ de 11, por lo que ‘r/m’ será tratado como ‘reg’.)
Para D = 0, el registro indicado por el campo REG es el operando fuente y para D = 1, el registro indicado por el campo REG es el operando destino.
‘Reg’ nos indica el registro que se utilizara, para lo cual existen las siguientes combinaciones (tabla 1)
Tabla 1. Asignacion de bits del campo ‘reg’ |
Desarrollo
Primer término
Una vez que se analiza el formato de la instrucción ‘mov’ se puede observar que se cuenta con un patrón en los primeros cuatro bits, teniendo este los siguientes valores:
Binario |
Hexadecimal |
ASCII (hexa.) |
1000 |
8 |
38 |
1010 |
A |
41 |
1011 |
B |
42 |
Por lo que la primera parte del código se centra en encontrar estos valores (Figura 1), de no encontrarse se mandara un mensaje de error. La comparación se realiza con el valor en ASCI correspondiente a cada término.
Fig.1 Comparación del primer término |
Segundo término
Posteriormente se procede a hacer la comparación del segundo término de cada instrucción Fig. 2, empezando de esta forma a separar cada tipo de transferencia de datos.
a) | b) |
c) |
a) Segundo término para 8, b) Segundo término para A, c) Segundo término de B |
Fig.2 Comparación del segundo término. |
Debido a que la entrada está dada en hexadecimal y lo que el programa recibe es su correspondiente en ASCII, es necesario hacer una conversión, así como delimitar el rango en el cual está permitido introducir los datos, esto es, valores de 0~9 y A~F (Fig. 3).
Fig.3 Delimitación de valores permitidos. |
Registros
La selección de registros, ya sea de 8 bits o de 16 bits, se realiza por medio de ‘w’, por lo que se realiza una comparación de dicha variable (Fig. 4).
.... |
Siguiente instrucción
Una vez que se termina de evaluar una instrucción es necesario seguir evaluando las consecutivas, en caso de que el carácter siguiente sea ‘*’ se da por concluida la evaluación a la cadena introducida, de no ser así se continuara evaluando (Fig. 5).
Fig.5 Código para seguir evaluando |
Código en ensamblador
Haga clic aquí para ver el código empleado.
Resultados
En la siguiente figura (Fig. 6) se puede observar la evaluación de la cadena conformada por las siguientes instrucciones (tabla 2).
Tabla 2 |
Fig. 6. Evaluación de cadena. |
Conclusiones
Es necesario conocer el formato de código máquina de la instrucción para de esta manera poder evaluar carácter a carácter la cadena introducida. De igual manera es importante tomar en cuenta los rangos que estos caracteres pueden tomar, es decir, deben ser solo caracteres de 0~9 y A~F, por lo que si se introduce una instrucción incompleta o un carácter que no corresponde un mensaje de error aparcera (Fig. 7). Otro aspecto no menos importante a considerar es el hecho de que el código introducido esta dado en ASCII por lo que es importante trasladar de este valor a su correspondiente hexadecimal.
Fig. 6 Instrucción errónea |
Referencias
- C. L. Morgan y M. Waite, “Introducción al micropocesador 8086/8088 (16 bits)”, 1ra. Edición, McGraw-Hill, 1988.