Post on 24-Nov-2015
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 ?>