Professional Documents
Culture Documents
CROSS ASSEMBLER
Objetivo(s)
Marco Terico
Un lenguaje ensamblador (o ensamblador de idioma ] ) es un lenguaje de
bajo nivel de programacin para un ordenador u otro dispositivo programable,
en el que hay una muy fuerte (en general, de uno a uno ) la correspondencia
entre el lenguaje y el de la arquitectura de la mquina cdigo
de instrucciones . Cada lenguaje ensamblador es especfico de una
arquitectura de computadora en particular, en contraste con la mayora de
los lenguajes de programacin de alto nivel , que son generalmente porttil a
travs de mltiples arquitecturas, pero requieren de
interpretacin o compilacin .
El lenguaje ensamblador se convierte en cdigo mquina ejecutable por
un programa de utilidad que se refiere como un ensamblador; el proceso de
conversin se conoce como montaje o ensamblaje el cdigo.
Lenguaje Maquina: depende de la arquitectura de la maquina; es
interpretado por el hardware o por microprogramas propios de la mquina.
Lenguajes de Alto Nivel: son de ms fcil programacin y menos
dependientes del sistema, por el contrario sus programas terminan siendo ms
lentos y consumen ms recursos.
Analizador Lxico: el analizador lxico o tambin denominado escner, es la
primera fase de procesamiento de un compilador. Este toma como entrada un
archivo escrito en algn lenguaje de programacin y da como salida
compuesta por tokens para que sean analizados por la caja sintctica.
Analizador Sintctico: el analizador sintctico o tambin llamado parser es el
encargado de la comprobacin de la estructura correcta del lenguaje.
Generalmente toma como entrada la salida del analizador lxico, produce un
rbol de derivacin, para su posterior anlisis.
CODIFICACION
#include
#include
#include
#include
#include
#include
<iostream>
<fstream>
<cstring>
<sstream>
<vector>
<string>
getline(inData, line[contador]);
cout << line[contador++] << endl;
list_size++;
}
inData.close();
//Separamos las palabras de cada linea en tokens
string ventas[list_size];
string ventas2[list_size];
string bytes[list_size];
string sep[list_size];
for(int j = 0; j<list_size;j++)
{
int i=0;
istringstream s(line[j]);
string token;
while( s >> token )
{
sep[i]=token;
i++;
}
if(i!=2)
{
ventas[j]=sep[0];
ventas2[j]= "$0";
bytes[j] = "1";
}
else
{
ventas[j]=sep[0];
ventas2[j]=sep[1];
bytes[j] = "2";
}
cout<<ventas[j]<<endl;
}
bytes[0]="0";
string ventas2n[list_size];
string sep2[list_size];
for(int j = 0; j<list_size;j++)
{
int i=0;
istringstream s(ventas2[j]);
string token;
while( getline(s, token, '$'))
{
sep2[i]=token;
//cout<<sep2[i]<<endl;
//cout<<i<<endl;
i++;
}
ventas2n[j]=sep2[1];
cout<<ventas2n[j]<<endl;
}
int a=100;
stringstream ss;
ss<<hex<<a;
string r = ss.str();
cout<<a<<endl;
cout<<r<<endl;
string operando[list_size];
for(int j = 0; j<list_size;j++)
{
stringstream xx;
xx<<hex<<val_operando[j];
operando[j] = xx.str();
cout<<operando[j]<<endl;
}
int k=0;
istringstream t(line2[j]);
string token;
string cod_oper[list_size];
for(int j = 0; j<list_size;j++)
{
for(int k=0; k<(list_size);k++)
{
if (line[k].find(tabla[j]) != string::npos)
{
cod_oper[j]=tabhex[j];
}
}
cout<<cod_oper[j]<<endl;
}
string operando1[list_size];
for(int j = 0; j<list_size;j++)
{
for(int k=1; k<(list_size);k++)
{
if (line[k].find(ventas2n[j]) != string::npos)
{
operando1[j]=operando[j];
}
}
}
string toperando[list_size];
int y=1;
for(int j = 0; j<list_size-1;j++)
{
toperando[j] = operando1[y];
y++;
cout<<toperando[j]<<endl;
}
int memoria[list_size];
int sumbytes[list_size];
int inicial = val_operando[0];
for(int j = 0; j<list_size;j++)
{
sumbytes[j]=atoi(bytes[j].c_str());
}
for(int j = 0; j<list_size;j++)
{
inicial = inicial + sumbytes[j];
memoria[j]= inicial;
}
string memoria2[list_size];
for(int j = 0; j<list_size;j++)
{
stringstream zz;
zz<<hex<<memoria[j];
memoria2[j] = zz.str();
cout<<memoria2[j]<<endl;
}
string cod_maquina[list_size];
for(int j = 0; j<list_size-1;j++)
{
cod_maquina[j]= cod_oper[j] + " " + toperando[j];
cout<<cod_maquina[j]<<endl;
}
string line_mod[list_size];
int z=1;
for(int j = 0; j<list_size-1;j++)
{
line_mod[j] = line[z];
z++;
cout<<line_mod[j]<<endl;
}
string final[list_size];
for(int j = 0; j<list_size-1;j++)
{
final[j]= memoria2[j] + " " + cod_maquina[j] + " " + line_mod[j];
cout<<final[j]<<endl;
}
string final2[list_size];
for(int j = 0; j<list_size-1;j++)
{
if(j==2 || j==4 || j==5)
{
final2[j]= line_mod[j] + "\t\t " + final[j];
cout<<final2[j]<<endl;
}
else
{
final2[j]= line_mod[j] + "\t " + final[j];
cout<<final2[j]<<endl;
ofstream Exit("salida.txt");
Exit<<line[0]<<endl;
for(int j = 0; j<list_size-1;j++)
{
Exit<<final2[j]<<endl;
}
Exit.close();
system("pause");
return 0;
}
Conclusiones
Recomendaciones
1. Conocer cada una de las etapas que son necesarias para realizar un compilador para
poder implementarlo.
Bibliografa