Sunday, March 11, 2012

Introducción al lenguaje ensamblador


El lenguaje ensamblador es un lenguaje de bajo nivel que representa más directamente el código máquina específico para cada arquitectura de computadoras legible por un programador.

Se utiliza para mejorar la eficiencia de alguna rutina específica, para realizar tareas que no son soportadas por lenguajes de alto nivel, para obtener acceso a otras funciones de bajo nivel del procesador, entre otras cosas.

Es el lenguaje de programación más básico disponible de algún procesador. Con el lenguaje ensamblador, un programador trabaja con operaciones implementadas directamente desde el hadware (CPU físico). El lenguaje ensamblador carece de variables y funciones, y no es portatil entre algunas familias de procesadores.

¿Por qué usar lenguaje ensamblador?

Un programa en ensamblador es más rápido que uno generado por un compilador en un lenguaje de alto nivel. 

Éste lenguaje es el lenguaje de programación más poderoso que existe, le permite a los programadores tener la percepción requerida para escribir adecuadamente y de una manera más óptima los lenguajes de alto nivel. Aprender lenguaje ensamblador vale el tiempo y esfuerzo que le dedique. 

Cuando un código es escrito en lenguaje de alto nivel, éste debe ser compilado, traducido a lenguaje máquina, y luego ser interpretado por otro programa.

Con el lenguaje ensamblador es diferente, sus instrucciones corresponden y tienen mucho parecido al lenguaje máquina, por lo que es más fácil interpretarse y requiere menos tiempo y recursos.

El lenguaje ensamblador permite al programador utilizar representación simbólica de códigos de operación de máquina, ubicaciones de memoria, registros, entre otras partes de una instrucción.

Ejemplo

Tenemos el siguiente código escrito en ensamblador:

MOV AX, 47104
MOV DS, AX
MOV [3998], 36
INT 32

Cuando se lee este programa, cada una de las líneas de código escritas se convierten en instrucciones para el CPU. Este programa utiliza dos tipos de instrucciones: MOV y INT. La función de MOV mueve la información, mientras que ING transfiere el control del procesador a los drivers del dispositivo o al sistema operativo.

Con esto podemos decir que la instrucción MOV AX, 47104 le dice a la computadora que copie el número 47104 en la ubicación AX.

La siguiente instrucción: MOV DS, AX, le dice a la computadora que copie el número en AX a la ubicación DS.

Después, MOV [3998], 36 le dice a la computadora que ponga el número 36 en la ubicación 3998 de la memoria.

ING 32 termina el programa y se regresa al sistema operativo.

¿Cómo funciona este programa?

Dentro del CPU existen varias ubicaciones llamadas registros, donde se almacena un número. Existen registros tales como AX, que son de no realizan acciones especiales, sin embargo, otros registros como DS, controlan la forma en la que el CPU funciona. 

DS es el registro del segmento, se usa para seleccionar en qué área de la memoria puede escribir el CPU. En el programa escrito anteriormente escribimos el número 47104 en DS, esto le dice al CPU que accese a la memoria en la tarjeta de video. 

Después nuestro programa ubica el número 36 en 3998 de la tarjeta de video. 36 es el código para el signo "quot; y 3998 es la ubicación de ña esquina inferior derecha de la pantalla. Entonces un signo $ va a aparecer en la pantalla por unos microsegundos. Después, nuestro programa le dice al CPU que haga una interrupción. Una interrupción se usa para detener un programa y ejecutar otro en su lugar. En este caso, vamos a interrumpir 32 y terminar nuestro programa para que se regrese al prinicipio. 

Bibliografía











Tutorial para hacer un letrero luminoso

En este post describiré cómo hacer un letrero luminoso como el que se muestra a continuación:




Material necesario:




Material para soldar




Primeramente vamos a trabajar con el ventilador:


1. El primer paso es insertar el led infrarojo por debajo de la entrada de 12 V del ventilador.
2. La resistencia de 560 Ohms (verde, azul y café) debe ser soldada al cátodo del led (patita más corta), dejando una separación de 1.5 cm entre el led y la resistencia.




3. Aislamos la conexión con cinta.
4. Ahora tenemos que conectarla por debajo del ventilador al cable de color azul que viene en el abanico y soldar. La otra patita del led que no tiene resistencia se conecta al cable rojo.
Nota: Para conectar el cable con la resistencia es necesario pelar el cable en la parte en la que se va a conectar sin cortar el resto. Soldamos esa parte y aislamos con cinta.




Para probar si el abanico funciona debemos conectar los cables rojo y azul que quedaron arriba a un eliminador (cargador) o una fuente de luz. El abanico debe girar. 

Ahora sigamos con el circuito:
Aqui se muestra un diagrama que tenemos que seguir para que el circuito sea formado correctamente




Tenemos una tablita con el circuito ya impreso, solamente tenemos que colocar las piezas en el orden y posición adecuados.




Aqui se muestra cómo se van a colocar las piezas descritas previamente en el material y la manera en la que se deben acomodar.
La base del circuito integrado debe estar en posición U3.
Las resistencias deben estar en sus respectivas posiciones (R1-R2).
Los leds tienen que ir acomodados en la posición correcta, tenemos que verificar que el cátodo esté en la parte de abajo. (La patita más corta del led es el cátodo).
El regulador tiene que estar ubicado en posición U2.
El capacitor debe estar en posición C1. Es importante verificar la posición de la terminal positiva.


Cuando terminemos de acomodar estos componentes debemos soldarlos, de manera que quede fijo el circuito.
También debemos soldar los cables del porta pila.
Después tenemos que cortar los excesos de metal.


Después de tener nuestro circuito tenemos que soldar también el foto transistor (D1). Éste debe ir soldado a 1.5 cms sobre la tabla, ya que después se doblará y se colocará hacia abajo. También debemos soldar y cortar los excesos de metal.


El circuito debe quedar de la siguiente manera:




Ahora colocamos el circuito sobre el abanico en la base y le agregamos una batería de 9 Volts.

Al final debe quedar de la siguiente manera:


Si queremos probar si funciona bien, podemos insertar un led en la base de pic. Tiene que estar en la linea numero 5, contando desde el lado donde está el regulador. El foco del led debe encender.


El ventilador debe ir atornillado a una base para que no se mueva mucho.


Ahora tenemos que programar el pic que va a ir en la base. Este pic es el que hará que prendan los leds del letrero luminoso y forme las palabras que queremos.


Para esto necesitamos:


Hardware:










Software:
  • Steren PIC-600 (USB PIC Programmer)
  • MikroBasic Pro for PIC
Primeramente necesitamos generar un archivo .hex usando el código que le queremos programar a  nuestro pic. 
Para esto vamos a utilizar el MikroBasic:


1. Creamos un nuevo proyecto




2. Le cambiamos el nombre al proyecto
3. Identificamos el tipo de pic que vamos a programar. En este caso el que utilizamos fue el P16F628A.

Podemos seleccionar archivos para el proyecto pero no es necesario.
Incluimos todas las librerías.

Después en el panel principal introducimos el código de nuestro programa.
Donde dice program debemos escribir el nombre del proyecto.

Ejemplo: program pic (A nuestro proyecto lo llamamos pic)


Tenemos que editar el proyecto para ponerle algunas especificaciones y que pueda funcionar en nuestro proyecto.

Ahora tenemos que cambiarle éstas opciones:


Tenemos que deshabilitar el masterclear y cambiar el oscilador

Ahora vamos a generar el .hex presionando el botón de build (El que está señalado con la flecha morada)


Si todo salió bien deberíamos ver que abajo diga: Finished successfully.

Ahora ya tenemos el .hex y vamos a programarlo en el pic.

Primero tenemos que cerrar este programa y abrir el Steren PIC 600.

Ahora insertamos el pic en el programador y lo conectamos a la computadora con el cable usb.

El pic tiene que ir acomodado de la siguiente manera:


Cuando abramos el programa nos va a aparecer una pantalla como ésta

Tenemos que detectar el pic presionando el botón que dice "Identify PIC in programmer"


Después seleccionamos el archivo HEX que vamos a utilizar. Ahi tenemos que buscar el que se generó con el programa anterior.



Tenemos que asegurarnos que el PIC no tenga nada programado, si no es un pic nuevo, es recomendable presionar "Erase PIC".

Tenemos que asegurarnos que la información seleccionada en éstos campos sea la adecuada al tipo de pic que utilizamos:


Ahora vamos a cambiarle un poco a la configuración del PIC. Tenemos que irnos a la pestaña PIC Configuration, cambiarle el oscilador y deshabilitarle el Master Clear


Ya que tenemos todo esto listo podemos darle click donde dice write HEX-FILE into PIC


Ahora nuestro PIC ya está programado. Antes de retirarlo tenemos que presionar remove CP para poder quitarlo. Una vez que hayamos hecho esto ya podemos quitar el PIC y ponerlo en la base de nuestro sistema.


Ahora tenemos que probar si funciona...

[VIDEO PENDIENTE]


Bibliografía

Manual de kit de letrero luminoso Steren
Blog de Cecy









Saturday, March 3, 2012

Contributions of the week (week 5)

During this week I made some contributions to the wiki of how an MPI is used in python and what do you need to do if you want it to run. I also added some code of programs using MPI.





My nominations are for Roberto, Juan Carlos and Rafa.

Contributions of the week (Week 4)

During this week I made some contributions in the applications and cluster part of the project. I consider very important to know the things we can do.
I added some information about finding passwords and encryption keys using a supercomputer here



I also contributed with some instructions of how to configure the cluster to help all users (either normal or root) to navigate it here


Contributions of the week (week 3)

This week I did a lot of contributions to the wiki:

I added a series of steps people must follow if they want to compile CUDA and to see some of the example code of all the folders and files of CUDA.
What I added was also helpful in the installation of the necessary tools that make CUDA work correctly in a computer.
This is very important because people can now see and modify the example code of CUDA and they can understand how it works.

Here is the link to the wiki




My nominations:

Roberto Martinez
Ramon Esteban
Juan Carlos Espinoza

CUDA



CUDA is a programming model and parallel computing platform invented by NVIDIA. It works increasing the power of the GPU (Graphics Processing Unit) and it can help increase dramatically the performance of the computer or device where it is installed. It is useful in simulation models, it helps them to be more realistic and exact. Because it is useful in simulation models it can help to reduce the cost of an important project. It has a lot of uses, here I'm going to describe some of them:

1. Blood flow simulation and identification of hidden plaque in arteries
2. Reduction of analysis time of air traffic flow
3. Visualization and large performance boost of nanoscale molecular dynamics (NAMD)
4. Image Analysis and Video Forensics
5. Matlab GPU computing

Almost every major consumer video application has been accelerated by CUDA (Applications such as products from Adobe, Sony, MotionDSP, etc)

It has also been helpful in scientific research because it can accelerate molecules from a simulation program and it can help in new discoveries. It is used by many reserchers, doctors and pharmaceutics over the world.

It is also useful in the financial market, with applications such as Numerix and CompatiblL. It is used in many financial institutions.

Because of CUDA there are now a large amount of GPU clusters installed around the world, and many different companies are using it.

GPU computing is fully supported by all major operating systems.

Bibliography

Contributions of the week (week 2)

During this week I made some posts about the installation of the Hamachi application for those users having mac:

Why hamachi?
Hamachi is a tool that can help us to simulate a Local Area Network (LAN). It lets you securely extend LAN-like networks to distributed teams and workers, therefore, it may be useful because it can help us to work in teams without necessarily being on the same place.

Here is a link to the wiki where I added the information

And here are the contributions I made for the wiki:



I also helped with the translation of some things in this page related to cuda and hamachi.

Because there are a lot of students that have a mac computer, I considered important for them to know how to install it.

Nominations of the week:

Juan Carlos (Because he added the principal information of hamachi to the wiki)
Cecilia (Because she made a program that created recursive threads and that simulated the infection of a virus)

Bibliography: