AC1314-C1AG3
viernes, 17 de enero de 2014
PROGRAMA QUE CALCULA EL MÁXIMO COMÚN DIVISOR "PROGRAMA EUCLIDES"
FUNCIÓN DEL PROGRAMA
Mi programa consiste básicamente en calcular el máximo común divisor de dos números introducidos por teclado. Esto será posible hacerlo para que se ejecute en una máquina que tenga la arquitectura x86.
PROCESO SEGUIDO
Primero repasé teóricamente los documentos que nos han facilitado durante las clases y las transparencias. Luego hice el programa pero en lenguaje C (ya que manejo mejor este lenguaje) de manera que luego pudiera pasarlo sencillamente a x86. Me hizo falta mirar como se hacía el bloque if sin el else y el bucle while ya que el if me servía para intercambiar los números introducidos por teclado con la condición si el NUM1 era mayor que el NUM2.
Luego el primer bucle while me servía para hacer tantas veces una serie de instrucciones para ir calculando primeramente la división del numero mayor introducido entre el menor cambiándose estos valores cada vez que salgan del bucle asta que ese numero menor por que el que se divide sea igual a 0. En segundo bucle while que está dentro del anterior nos sirve para calcular el módulo de la división que vamos realizando de un numero por el otro.
Finalmente, una vez acabado estos bucles obtenemos el M.C.D. que lo imprimos por pantalla.
DIFICULTADES
La primera dificultad encontrada fue que para intercambiar dos números en el if no sabía como hacerlo, ya que no sabíamos si usar en el las variables declaradas o los registros. Al final, me di cuenta de que existía una función que intercambia números y ya no tuve problema.
Aún así mi programa me daba resultados erróneos y pensábamos que el problema estaba en el bucle while pero no fue así. Me di cuenta que al usar el API de C y usar el Invoke scanf nos cambiaban los valores de los registros y por ello los resultados erróneos.
Otra dificultad encontrada era como poner un bucle dentro de otro, ya que nos daba error al decirnos que el segundo while ya estaba declarado. Este error se debe a que while en esta arquitectura no trabaja como función sino como etiqueta y entonces por ello podemos llamarlo como queramos y así resolver el problema. En nuestro caso el segundo bucle dentro del primero lo llamamos módulo.
IMPLEMENTACIÓN EN OTRAS ARQUITECTURAS
Para completar he estado buscando cómo invocar programas ASM desde JAVA, incluyéndole las librerías a java a través del JNI.
Codigo Euclides
Ejecutable x86
ARM VS x86
En esta parte del blog presentaré un poco que hace el programa basado en ambas arquitecturas.
Que problemas he tenido y como los he solventado
Conclusiones propias y las características de ambas arquitecturas.
Principalmente comentare cual es el programa.
El programa es una sencilla cuenta-atrás nombrada con caracteres ( "_" "|"), la aplicación no ha sido de una dificultad muy alta pero lo suficiente para encontrar varias diferencias amplias entre ambas arquitecturas.
Por un lado la velocidad que tenia ARM era tanto una ventaja como un inconveniente ya que requería que el programa tuviera un pequeño delay de tiempo.
En x86 ese problema era muy fácil de solventar usando al api de windows
Una de las dificultades más grandes encontradas es tener que controlar en cada momento que registro contenía que y como usarlo.
Como opinión personal, yo usaría x86 por su facilidad a la hora de programar, o por lo menos por la posibilidad de solventar los problemas con la api de windows
Código ARM
Código x86
Características ARM y x86
ARM
Está basado en RISC
No es compatible con x86
Al ser más rápido, este fue dejado para el mundo móvil
No es fácil encontrar compilador
Se trata de una arquitectura de carga y almacenamiento
Opera registro a registro
Tiene un banco de 37 registros (16 disponibles) de 32 bits
Las instrucciones tienes un tamaño fijo y se ejecutan en un ciclo de reloj
X86
Está basado en CISC
No es compatible con ARM
Ejecutaba las ordenes mas lentas y fue usado para escritorio.
Longitud de instrucción variable
Dispone de 8 registros de propósito general de 32 bits, 6 de segmentos de 16 bits
registro EFLAGS 32 bits, un puntero 32 bits,
8 registros de coma flotante, 8 de MMX.
Tras ver las características podemos concluir en que:
- Están basados en diferentes arquitecturas computacionales
- No son compatibles entre sí
- ARM es mas rápido a la hora de ejecutar ordenes y fue destinado a móviles
- La longitud es contraria dependiendo del caso (ARM fija, x86 variable)
- ARM contiene más registros de propósito general
- x86 tiene registros de coma flotante.
Que problemas he tenido y como los he solventado
Conclusiones propias y las características de ambas arquitecturas.
Principalmente comentare cual es el programa.
El programa es una sencilla cuenta-atrás nombrada con caracteres ( "_" "|"), la aplicación no ha sido de una dificultad muy alta pero lo suficiente para encontrar varias diferencias amplias entre ambas arquitecturas.
Por un lado la velocidad que tenia ARM era tanto una ventaja como un inconveniente ya que requería que el programa tuviera un pequeño delay de tiempo.
En x86 ese problema era muy fácil de solventar usando al api de windows
Una de las dificultades más grandes encontradas es tener que controlar en cada momento que registro contenía que y como usarlo.
Como opinión personal, yo usaría x86 por su facilidad a la hora de programar, o por lo menos por la posibilidad de solventar los problemas con la api de windows
Código ARM
Código x86
Características ARM y x86
ARM
Está basado en RISC
No es compatible con x86
Al ser más rápido, este fue dejado para el mundo móvil
No es fácil encontrar compilador
Se trata de una arquitectura de carga y almacenamiento
Opera registro a registro
Tiene un banco de 37 registros (16 disponibles) de 32 bits
Las instrucciones tienes un tamaño fijo y se ejecutan en un ciclo de reloj
X86
Está basado en CISC
No es compatible con ARM
Ejecutaba las ordenes mas lentas y fue usado para escritorio.
Longitud de instrucción variable
Dispone de 8 registros de propósito general de 32 bits, 6 de segmentos de 16 bits
registro EFLAGS 32 bits, un puntero 32 bits,
8 registros de coma flotante, 8 de MMX.
Tras ver las características podemos concluir en que:
- Están basados en diferentes arquitecturas computacionales
- No son compatibles entre sí
- ARM es mas rápido a la hora de ejecutar ordenes y fue destinado a móviles
- La longitud es contraria dependiendo del caso (ARM fija, x86 variable)
- ARM contiene más registros de propósito general
- x86 tiene registros de coma flotante.
jueves, 16 de enero de 2014
PLANIFICACIÓN
DICIEMBRE
|
|||||||||||||||
Lu.
|
|
Ma.
|
|
Mi.
|
|
Ju.
|
|
Vi.
|
|
Sá.
|
|
Do.
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
1
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
2
|
|
3
|
|
4
|
|
5
|
|
6
|
|
7
|
|
8
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
9
|
|
10
|
|
11
|
|
12
|
|
13
|
|
14
|
|
15
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
16
|
|
17
|
|
18
|
|
19
|
|
20
|
|
21
|
|
22
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
23
|
|
24
|
|
25
|
|
26
|
|
27
|
|
28
|
|
29
|
|||
30
|
|
31
|
|
|
ENERO
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1
|
|
2
|
|
3
|
|
4
|
|
5
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6
|
|
7
|
|
8
|
|
9
|
|
10
|
|
11
|
|
12
|
|
|
|
|
|
|
|
|
|
|
|
|
|
13
|
|
14
|
|
15
|
|
16
|
|
17
|
|
18
|
|
19
|
|
|
|
|
|
|
|
|
|
|
|
|
|
20
|
|
21
|
|
22
|
|
23
|
|
24
|
|
25
|
|
26
|
Asignación de cuestiones
|
Planificación
|
Realización de trabajos
|
Decisión de que realizar en cada cuestion
|
Publicación blog y revisión
|
Realización de presentación
|
Exposición del trabajo
|
|
Como solo coincidimos en Cádiz los jueves todos los
componentes del grupo se ha decidido que nos reuniremos dicho día si hay algún
inconveniente para subsanarlo.
Suscribirse a:
Entradas (Atom)