Ver Mensaje Individual
  #4 (permalink)  
Antiguo 19/11/2012, 07:20
Avatar de sofiarivas93
sofiarivas93
 
Fecha de Ingreso: noviembre-2012
Mensajes: 1
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Lms lenguaje maquina simpletron

Aqui te dejo el codigo completo hecho en Ansi c espero que te ayude

//Computadora Simpletron
#include <stdio.h>
#include <stdlib.h>
#define LEE 10
#define ESCRIBE 11
#define CARGA 20
#define ALMACENA 21
#define SUMA 30
#define RESTA 31
#define DIVIDE 32
#define MULTIPLICA 33
#define SALTA 40
#define SALTANEG 41
#define SALTACERO 42
#define ALTO 43
#define TAMANOMEM 99
#define CERO 0
int memoria[TAMANOMEM] = {0};
//Llamada a funciones
int validar(int acumulador);
void CargarPrograma(int[]);
void EjecutarPrograma(int[]);
void imprimir(int acumulador,int contador,int registroInstruccion,int codigoOperacion,int operando,int memoria[]);
//Programa Principal
void main(void) {
CargarPrograma(memoria);
EjecutarPrograma(memoria);
}
//Imprime las instrucciones y cargar las palabras
void CargarPrograma(int memoria[]) {
int i,instruccion;
printf("*** Bienvenido a Simpletron! ***\n");
printf("*** Por favor introduzca a su programa una instrucion ***\n");
printf("*** a la vez (o palabra de datos). ***\n");
printf("*** Yo escribire el numero de ubicacion y un ***\n");
printf("*** signo de interrogacion (?). Usted escriba ***\n");
printf("*** la palabra para dicha ubicacion. Escriba el ***\n");
printf("*** centinela -99999 para terminar la ***\n");
printf("*** introduccion de datos a su programa ***\n");
for(i = 0; i < TAMANOMEM; i++) {
instruccion=0;
do{
if (i<10) printf( "%d%d?",CERO,i);
else {printf("%d?",i);}
scanf("%d",&instruccion);
}while((instruccion<-9999 || instruccion>9999) && instruccion!=-99999);
if (instruccion == -99999) break;
memoria[i] = instruccion;
}
printf("***Carga del programa completada\n***Comienza la ejecucion del programa***");
}
//Valida que el acumulador este dentro del rango
int validar(int acumulador){
int fin;
if(acumulador>9999 || acumulador<-9999){
printf ("***Terminacion anormal del programa***");
fin = CERO;
}
return fin;
}
//Realiza los calculos dependiendo de las palabras ingresadas
void EjecutarPrograma(int memoria[]){
int fin=1;
int contador = 00;
int registroInstruccion = +0000;
int codigoOperacion = 00;
int operando = 00;
int acumulador = +0000;
while(fin!=CERO) {
registroInstruccion = memoria[contador];
codigoOperacion = registroInstruccion/100;
operando = registroInstruccion % 100;
switch (codigoOperacion) {
case LEE: printf("\n?"); scanf("%d",&memoria[operando]); ++contador; break;
case ESCRIBE: printf("%d",memoria[operando]); ++contador; break;
case CARGA: acumulador = memoria[operando]; ++contador; break;
case ALMACENA: memoria[operando] = acumulador; ++contador; break;
case SUMA:
acumulador += memoria[operando];
fin=validar(acumulador);
++contador; break;
case RESTA:
acumulador -= memoria[operando];
fin=validar(acumulador);
++contador; break;
case DIVIDE:
if (memoria[operando] == 0) { printf("Error Intento de division por 0"); return; }
acumulador /=memoria[operando];
fin=validar(acumulador);
++contador; break;
case MULTIPLICA:
acumulador *=memoria[operando];
fin=validar(acumulador);
++contador; break;
case SALTA: contador = operando; break;
case SALTANEG: if(acumulador < 0) contador = operando; ++contador; break;
case SALTACERO: if(acumulador == 0) contador=operando; ++contador; break;
case ALTO: printf ("\n*** Finaliza ejecucion de Simpletron***");
imprimir(acumulador,contador,registroInstruccion,c odigoOperacion,operando,memoria);fin = CERO;
}
}
imprimir(acumulador,contador,registroInstruccion,c odigoOperacion,operando,memoria);
}
//Imprime el vaciado de memoria
void imprimir(int acumulador,int contador,int registroInstruccion,int codigoOperacion,int operando,int memoria[]) {
int i,j;
printf( "\nREGISTROS:" );
printf("\nAcumulador \t\t%d",acumulador);
printf("\nContador \t\t%d",contador);
printf("\nRegistroInstruccion %d",registroInstruccion);
printf("\nCodigoOperacion \t%d",codigoOperacion);
printf("\nOperando \t\t%d",operando);
printf("\nMEMORIA:\n");
for (i=0;i <= 9 ; i++) /*encabezado del 1 al 9*/printf("\t%d",i );
for (i = 0; i <= 9; i++){
printf(" \n%d",i*10);
for (j = 0 ; j <= 9; j++) printf(" +%6d",memoria[10*i+j]);
}
}