Reporte Ensamblador

December 16, 2017 | Author: Luis Rodr | Category: Assembly Language, Compiler, Areas Of Computer Science, Computer Programming Tools, Software
Share Embed Donate


Short Description

Download Reporte Ensamblador...

Description

Arquitectura de Computadoras Práctica Adicional Ensamblador Equipo 11 Luis Manuel Rodríguez Ramírez, Luis Fernando Maciel García 26 de Marzo de 2014 Introducción ¿Qué es el ensamblador? El ensamblador hace referencia a un tipo de programa informático encargado de traducir un fichero fuente escrito en lenguaje ensamblador, a un fichero objeto que contiene código máquina, ejecutable directamente por el procesador. Cada instrucción representa exactamente una instrucción de la máquina.

Los compiladores son programas que hacen conversiones similares a los ensambladores pero sirven para lenguajes de programación de alto nivel, un ensamblador es más simple que un compilador, en un lenguaje de alto nivel se pueden requerir muchas instrucciones de máquina y en lenguaje ensamblador cada instrucción representa una sola instrucción de máquina. Cada tipo de CPU tiene su propio lenguaje de máquina, también tiene su propio lenguaje ensamblador. Trasladar programas entre arquitecturas de computador diferentes es algo complicado. Los objetivos de ésta práctica son crear un ensamblador sencillo, que va a crear un archivo de texto con código máquina el cual puede servir para ser el archivo de entrada para el simulador de una computadora. Al recibir una instrucción le vamos a asignar un código de operación y se generará el código de salida. La importancia de ésta práctica es conocer como trabaja un ensamblador y de ver cómo se genera el código máquina a través de instrucciones en lenguaje ensamblador.

Desarrollo de la práctica En la práctica simulamos el trabajo de un ensamblador, la realizamos en lenguaje C++, lo que necesitamos fue lo siguiente:



Computadora



Compilador g++



Editor de Texto



Archivo de entrada

El programa va a interpretar un archivo de entrada en lenguaje ensamblador y va a generar la salida de lenguaje máquina. Cada linea del programa en ensamblador va a tener la estructura siguiente. Dirección_de_memoria

Operación

Operando

y para guardar datos en memoria vamos a tener la siguiente sintaxis Dirección_de_memoria

Operando

El archivo de entrada fue abierto a través de un puntero tipo FILE y separado por renglones con la función fgets() y asignado a una variable tipo char para sacar la instrucción de cada renglón. Al leer con fgets obtuvimos cada renglón del archivo de entrada y lo asignamos a las variables con las que vamos a trabajar de la forma siguiente: char renglon[100]; unsigned int indice, operando_s=0x000; char cadena[100]; char cop_s[10]; FILE *entrada= fopen(“entrada.txt”,”r”); while(!feof(entrada)){ fgets(renglon,99,entrada); scanf(cadena,"%x %s %x",&indice,cop_s,&operando_s); } La codificación a lenguaje máquina fue simple debido a que solo le revisamos la operación que es y le asignamos su código de operación. La instrucción codificada queda junto con el operando de la siguiente forma.

Código de Operación

Operando

En la siguiente tabla tenemos los códigos de operación correspondientes a la instrucción que se le asignaron al ensamblarlo.

Código de Operación

Instrucción

0h

LOAD

1h

STORE

2h

ADD

3h

ADC

4h

SUB

5h

OR

6h

AND

7h

XOR

8h

SHL

9h

SHR

Ah

BRA

Bh

BRZ

Ch

BRC

Dh

BRO

Eh

LDI

Fh

STOP

Para asignarle a cada instrucción su código de operación lo hicimos comparando la cadena

que contenía la

instrucción con la función strcmp, como el ejemplo siguiente: En el renglón leemos la instrucción y entramos a condicionantes para asignar el código de operación correspondiente. El renglón que leemos tiene 001

ADD

010, entonces la instrucción va a entrar a la

condicionante que contenga la cadena “ADD”. Al encontrar la instrucción le sumamos el código de operación con corrimiento a la izquierda de 12 bits al operando para obtener ya la instrucción codificada y la vamos a guardar en un arreglo simulando la memoria. if(!strcasecmp(cop_s,"ADD")){ memoria[indice]=0x2000+ Operando; } Una vez que se leyeron todos los renglones pusimos una verificación para que la instrucción LDI la cual su funcionamiento es cargar una constante en la localidad siguiente de memoria así que revisamos que no se toque esa localidad siguiente. Ya que comprobamos que se respetó la siguiente localidad de memoria de la instrucción LDI continuamos con la generación del código máquina. El código de salida se va a limitar a aquellas localidades de memoria que tengan alguna instrucción o algún dato que tengamos que guardar en la memoria. Para generar el archivo de salida con el código máquina hicimos lo siguiente: entrada=fopen("salida.txt","w"); for( int i=0; i
View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF