-
Prez Gonzlez Josu Abraham Programacin y estructura de
computadoras
Compilador 68HC11 de Motorola
Integrantes: Josue Abraham Perez Gonzlez
Lenguaje utilizado: PHP
Se propone un compilador prctico para que al usuario no se le
dificulte introducir la ruta de su archivo a
compilar.
Este compilador fue desarrollado en el lenguaje PHP que permite
un buen manejo de stings, est estructurado a
partir de 15 funciones principales, bsicamente el compilador se
conforma de tres archivos principales con
extensin PHP:
Index.php El archivo index es la imagen del compilador; en este
archivo est el cdigo que permite subir
archivos .asc asi como la visualizacin previa de los
archivos.
Carga.php El archivo carga se encarga de subir y obtener el
nombre del archivo a compilar, aqu se encuentra el
cdigo necesario para restringir los archivos para aceptar solo
la extensin .asc.
Compila.php El archivo compila contiene el cdigo de las
funciones y cdigo central que llama a las funciones
esenciales que hacen funcionar el compilador, este archivo es el
ltimo en ser ejecutado al requerir el nombre
del archivo y la ruta que se obtienen a partir del archivo carga
.php.
lempty($linea)-Verifica si la lnea est vaca.
linend($linea)-Verifica si en la lnea hay un END.
verifica_nem($linea,$seting)-Verifica si en la lnea hay un
nemnico.
arr_linea($lineas)-Convierte una lnea en un arreglo .
-
Prez Gonzlez Josu Abraham Programacin y estructura de
computadoras
prm_char($cdn,$crc)-Verifica si un carcter est en la primera
posicin de un string.
decimal($num)-Verifica si el string es decimal .
R_tv($psc,$posac)-Verifica que no se rebase el lmite de
bifurcacin (128 y -127).
exad($num)-Verifica si es hexadecimal.
buscaeti($arreti,$siz,$val)-Verifica si existe una etiqueta en
la lnea.
B_eti($arr,$val)-Verifica si existe una etiqueta en la lnea.
buscavar($arrvar,$tam,$val)-Verifica si hay una variable en la
linea.
modo_dir($linea,$siz,$variarr,$etiarr,$tam,$numne)-Verifica que
modo de direccionamiento
corresponde al string en lectura.
Aster_fir($lineas)-Verifica si hay un * en la primer posicin del
string.
dir_memo($mdir,$dir,$variabl,$tama)-Devuelve el cdigo
correspondiente al modo de
direccionamiento.
Etiquetas($archivo,$set)-Busca etiquetas y su direccin, devuelve
un arreglo de etiquetas con direccin.
Las funciones ya mencionadas son esenciales para la ejecucin del
compilador estas devuelven todos los
elementos que ocupara el cdigo central una vez que el archivo se
suba con xito, la instruccin
if((isset($_POST["enviado"]))&&($_POST["enviado"]=="form1"))
permita ejecutar el cdigo central que abre el
archivo lo lee e imprime los resultados en un nuevo archivo con
extensin .lst.
Aunque se ocuparon diversos recursos tales como HTML, JavaScript
y Css5 el cdigo representativo del
compilador descansa en un solo en el archivo compila.php cuyo
lenguaje puramente es PHP.
El cdigo es el siguiente se lee en dos columnas:
if((isset($_POST["enviado"]))&&($_POST["enviado"]=="form1")){
$incetiqueta=0; $incvariable=0; $etiqueta[][]=' '; $variable[][]='
'; $localidad=0x0000; $a=0; $varnem=" ";
$fileS="68hc11compila.lst"; $filname=$_POST["nom"]; $as=explode("
",$filname); $fp=fopen($as[0],"rb"); $fp1=fopen($fileS,"a");
$etiqueta=Etiquetas($as[0],$set); while(!feof($fp)){ $a++;
$linea = fgets($fp); $comen=strpos($linea,'*');
$coment=Aster_fir($linea); $tab=strpos($linea,"\t");
$space=strpos($linea,' '); $linarr=arr_linea($linea) ;
if($coment===true){ fprintf($fp1,"%d A\t%s",$a,$linea);
}elseif($comen!==false){ $linex=explode("*",$linea);
$arrx=arr_linea($linex[0]);
-
Prez Gonzlez Josu Abraham Programacin y estructura de
computadoras
//**************************************OPCION DE LINEA COMPLETA
$Nmonic=" "; $Modir=" "; $i=0; $z=0; $w=0; $error1=0; $r=0;
while(!empty($arrx[$i])){ $Nemo=verifica_nem($arrx[$i],$set);
if($Nemo>127 && $Nemo
-
Prez Gonzlez Josu Abraham Programacin y estructura de
computadoras
$Modir=modo_dir($arrx[1],$incvariable,$variable,$etiqueta,$incetiqueta,$Nmon);
if($buscon!==false){ $miu=R_tv($etiqueta[$buscon][1],$localidad);
if($miu!==false){ if(strlen($miu)
-
Prez Gonzlez Josu Abraham Programacin y estructura de
computadoras
fprintf($fp1,"%d A
%s\t%s\t\t%X\t%s\t*%s\r\n",$a,$arrx[0],$arrx[1],$localidad,$Unix,$linex[1]);
$localidad=$localidad+(strlen($Unix))/2; }elseif($arrx[0]=="FCB"){
$Inst=dir_memo(8,$arrx[1],$variable,$incvariable); $Unix=$Inst;
$localidad=$localidad + 0x0000; fprintf($fp1,"%d A
%s\t%s\t\t%X\t%s\t*%s\r\n",$a,$arrx[0],$arrx[1],$localidad,$Unix,$linex[1]);
$localidad=$localidad+(strlen($Unix))/2;
}elseif($arrx[0]=="ORG"){$localidad=dir_memo($Modir,$arrx[1],$variable,$incvariable);
$localidad=dechex($localidad); fprintf($fp1,"%d A
%s\t%s\t\t%X\t*%s\r\n",$a,$arrx[0],$arrx[1],$localidad,$linex[1]);
$localidad=$localidad + 0x0000; }elseif($Nmonic!==false){
if($set[$Nmonic][$Modir]!="0"){/////////////////////EXEPCION CHANGE
$Inst=dir_memo($Modir,$arrx[1],$variable,$incvariable);
$Unix=$set[$Nmonic][$Modir].$Inst; $localidad=$localidad +
0x0000;
fprintf($fp1,"%d A
%s\t%s\t\t%X\t%s\t*%s\r\n",$a,$arrx[0],$arrx[1],$localidad,$Unix,$linex[1]);
$localidad=$localidad+(strlen($Unix))/2;
}elseif($set[$Nmonic][$Modir]=="0"){ fprintf($fp1,"%d A
%s\t\t\t%s\t%X\tERROR INCONSISTENCIA DE
DIRECCIONAMIENTO\r\n",$a,$arrx[0],$arrx[1],$localidad);
}elseif($Modir===false){ fprintf($fp1,"%d A %s\t\t\t%s\t%X\tERROR
INCONSISTENCIA DE
DIRECCIONAMIENTO\r\n",$a,$arrx[0],$arrx[1],$localidad); }else{
fprintf($fp1,"%d A %s\t\t\t%s\t%X\tERROR INCONSISTENCIA DE
DIRECCIONAMIENTO\r\n",$a,$arry[0],$arry[1],$localidad); } }else{
$AROR=explode("\r\n",$linea); fprintf($fp1,"%d A
%s\t\t\t%X\t\tERROR\r\n",$a,$AROR[0],$localidad); } } }elseif($w==1
&& $Nmonic!==false &&
$z==0){//*****************END******NEMONICOS******INHERENTE
if($Nmonic!==false && $set[$Nmonic][6]!="0"){
$Unix=$set[$Nmonic][6]; $localidad=$localidad + 0x0000;
-
Prez Gonzlez Josu Abraham Programacin y estructura de
computadoras
fprintf($fp1,"%d A
%s\t\t\t%X\t%s\t*%s\r\n",$a,$arrx[0],$localidad,$Unix,$linex[1]);
$localidad=$localidad+(strlen($Unix))/2; } }elseif($z==1 &&
verifica_nem($arrx[0],$set)===false){/////////////////////*****ETIQUTASSSS****CHANGE
$rw=explode(" ",$linea); $zx=explode("\t",$linea);
if(!empty($zx[0]) && !empty($rw[0])){ fprintf($fp1,"%d A
%s\t\t%X\t\t*%s\r\n",$a,$arrx[0],$localidad,$linex[1]);
}elseif(linend($linea)===true){ fprintf($fp1,"%d A
\t\t\tEND\t%X\r\n",$a,$localidad); }elseif(lempty($linea)!==false){
fprintf($fp1,"%d A %X\t\t\r\n",$a,$localidad); }else{
$AROR=explode("\r\n",$linea); fprintf($fp1,"%d A
%s\t\t%X\t\tERROR\r\n",$a,$AROR[0],$localidad);} }else{
if(lempty($linea)!==false){ fprintf($fp1,"%d A
%X\t\t\r\n",$a,$localidad);
}elseif(linend($linea)===true){ fprintf($fp1,"%d
A\t\t\tEND\t%X\r\n",$a,$localidad); }
}//**************************************IF COMENTARIOS
//*****************************************SIN
COMENTARIOS*************************************************
}elseif($comen===false){/////IF SIN COMENTA
$arry=arr_linea($linea);
//**************************************OPCION DE LINEA COMPLETA
$Nmonic=" "; $Modir=" "; $i=0; $z=0; $w=0; $error1=0; $r=0;
while(!empty($arry[$i])){ $Nemo=verifica_nem($arry[$i],$set);
if($Nemo>127 && $Nemo
-
Prez Gonzlez Josu Abraham Programacin y estructura de
computadoras
$Nmonic=verifica_nem($arry[$i],$set); $w++;
}elseif(modo_dir($arry[$i],$incvariable,$variable,$etiqueta,$incetiqueta,$Nemo)!==false){
$Modir=modo_dir($arry[$i],$incvariable,$variable,$etiqueta,$incetiqueta,$Nemo);
$w++; $z++; }elseif($Nemo===false){//SI NO HAY NEMONICO? $z++;
}else{ $error1++;} $i++; }//TERMINA WHILE ARRX
if(!empty($arry[1])&&!empty($arry[0])){$error1=1;}
if(lempty($linea)!==false){ fprintf($fp1,"%d A
\t\t\t\t%X\r\n",$a,$localidad); }elseif($error1==1 && $r!=1
&&
modo_dir($arry[1],$incvariable,$variable,$etiqueta,$incetiqueta,$Nemo)===false
&& verifica_nem($arry[0],$set)!==false ){ fprintf($fp1,"%d
A %s\t%s\t\t%X\t\tERROR DE
SINTAXIS\r\n",$a,$arry[0],$arry[1],$localidad);
}elseif($r==1 && !empty($arry[1])){
$buscon=buscaeti($etiqueta,$incetiqueta,$arry[1]);
if(!empty($arry[1])&&!empty($arry[0])){
$Nmon=verifica_nem($arry[0],$set);
$Modir=modo_dir($arry[1],$incvariable,$variable,$etiqueta,$incetiqueta,$Nmon);
if($arry[0]=="END"){ ///CAMBIAR $ends=explode("\r\n",$linea);
fprintf($fp1,"%d A %s\t\t\t%X\t\r\n",$a,$ends[0],$localidad);
}elseif($buscon!==false){
$miu=R_tv($etiqueta[$buscon][1],$localidad); if($miu!==false){
-
Prez Gonzlez Josu Abraham Programacin y estructura de
computadoras
if(strlen($miu)
-
Prez Gonzlez Josu Abraham Programacin y estructura de
computadoras
}elseif($arry[0]=="FCB"){
$Inst=dir_memo(8,$arry[1],$variable,$incvariable); $Unix=$Inst;
$localidad=$localidad + 0x0000; fprintf($fp1,"%d A
%s\t%s\t\t%X\t%s\t\r\n",$a,$arry[0],$arry[1],$localidad,$Unix);
$localidad=$localidad+(strlen($Unix))/2;
}elseif($arry[0]=="ORG"){$localidad=dir_memo($Modir,$arry[1],$variable,$incvariable);
$localidad=hexdec($localidad); $localidad=$localidad + 0x0000;
fprintf($fp1,"%d A
%s\t%s\t\t%X\r\n",$a,$arry[0],$arry[1],$localidad);
}elseif($Nmonic!==false && $Modir!==false &&
!empty($set[$Nmonic][$Modir])){ if($set[$Nmonic][$Modir]!="0"){
$Inst=dir_memo($Modir,$arry[1],$variable,$incvariable);
$Unix=$set[$Nmonic][$Modir].$Inst; $localidad=$localidad + 0x0000;
fprintf($fp1,"%d A
%s\t%s\t\t%X\t%s\r\n",$a,$arry[0],$arry[1],$localidad,$Unix);
$localidad=$localidad+(strlen($Unix))/2;
}elseif($set[$Nmonic][$Modir]=="0"){
fprintf($fp1,"%d A %s\t%s\t\t%X\tERROR INCONSISTENCIA DE
DIRECCIONAMIENTO\r\n",$a,$arry[0],$arry[1],$localidad);
}elseif($Modir===false){ fprintf($fp1,"%d A %s\t%s\t\t%X\tERROR
INCONSISTENCIA DE
DIRECCIONAMIENTO\r\n",$a,$arry[0],$arry[1],$localidad); } }else{
fprintf($fp1,"%d A %s\t%s\t\t%X\tERROR INCONSISTENCIA DE
DIRECCIONAMIENTO\r\n",$a,$arry[0],$arry[1],$localidad); } }else{
$AROR=explode("\r\n",$linea); fprintf($fp1,"%d A
%s\t%X\tERROR\r\n",$a,$AROR[0],$localidad); } }elseif($w==1
&& $Nmonic!==false &&
$z==0){//*****************END******NEMONICOS******INHERENTE
if($Nmonic!==false && $set[$Nmonic][6]!="0"
){/////////////CAMBIAR A LOS DEMAS $Unix=$set[$Nmonic][6];
$localidad=$localidad + 0x0000; fprintf($fp1,"%d A
%s\t\t\t%X\t%s\r\n",$a,$arry[0],$localidad,$Unix);
$localidad=$localidad+(strlen($Unix))/2; }
-
Prez Gonzlez Josu Abraham Programacin y estructura de
computadoras
}elseif($z==1 &&
verifica_nem($arry[0],$set)===false){/////////////////////*****ETIQUTASSSS
$rw=explode(" ",$linea); $zx=explode("\t",$linea);
if(!empty($zx[0]) && !empty($rw[0])){ fprintf($fp1,"%d A
%s\t\t%X\t\t\r\n",$a,$arry[0],$localidad);
}elseif(linend($linea)===true){ fprintf($fp1,"%d A
END\t\t\t%X\r\n",$a,$localidad); }elseif(lempty($linea)!==false){
fprintf($fp1,"%d A \t\t\t\t%X\r\n",$a,$localidad); }else{
$AROR=explode("\r\n",$linea);/////////////CAMBIAR LAS DEMAS
fprintf($fp1,"%d A %s\t%X\tERROR\r\n",$a,$AROR[0],$localidad); }
}else{ if(lempty($linea)!==false){ fprintf($fp1,"%d A
\t\t\t\t%X\r\n",$a,$localidad); }elseif(linend($linea)===true){
fprintf($fp1,"%d A END\t\t\t%X\r\n",$a,$localidad); }} }//FIN
SIN COMENTARIOS COMENTA }//FIN WHILE READ fclose($fp);
fclose($fp1); }//FIN ISSET
Las funciones: $set = array(
array("FCB","0","0","0","0","0","0","0"),
array("ORG","","","","","","",""),
array("ADCA","89","99","A9","18B9","B9","0","0"),
array("ADCB","C9","D9","E9","18E9","F9","0","0"),
array("ADDA","8B","9B","AB","18AB","BB","0","0"),
array("ADDB","CB","DB","EB","18EB","FB","0","0"),
array("ADDD","C3","D3","E3","18E3","F3","0","0"),
array("ANDA","84","94","B4","18A4","B4","0","0"),
array("ANDB","C4","D4","E4","18E4","F4","0","0"),
array("ASL","0","0","68","1868","78","0","0"),
array("ASR","0","0","67","1867","77","0","0"),
array("BCLR","0","15","1D","181D","0","0","0" ),
array("BITA","85","95","A5","18A5","B5","0","0"),
array("BITB","C5","D5","E5","18E5","F5","0","0"),
array("BRCLR","0","13","1F","181F","0","0","0"),
array("BRSET","0","12","1E","181E","0","0","0"),
array("BSET","0","14","1C","181C","0","0","0"),
array("CLR","0","0","6F","186F","7F","0","0"),
array("CMPA","81","91","A1","18A1","B1","0","0"),
array("CMPB","C1","D1","E1","18E1","F1","0","0"),
array("COM","0","0","63","1863","73","0","0"),
array("CPD","1A83","1A93","1AA3","CDA3","1AB3","0","0"),
array("CPX","8C","9C","AC","CDAC","BC","0","0"),
array("CPY","188C","189C","1AAC","18AC","18BC","0","0"),
array("DEC","0","0","6A","186A","7A","0","0"),
-
Prez Gonzlez Josu Abraham Programacin y estructura de
computadoras
array("EORA","88","98","A8","18A8","B8","0","0"),
array("EORB","C8","D8","E8","18E8","F8","0","0"),
array("INC","0","0","6C","186C","7C","0","0"),
array("JSR","0","9D","AD","18AD","BD","0","BD"),
array("LDAA","86","96","A6","18A6","B6","0","0"),
array("LDAB","C6","D6","E6","18E6","F6","0","0"),
array("LDD","CC","DC","EC","18EC","FC","0","0"),
array("LDS","8E","9E","AE","18AE","BE","0","0"),
array("LDX","CE","DE","EE","CDEE","FE","0","0"),
array("LDY","18CE","18DE","1AEE","18EE","18FE","0","0"),
array("LSL","0","0","68","1868","78","0","0"),
array("LSR","0","0","64","1864","74","0","0"),
array("NEG","0","0","60","1860","70","0","0"),
array("ORAA","8A","9A","AA","18AA","BA","0","0"),
array("ORAB","CA","DA","EA","18EA","FA","0","0"),
array("ROL","0","0","69","1869","79","0","0"),
array("ROR","0","0","66","1866","76","0","0"),
array("SBCA","82","92","A2","18A2","B2","0","0"),
array("SBCB","C2","D2","E2","18E2","F2","0","0"),
array("STAA","0","97","A7","18A7","B7","0","0"),
array("STAB","0","D7","E7","18E7","F7","0","0"),
array("STD","0","DD","ED","18ED","FD","0","0"),
array("STS","0","9F","AF","18AF","BF","0","0"),
array("STX","0","DF","EF","CDEF","FF","0","0"),
array("STY","0","18DF","1AEF","18EF","FF","0","0"),
array("SUBA","80","90","A0","18A0","B0","0","0"),
array("SUBB","C0","D0","E0","18E0","F0","0","0"),
array("SUBD","83","93","A3","18A3","B3","0","0"),
array("TST","0","0","6D","186D","7D","0","0"),
array("ABA","0","0","0","0","0","1B","0"),
array("ABX","0","0","0","0","0","3A","0"),
array("ABY","0","0","0","0","0","183A","0"),
array("ASLA","0","0","0","0","0","48","0"),
array("ASLB","0","0","0","0","0","58","0"),
array("ASLD","0","0","0","0","0","5","0"),
array("ASRA","0","0","0","0","0","47","0"),
array("ASRB","0","0","0","0","0","57","0"),
array("CBA","0","0","0","0","0","11","0"),
array("CLC","0","0","0","0","0","0C","0"),
array("CLI","0","0","0","0","0","0E","0"),
array("CLRA","0","0","0","0","0","4F","0"),
array("CLRB","0","0","0","0","0","5F","0"),
array("CLV","0","0","0","0","0","0A","0"),
array("COMA","0","0","0","0","0","43","0"),
array("COMB","0","0","0","0","0","53","0"),
array("DAA","0","0","0","0","0","19","0"),
array("DECA","0","0","0","0","0","4A","0"),
array("DECB","0","0","0","0","0","5A","0"),
array("DES","0","0","0","0","0","34","0"),
array("DEX","0","0","0","0","0","09","0"),
array("DEY","0","0","0","0","0","1809","0"),
array("FDIV","0","0","0","0","0","03","0"),
array("IDIV","0","0","0","0","0","02","0"),
array("INCA","0","0","0","0","0","4C","0"),
array("INCB","0","0","0","0","0","5C","0"),
array("INS","0","0","0","0","0","31","0"),
array("INX","0","0","0","0","0","08","0"),
array("INY","0","0","0","0","0","1808","0"),
array("LSLA","0","0","0","0","0","48","0"),
array("LSLB","0","0","0","0","0","58","0"),
array("LSLD","0","0","0","0","0","05","0"),
array("LSRA","0","0","0","0","0","44","0"),
array("LSRB","0","0","0","0","0","54","0"),
array("LSRD","0","0","0","0","0","04","0"),
array("MUL","0","0","0","0","0","3D","0"),
array("NEGA","0","0","0","0","0","40","0"),
array("NEGB","0","0","0","0","0","50","0"),
array("NOP","0","0","0","0","0","01","0"),
array("PSHA","0","0","0","0","0","36","0"),
array("PSHB","0","0","0","0","0","37","0"),
array("PSHX","0","0","0","0","0","3C","0"),
array("PSHY","0","0","0","0","0","183C","0"),
array("PULA","0","0","0","0","0","32","0"),
array("PULB","0","0","0","0","0","33","0"),
array("PULX","0","0","0","0","0","38","0"),
array("PULY","0","0","0","0","0","1838","0"),
array("ROLA","0","0","0","0","0","49","0"),
array("ROLB","0","0","0","0","0","59","0"),
array("RORA","0","0","0","0","0","46","0"),
array("RORB","0","0","0","0","0","56","0"),
array("RTI","0","0","0","0","0","3B","0"),
array("RTS","0","0","0","0","0","39","0"),
array("SBA","0","0","0","0","0","10","0"),
array("SEC","0","0","0","0","0","OD","0"),
array("SEI","0","0","0","0","0","OF","0"),
array("SEV","0","0","0","0","0","OB","0"),
array("STOP","0","0","0","0","0","CF","0"),
array("SWI","0","0","0","0","0","3F","0"),
array("TAB","0","0","0","0","0","16","0"),
array("TAP","0","0","0","0","0","06","0"),
array("TBA","0","0","0","0","0","17","0"),
array("TETS","0","0","0","0","0","00","0"),
array("TPA","0","0","0","0","0","07","0"),
array("TSTA","0","0","0","0","0","4D","0"),
array("TSTB","0","0","0","0","0","5D","0"),
array("TSX","0","0","0","0","0","30","0"),
array("TSY","0","0","0","0","0","1830","0"),
array("TXS","0","0","0","0","0","35","0"),
array("TYS","0","0","0","0","0","1835","0"),
array("WAI","0","0","0","0","0","3E","0"),
array("XGDX","0","0","0","0","0","8F","0"),
array("XGDY","0","0","0","0","0","188F","0"),
array("BCC","0","0","0","0","0","0","24"),
array("BCS","0","0","0","0","0","0","25"),
-
Prez Gonzlez Josu Abraham Programacin y estructura de
computadoras
array("BEQ","0","0","0","0","0","0","27"),
array("BGE","0","0","0","0","0","0","2C"),
array("BGT","0","0","0","0","0","0","2E"),
array("BHI","0","0","0","0","0","0","22"),
array("BHS","0","0","0","0","0","0","24"),
array("BLE","0","0","0","0","0","0","2F"),
array("BLO","0","0","0","0","0","0","25"),
array("BLS","0","0","0","0","0","0","23"),
array("BLT","0","0","0","0","0","0","2D"),
array("BMI","0","0","0","0","0","0","2B"),
array("BNE","0","0","0","0","0","0","26"),
array("BPL","0","0","0","0","0","0","2A"),
array("BRA","0","0","0","0","0","0","20"),
array("BRN","0","0","0","0","0","0","21"),
array("BSR","0","0","0","0","0","0","8D"),
array("BVC","0","0","0","0","0","0","28"),
array("JMP","0","0","6E","186E","0","0","7E"),
array("BVS","0","0","0","0","0","0","29"),
array("END","0","0","0","0","0","0","0"), ); function
lempty($linea){ $i=0; $a=0; $l1=str_split($linea);
while(!empty($l1[$i])){ $ascii=ord($l1[$i]); if($ascii>32){
$a++; } $i++; } if($a!=0){return false;} } function
linend($linea){
$i=0; $a=0; $b=0; $l1=str_split($linea); while(!empty($l1[$i])){
$ascii=ord($l1[$i]); if($ascii==69 || $ascii==78 || $ascii==68 ){
$a++; if($a==3){return true;} }elseif($ascii>0){ $a=0; } $i++; }
//if($b==1){return true;} } /*function quitaceros($valor){
if(strlen($valor)2){ if(prm_char($valor,"0")){
$valor1=str_replace("0","",$valor); if(strlen($valor1)1){ return
$valor1;} quitaceros($valor1); }else{return $valor;} }else{return
$valor;} }*/ function verifica_nem($linea,$seting){ $x=-1;
-
Prez Gonzlez Josu Abraham Programacin y estructura de
computadoras
while($x!=147){ $x++; if($linea==$seting[$x][0]){ return $x; } }
if($x==147){ return false; } } function arr_linea($lineas){
$tam=strlen($lineas); $di=str_split($lineas); $i=0; $a=-1; $b=-1;
$c=0; $cadena[][]=' '; $linearr[]=' '; for($i=0;$i -1){ $a=-1;
$c++; $b++; $linearr[$b]=implode($cadena[$b]);
//printf("%s",$linearr[$b]); } }else{ $a++;
$cadena[$c][$a]=$di[$i]; } } return $linearr; } function
prm_char($cdn,$crc){ $arr=str_split($cdn); $ascii1=ord($crc);
$ascii=ord($arr[0]); if($ascii==$ascii1){ return true; } } function
decimal($num){ $tam=strlen($num); $h1=str_split($num); $i=0; $j=0;
$val=0; $arr=array(48,49,50,51,52,53,54,55,56,57); for($i=0;$i
-
Prez Gonzlez Josu Abraham Programacin y estructura de
computadoras
for($j=0;$j $a2){ $a=($a2 - $a1); if($a>-128){
$a=decbin($a-1);
$b=str_replace("111111111111111111111111","",($a)); return
dechex(bindec($b)); }else{return false;}
}elseif($a1 < $a2){ $a=(($a2 - $a1)-2); if($a
-
Prez Gonzlez Josu Abraham Programacin y estructura de
computadoras
if( ($ascii>47 && $ascii64 && $ascii
-
Prez Gonzlez Josu Abraham Programacin y estructura de
computadoras
if($arrdex[1]=="X"){//INDEX X if(prm_char($arrdex[0],'$')===true
&& prm_char($arrdex[2],'#')===true &&
prm_char($ver,'$')===true){ return 3; }
}elseif($arrdex[1]=="Y"){//INDEX Y
if(prm_char($arrdex[0],'$')===true &&
prm_char($arrdex[2],'#')===true &&
prm_char($ver,'$')===true){ return 4; } }
}elseif(!empty($arrdex[0]) && !empty($arrdex[1])){
if($arrdex[1]=="X"){ if(prm_char($arrdex[0],'$')===true){
return 3; } }elseif($arrdex[1]=="Y"){
if(prm_char($arrdex[0],'$')===true){ return 4; } }
}elseif(prm_char($arrdex[0],'$')===true &&
prm_char($arrdex[1],'$')===true){ return 8;
}elseif(empty($arrdex[0]) || empty($arrdex[1])){ return
false;//ERROR }else{ return false;//ERROR }
}elseif($dos!==false){//INMEDIATO
-
Prez Gonzlez Josu Abraham Programacin y estructura de
computadoras
$ver=str_replace("#","",$linea);
$a1=buscavar($variarr,$siz,$ver);
if(prm_char($linea,"#")===true){//ORDINARIO
if(decimal($ver)===true){ return 1;
}elseif(prm_char($ver,"$")===true){ return 1;
}elseif(prm_char($ver,"'")===true){ return 1; }elseif($a1!==false){
$a2=str_replace("$","",$veriarr[$a1][1]);
if(prm_char($veriarr[$a1][1],'$')===true &&
exad($a2)===true){ return 1; } }else{return false;} }else{return
false;} }//FIN INMEDIATO elseif($uno!==false){//DIRECTO Y
EXTENDIDO
if(prm_char($linea,"$")===true &&($numne>127
&& $numne
-
Prez Gonzlez Josu Abraham Programacin y estructura de
computadoras
if(strpos($variarr[$f1][1],"$")!==false &&
($numne>127 && $numne127 && $numne54 &&
$numne127 && $numne
-
Prez Gonzlez Josu Abraham Programacin y estructura de
computadoras
if($a==$i && $ascii==42){ return true; } } } } function
convexa($stn){ $ascii=ord($stn); if($ascii>32 &&
$ascii
-
Prez Gonzlez Josu Abraham Programacin y estructura de
computadoras
}elseif(strpos("$",$variabl[$hum][1])!==false){
$hum1=str_replace("$",$variabl[$hum][1]);
if(exad($hum1)===true){return $hum1;}else{return false;} }//CON
'?******************************* }else{return false;}
}elseif($mdir==2){//DIRECTO $hom=str_replace("$","",$dir);
if(strlen($hom)>0 && exad($hom)===true){
if(strlen($hom)
-
Prez Gonzlez Josu Abraham Programacin y estructura de
computadoras
}else{ return false; } } }elseif($mdir==4){//INDEXADO Y
$hun=explode(",",$dir); if(!empty($hun[0]) &&
!empty($hun[1]) && !empty($hun[2])){
$hom=str_replace("$","",$hun[0]);
$hom1=str_replace("#$","",$hun[2]); if(strlen($hom)0 &&
exad($hom)===true && exad($hom1)===true){
if(strlen($hom)
-
Prez Gonzlez Josu Abraham Programacin y estructura de
computadoras
exad($hom)===true){if(strlen($hom)0 && strlen($hom)
-
Prez Gonzlez Josu Abraham Programacin y estructura de
computadoras
$incvariable=0; $inc=0; $etiqueta[][]=' '; $variable[][]=' ';
$ETI[]=' '; $localidad=0x0000; $a=0; $varnem=" ";
$fp=fopen($archivo,"rb");
//***********************************************************
while(!feof($fp)){ $linea = fgets($fp); $rx=explode(" ",$linea);
$wx=explode("\t",$linea); $linarr=arr_linea($linea);
if(!empty($wx[0]) || !empty($rx[0])){ if(!empty($linarr[0])
&& empty($linarr[1])){ $ETI[$inc]=$linarr[0]; //ETIQUETA
$inc++; } } } fclose($fp);
//*************************************************************************
$fp1=fopen("pueva2.txt","a"); $fp=fopen($archivo,"rb");
while(!feof($fp)){ $a++;
$linea = fgets($fp); $comen=strpos($linea,'*');
$coment=Aster_fir($linea); $linarr=arr_linea($linea);
if($coment===true){ fprintf($fp1,"%d A\t%s",$a,$linea);
}elseif($comen!==false){ $linex=explode("*",$linea);
$arrx=arr_linea($linex[0]);
//**************************************OPCION DE LINEA COMPLETA
$Nmonic=" "; $Modir=" "; $i=0; $z=0; $w=0; $error1=0; $r=0;
while(!empty($arrx[$i])){ $Nemo=verifica_nem($arrx[$i],$set);
if($Nemo>127 && $Nemo
-
Prez Gonzlez Josu Abraham Programacin y estructura de
computadoras
$Nmonic=verifica_nem($arrx[$i],$set); $w++;
}elseif(modo_dir($arrx[$i],$incvariable,$variable,$etiqueta,$incetiqueta,$Nemo)!==false){
$Modir=modo_dir($arrx[$i],$incvariable,$variable,$etiqueta,$incetiqueta,$Nemo);
$w++; $z++; }elseif($Nemo===false){//SI NO HAY NEMONICO? $z++;
}else{ $error1++;} $i++; }//TERMINA WHILE ARRX
if(!empty($arrx[1])&&!empty($arrx[0])){$error1=1;}
if($error1==1 && $r!=1 &&
modo_dir($arrx[1],$incvariable,$variable,$etiqueta,$incetiqueta,$Nemo)===false
&& verifica_nem($arrx[0],$set)!==false ){ fprintf($fp1,"%d
A %X\t\t\t%s\t%s\t*%s\tERROR DE
SINTAXIS\r\n",$a,$localidad,$arrx[0],$arrx[1],$linex[1]);
}elseif($r==1 &&
!empty($arrx[1])){////////////////////////////////////////////***RELATIVO
CHANGE
$localidad=$localidad+2;
}elseif($z==3){//*******************************************DECLARACION
DE VARIABES $Inst=dir_memo($Modir,$arrx[2],$variable,$incvariable);
fprintf($fp1,"%d
A\t%s\t%s\tEQU\t%s\t*%s\r\n",$a,$Inst,$arrx[0],$arrx[2],$linex[1]);
$variable[$incvariable][0]=$arrx[0];
$variable[$incvariable][1]=$arrx[2]; $incvariable++; }elseif($w==2
&&
$Nmonic!==false){//**************************ORG********NEMONICOS
CON MODO DE DIRECCION $alpha=buscaeti($etiqueta,$a,$arrx[1]);
if(verifica_nem($arrx[0],$set)!==false) { if($alpha!==false){
$Unix=$set[$Nmonic][5].dechex($etiqueta[$alpha][1]);
fprintf($fp1,"%d A
%X\t%s\t\t%s\t%s\t\r\n",$a,$localidad,$Unix,$arrx[0],$arrx[1]);
$localidad=$localidad+(strlen($Unix))/2;
}elseif($arrx[0]=="FCB"){
-
Prez Gonzlez Josu Abraham Programacin y estructura de
computadoras
$Inst=dir_memo(8,$arrx[1],$variable,$incvariable); $Unix=$Inst;
$localidad=$localidad + 0x0000; fprintf($fp1,"%d A
%X\t%s\t\t%s\t%s\t*%s\r\n",$a,$localidad,$Unix,$arrx[0],$arrx[1],$linex[1]);
$localidad=$localidad+(strlen($Unix))/2;
}elseif($arrx[0]=="ORG"){$localidad=dir_memo($Modir,$arrx[1],$variable,$incvariable);
$localidad=dechex($localidad); fprintf($fp1,"%d A
%X\t%s\t\t%s\t*%s\r\n",$a,$localidad,$arrx[0],$arrx[1],$linex[1]);
$localidad=$localidad + 0x0000; }elseif($Nmonic!==false){
if($set[$Nmonic][$Modir]!="0"){/////////////////////EXEPCION CHANGE
$Inst=dir_memo($Modir,$arrx[1],$variable,$incvariable);
$Unix=$set[$Nmonic][$Modir].$Inst; $localidad=$localidad + 0x0000;
fprintf($fp1,"%d A
%X\t%s\t\t%s\t%s\t*%s\r\n",$a,$localidad,$Unix,$arrx[0],$arrx[1],$linex[1]);
$localidad=$localidad+(strlen($Unix))/2;
}elseif($set[$Nmonic][$Modir]=="0"){ fprintf($fp1,"%d A
%X\t\t\t%s\t%s\tERROR INCONSISTENCIA DE
DIRECCIONAMIENTO\r\n",$a,$localidad,$arrx[0],$arrx[1]);
}elseif($Modir===false){ fprintf($fp1,"%d A %X\t\t\t%s\t%s\tERROR
INCONSISTENCIA DE
DIRECCIONAMIENTO\r\n",$a,$localidad,$arrx[0],$arrx[1]); }else{
fprintf($fp1,"%d A %X\t\t\t%s\t%s\tERROR INCONSISTENCIA DE
DIRECCIONAMIENTO\r\n",$a,$localidad,$arry[0],$arry[1]); } }else{
$AROR=explode("\r\n",$linea); fprintf($fp1,"%d A
%X\t\t\t%s\t\tERROR\r\n",$a,$localidad,$AROR[0]); } } }elseif($w==1
&& $Nmonic!==false &&
$z==0){//*****************END******NEMONICOS******INHERENTE
if($Nmonic!==false && $set[$Nmonic][6]!="0"){
$Unix=$set[$Nmonic][6]; $localidad=$localidad + 0x0000;
fprintf($fp1,"%d A
%X\t%s\t\t%s\t*%s\r\n",$a,$localidad,$Nmonic,$arrx[0],$linex[1]);
-
Prez Gonzlez Josu Abraham Programacin y estructura de
computadoras
$localidad=$localidad+(strlen($Unix))/2; } }elseif($z==1
&&
verifica_nem($arrx[0],$set)===false){/////////////////////*****ETIQUTASSSS****CHANGE
$rw=explode(" ",$linea); $zx=explode("\t",$linea);
if(!empty($zx[0]) && !empty($rw[0])){
$etiqueta[$incetiqueta][0]=$arrx[0]; //ETIQUETA
$etiqueta[$incetiqueta][1]=$localidad; //LOCALIDAD ETIQUETA
$incetiqueta++; fprintf($fp1,"%d A
%X\t\t%s\t\t*%s\r\n",$a,$localidad,$arrx[0],$linex[1]); }else{
$AROR=explode("\r\n",$linea); fprintf($fp1,"%d A
%X\t\t%s\t\tERROR\r\n",$a,$localidad,$AROR[0]);}
}//**************************************IF COMENTARIOS
//*****************************************SIN
COMENTASRIOS*************************************************
}elseif($comen===false){/////IF SIN COMENTA
$arry=arr_linea($linea);
//**************************************OPCION DE LINEA COMPLETA
$Nmonic=" "; $Modir=" "; $i=0; $z=0; $w=0; $error1=0; $r=0;
while(!empty($arry[$i])){ $Nemo=verifica_nem($arry[$i],$set);
if($Nemo>127 && $Nemo
-
Prez Gonzlez Josu Abraham Programacin y estructura de
computadoras
$w++; $z++; }elseif($Nemo===false){//SI NO HAY NEMONICO? $z++;
}else{ $error1++;} $i++; }//TERMINA WHILE ARRX
if(!empty($arry[1])&&!empty($arry[0])){$error1=1;}
if($error1==1 && $r!=1 &&
modo_dir($arry[1],$incvariable,$variable,$etiqueta,$incetiqueta,$Nemo)===false
&& verifica_nem($arry[0],$set)!==false ){ fprintf($fp1,"%d
A %X\t\t\t%s\t%s\t\t1ERROR DE
SINTAXIS\r\n",$a,$localidad,$arry[0],$arry[1]); }elseif($r==1
&&
!empty($arry[1])){////////////////////////////////////////////***RELATIVO
CHANGE $localidad=$localidad+2;
}elseif($z==3){//*******************************************DECLARACION
DE VARIABES $Inst=dir_memo($Modir,$arry[2],$variable,$incvariable);
fprintf($fp1,"%d
A\t%s\t%s\tEQU\t%s\r\n",$a,$Inst,$arry[0],$arry[2]);
$variable[$incvariable][0]=$arry[0];
$variable[$incvariable][1]=$arry[2]; $incvariable++; }elseif($w==2
&&
$Nmonic!==false){//**************************ORG********NEMONICOS
CON MODO DE DIRECCION $alpha=B_eti($ETI,$arry[1]);
if(verifica_nem($arry[0],$set)!==false) { if($alpha!==false){
$Unix=$set[$Nmonic][5];//MAS 2 LOCALIDAES fprintf($fp1,"%d A
%X\t%s\t\t%s\t%s\t\r\n",$a,$localidad,$Unix,$arry[0],$arry[1]);
$localidad=$localidad+(strlen($Unix)+4)/2;
}elseif($arry[0]=="FCB"){
$Inst=dir_memo(8,$arry[1],$variable,$incvariable); $Unix=$Inst;
$localidad=$localidad + 0x0000; fprintf($fp1,"%d A
%X\t%s\t\t%s\t%s\t\r\n",$a,$localidad,$Unix,$arry[0],$arry[1]);
$localidad=$localidad+(strlen($Unix))/2;
-
Prez Gonzlez Josu Abraham Programacin y estructura de
computadoras
}elseif($arry[0]=="ORG"){$localidad=dir_memo($Modir,$arry[1],$variable,$incvariable);
$localidad=hexdec($localidad); $localidad=$localidad + 0x0000;
fprintf($fp1,"%d A
%X\t\t\t%s\t%s\r\n",$a,$localidad,$arry[0],$arry[1]);
}elseif($Nmonic!==false && $Modir!==false &&
!empty($set[$Nmonic][$Modir])){
if($set[$Nmonic][$Modir]!="0"){/////////////////////EXEPCION CHANGE
$Inst=dir_memo($Modir,$arry[1],$variable,$incvariable);
$Unix=$set[$Nmonic][$Modir].$Inst; $localidad=$localidad + 0x0000;
fprintf($fp1,"%d A
%X\t%s\t\t%s\t%s\r\n",$a,$localidad,$Unix,$arry[0],$arry[1]);
$localidad=$localidad+(strlen($Unix))/2;
}elseif($set[$Nmonic][$Modir]=="0"){ fprintf($fp1,"%d A
%X\t\t\t%s\t%s\tERROR INCONSISTENCIA DE
DIRECCIONAMIENTO\r\n",$a,$localidad,$arry[0],$arry[1]);
}elseif($Modir===false){ fprintf($fp1,"%d A %X\t\t\t%s\t%s\tERROR
INCONSISTENCIA DE
DIRECCIONAMIENTO\r\n",$a,$localidad,$arry[0],$arry[1]); }
}else{ fprintf($fp1,"%d A %X\t\t\t%s\t%s\tERROR INCONSISTENCIA
DE DIRECCIONAMIENTO\r\n",$a,$localidad,$arry[0],$arry[1]); } }else{
$AROR=explode("\r\n",$linea); fprintf($fp1,"%d A
%X\t\t\t%s\t\tERROR\r\n",$a,$localidad,$AROR[0]); } }elseif($w==1
&& $Nmonic!==false &&
$z==0){//*****************END******NEMONICOS******INHERENTE
if($Nmonic!==false && $set[$Nmonic][6]!="0"){
$Unix=$set[$Nmonic][6]; $localidad=$localidad + 0x0000;
fprintf($fp1,"%d A %X\t%s\t\t%s\r\n",$a,$localidad,$Unix,$arry[0]);
$localidad=$localidad+(strlen($Unix))/2; } }elseif($z==1 &&
verifica_nem($arry[0],$set)===false){/////////////////////*****ETIQUTASSSS****CHANGE
$rw=explode(" ",$linea); $zx=explode("\t",$linea);
if(!empty($zx[0]) && !empty($rw[0])){
-
Prez Gonzlez Josu Abraham Programacin y estructura de
computadoras
$etiqueta[$incetiqueta][0]=$arry[0]; //ETIQUETA
$etiqueta[$incetiqueta][1]=$localidad; //LOCALIDAD ETIQUETA
$incetiqueta++; fprintf($fp1,"%d A
%X\t\t%s\t\t\r\n",$a,$localidad,$arry[0]); }else{
$AROR=explode("\r\n",$linea); fprintf($fp1,"%d A
%X\t\t%s\t\tERROR\r\n",$a,$localidad,$AROR[0]);} } }//FIN SIN
COMENTARIOS COMENTA }//////FIN WHILE DOS fclose($fp); return
$etiqueta; }////FIN ETIQUETA ?>