Professional Documents
Culture Documents
COMPUTACIONALES DE MATAMOROS
ndice:
Introduccin: ............................................................................................................................................. - 1 Ejercicio #1: ............................................................................................................................................... - 1 Ejercicio #2: ............................................................................................................................................... - 2 Ejercicio #3: ............................................................................................................................................... - 3 Ejercicio #4: ............................................................................................................................................... - 7 Ejercicio #5: ............................................................................................................................................. - 11 Ejercicio #6: ............................................................................................................................................. - 12 Ejercicio #7: ............................................................................................................................................. - 14 Ejercicio #8: ............................................................................................................................................. - 15 Ejercicio #9: ............................................................................................................................................. - 17 Ejercicio #10: ........................................................................................................................................... - 17 Material de Apoyo: ................................................................................................................................. - 18 -
Introduccin:
El presente manual est enfocado hacia la arquitectura ARM de 32 bits, y como ejemplo prctico se
toma a la computadora de bajo costo Raspberry Pi.
Para poder ejecutar los programas del presente manual se utiliza el ensamblador GNU.
Ejercicio #1:
Teora: En lenguaje ensamblador los comentarios son identificados de la siguiente manera: /*.*/; y son
utilizados para aadir algunas notas o apuntes que puedan ser tiles para ti mismo o para algn otro
programador.
Existe otro concepto importante, que son las directivas; estas comienzan con un punto . y le dicen al
ensamblador GNU que realice una actividad especial.
Por ltimo se menciona el concepto de funcin, la cual recibe datos como parmetros de entrada y en
algunas ocasiones emite datos.
Objetivo: Hacer un programa que arroje el error #2 al ser ejecutado.
Practica: Seguir los siguientes pasos para la elaboracin de este primer ejemplo.
-1-
d) Esto crea el archivo objeto, llamado first.o. Ahora se debe de enlazar dicho archivo:
e) Ya una vez que se cre el archivo ejecutable llamado first; se puede ejecutar de la siguiente
manera:
Conclusiones: En el siguiente espacio, debes de escribir tus experiencias al elaborar este ejercicio.
_____________________________________________________________________________________
_____________________________________________________________________________________
_____________________________________________________________________________________
_____________________________________________________________________________________
_____________________________________________________________________________________
_____________________________________________________________________________________
______________________________________________________________________________
Ejercicio #2:
Teora: La instruccin add aade los valores contenidos en 2 registros; estos valores deben de ser
almacenados en un tercer registro.
Objetivo: Crear un programa que aade 2 nmeros y desplegar el resultado.
Practica: Crea un programa siguiendo estos pasos:
a) Escribe en el LXTerminal la siguiente instruccin: sudo nano sum01.s.
b) En el editor de texto escribe el siguiente programa:
-2-
d) Intenta otros valores en los registros r1 y r2; vuelve a compilar y ejecutar el programa.
e) Ahora intenta de una mejor manera la adicin; utilizando de una forma ms inteligente el
registro r0. Crea un nuevo programa llamado sum02, complalo, ejectalo y ve el resultado.
Conclusiones: En el siguiente espacio, debes de escribir tus experiencias al elaborar este ejercicio.
_____________________________________________________________________________________
_____________________________________________________________________________________
_____________________________________________________________________________________
_____________________________________________________________________________________
_____________________________________________________________________________________
_____________________________________________________________________________________
______________________________________________________________________________
Ejercicio #3:
Teora: Todas las computadoras tienen memoria, y es ah donde el cdigo de un programa y los datos
que este puede manejar son almacenados. El lugar donde se almacena la informacin dentro de la
memoria se le llama registro.
En la arquitectura ARM, todos los operandos deben de estar almacenados en registros; es por eso que
se deben de cargar (load) dichos valores a algunos registros, para poder ser manipulados, se realiza la
-3-
La directiva .balign asegura que la siguiente direccin empezara con un espacio de 4 bytes. La directiva
.word declara que la herramienta del ensamblador debe emitir el valor del argumento de las directivas
como un entero de 4 bytes. En el caso anterior, se emitir, un espacio de memoria de 4 bytes que tiene
el valor 3.
-4-
-5-
c) Escriba otro programa llamado store01.s. Inicializa myvar1 y myvar2 a 0; almacena los valores 3
y 4 a los registros. Compila y ejecuta el programa:
-6-
Conclusiones: En el siguiente espacio, debes de escribir tus experiencias al elaborar este ejercicio.
_____________________________________________________________________________________
_____________________________________________________________________________________
_____________________________________________________________________________________
_____________________________________________________________________________________
_____________________________________________________________________________________
_____________________________________________________________________________________
______________________________________________________________________________
Ejercicio #4:
Teora: GDB es un programa de depuracin en GNU. Este programa permite ver que est sucediendo
adentro de un programa que est en ejecucin, o bien que est haciendo un programa al mismo tiempo
que este colapsa. Se pueden hacer 4 tareas principales, que ayudan a buscar los errores dentro de los
programas al mismo tiempo que se ejecuta:
Empezar un programa, especificando los valores que pudieran afectar el comportamiento del
programa bajo prueba.
Hacer que el programa bajo prueba se detenga en un punto especfico.
Examinar que pasa, cuando el programa bajo prueba se ha detenido.
Cambiar algunos valores o cdigo en el programa, de tal manera que se pueda experimentar con
las correcciones de algn error de cdigo y as facilitar la manera de encontrar errores.
Objetivo: Utilice el programa titulado store01.s, para practicar con algunos comandos del depurador de
errores GDB.
Practica: Realice los siguientes pasos:
a) Inicialice gdb, especificando el programa que se quiere analizar:
-7-
f)
Se pueden modificar los valores de algunos registros, asignndoles valores en especfico; utilice
el comando p:
g) Se puede observar que gdb, ha impreso $1, este es un identificador del resultado, se puede
utilizar cuando se requiera, as de esta manera se optimiza el proceso de ingreso de
instrucciones.
-8-
i)
j)
l)
Como se pudo observar, ah estaba contenido una direccin de memoria. Ahora bien, para
poder ver el valor que contena dicha direccin, ejecute el siguiente comando:
m) Se pudo observar el valor 0, ya que ese valor fue como se inicializo myvar1 y myvar2. Contine
con el siguiente paso. Observa que se puede utilizar disas en lugar de disassemble:
-9-
p) Ahora, se puede ver que, lo almacenado en r3, esta tambin almacenado en myvar1. Sera
cierto?
- 10 -
Conclusiones: En el siguiente espacio, debes de escribir tus experiencias al elaborar este ejercicio.
_____________________________________________________________________________________
_____________________________________________________________________________________
_____________________________________________________________________________________
_____________________________________________________________________________________
_____________________________________________________________________________________
_____________________________________________________________________________________
______________________________________________________________________________
Ejercicio #5:
Teora: un registro especial en la arquitectura ARM es el registro r15, el cual se conoce como PC, y es el
equivalente al registro IP-Instruction Pointer en otras arquitecturas. El registro PC o program counter,
contiene la direccin de la siguiente instruccin a ser ejecutada. Cuando, el procesador ARM ejecuta una
instruccin 2 cosas pueden pasar al final de la ejecucin: si la instruccin no modifica a PC (y la mayora
de las instrucciones no lo hacen), PC se incrementa en un valor de 4. Por qu se incrementa un valor de
4?, la respuesta es que en la arquitectura ARM, las instrucciones son 32 bits de ancho, as que hay 4
bytes entre cada instruccin.
Una vez que el procesador ha ejecutado completamente una instruccin, despus este utiliza el valor en
el registro PC como la direccin para la siguiente instruccin a ser ejecutada. De esta forma una
instruccin que no modifica a PC, ser seguida por la siguiente instruccin en la memoria (ya que ha sido
incrementado de manera automtica por 4). Esto es llamado secuencia implcita de instrucciones:
despus de que una instruccin es ejecutada, usualmente la siguiente en memoria lo hace. Pero si una
instruccin modifica a PC, por ende debe de ser un valor diferente a PC + 4; entonces se debe de
ejecutar otra instruccin del programa. Este proceso de cambiar los valores de PC es llamado
Branching.
Objetivo: Realizar un programa donde se practique el concepto de Branching.
Practica: Crear un programa titulado compare01.s. Copia el siguiente cdigo:
- 11 -
Conclusiones: En el siguiente espacio, debes de escribir tus experiencias al elaborar este ejercicio.
_____________________________________________________________________________________
_____________________________________________________________________________________
_____________________________________________________________________________________
_____________________________________________________________________________________
_____________________________________________________________________________________
_____________________________________________________________________________________
______________________________________________________________________________
Ejercicio #6:
Teora: En este ejercicio, se utilizaran conceptos como estructuras if-then-else y ciclos (while y for).
Objetivos:
1. Crear un programa que sume los nmeros del 1 al 22.
2. Crear un programa que resuelva la conjetura de Collatz (Dado un numero n, se dividir entre 2 si
es par; si el nmero es impar, se multiplica por 1 y se suma 1).
Practica:
Objetivo 1:
a) Escriba el siguiente cdigo en un programa llamado loop01.s.
- 12 -
- 13 -
Ejercicio #7:
Teora: Para la realizacin de este ejercicio, se deben de haber revisado los conceptos de indexing.
Adems de las operaciones de cambio (shift operations), como: LSL, LSR, ASR, ROR.
Objetivo: Practicar algunas operaciones matemticas de multiplicacin y divisin, utilizando operaciones
de cambio (shift operations).
Practica: Escriba instrucciones en lenguaje ensamblador que realicen las siguiente operaciones:
a) R1 (r2*2)
b) R1(r2*4)
c) R1(r3/8)
d) R1(r2*16)
e) R1r1*3
f)
R1r1*5
g) R1r2*(-7)
h) R1r2*7
- 14 -
R17*r1
j)
R13*r1
k) R12*r1
Conclusiones: En el siguiente espacio, debes de escribir tus experiencias al elaborar este ejercicio.
_____________________________________________________________________________________
_____________________________________________________________________________________
_____________________________________________________________________________________
_____________________________________________________________________________________
_____________________________________________________________________________________
_____________________________________________________________________________________
______________________________________________________________________________
Ejercicio #8:
Teora: Hasta este momento los ejercicios se han enfocado hacia el segundo operando de la mayora de
las instrucciones aritmticas. Para este segundo operando se pueden utilizar operaciones de cambio,
que permiten mover hacia a izquierda o hacia la derecha, o bien rotar los bits de algn registro.
Un arreglo: Es una secuencia de artculos del mismo tipo en la memoria. Los arreglos son fundamentales
en casi cualquier lenguaje ensamblador. Cada arreglo tiene una direccin base, usualmente denotada
por el nombre del arreglo, y contiene N artculos. Cada uno de estos artculos o tems tiene asociado un
ndice que es creciente, que va desde 0 hasta N-1 o en algunos casos desde 1 hasta N. Utilizando la
direccin base y el ndice se puede llegar a tener acceso a cada tem del arreglo.
Una estructura (o registro, o tupla) es una secuencia de tems de diferente tipo. Cada tem de una
estructura es usualmente llamado campo. Los campos no tienen ndices asociados, pero si tienen un
offset con respecto al comienzo o inicio de la estructura. Las estructuras son ubicadas de manera
horizontal en la memoria para asegurar que una alineacin apropiada es utilizada en cada campo. La
direccin base de una estructura es la direccin de su primer campo. Si la direccin base est alineada,
las estructuras deben de estar horizontalmente de tal manera que todos los campos estn alineados de
manera apropiada.
Objetivo: Practicar algunos conceptos de como accesar a una estructura, un arreglo utilizando lenguaje
ensamblador. As como algunos modos de indexado.
Practica: Realice las siguientes tareas:
a) Crea un pequeo programa en lenguaje ensamblador que haga la misma tarea del siguiente
cdigo:
- 15 -
b) Escriba un cdigo en lenguaje ensamblador que inicialice los tems de un registro, tome el
siguiente cdigo como ejemplo:
-Rsource2,
Conclusiones: En el siguiente espacio, debes de escribir tus experiencias al elaborar este ejercicio.
_____________________________________________________________________________________
_____________________________________________________________________________________
_____________________________________________________________________________________
_____________________________________________________________________________________
_____________________________________________________________________________________
_____________________________________________________________________________________
______________________________________________________________________________
- 16 -
Ejercicio #9:
Teora: En este ejercicio, se utilizan conceptos relacionados a la estructuracin estndar de
procedimientos para la arquitectura ARM, AAPCS (Procedure Call Standard for the ARM Arquitecture). El
escribir cdigo que se adhiere a AAPCS, se puede asegurar que los mdulos compilados y ensamblados
de manera separada pueden trabajar juntos.
Llamada a una funcin: existen 2 maneras de llamar una funcin:
Llamada directa de la funcin: Si la funcin es conocida, se utiliza bl label; Esa etiqueta debe ser
una etiqueta definida en la seccin .text.
Llamadas indirectas de la funcin: se almacena la direccin de la funcin en un registro y
despus se utiliza blx Rsource1.
Objetivo: Practicar con alguna serie de ejercicios la declaracin, llamada y retorno a funciones.
Practica: Realice los siguientes ejercicios:
a) Escriba un programa titulado, que muestre el mensaje Hola Mundo!.
b) Escriba un programa que utilice las funciones printf y scanf para leer un nmero y despus
mostrar este mismo nmero en pantalla.
c) Escriba un programa, que le un nmero y despus lo multiplica por 5, despus de debe de
mostrar el resultado en pantalla. Se debe de declarar una funcin que haga la tarea de
multiplicacin.
Conclusiones: En el siguiente espacio, debes de escribir tus experiencias al elaborar este ejercicio.
_____________________________________________________________________________________
_____________________________________________________________________________________
_____________________________________________________________________________________
_____________________________________________________________________________________
_____________________________________________________________________________________
_____________________________________________________________________________________
______________________________________________________________________________
Ejercicio #10:
Teora: En computacin, la pila es una estructura de datos (una manera de organizar datos que proveen
algunas propiedades interesantes). Una pila tpicamente tiene 3 operaciones: acceso a la parte ms alta
de la pila, empujar hacia la pila (push) y remover de la pila (pop). La pila es una regin de memoria que
tiene una estrecha relacin con una funcin, en otras palabras, la pila es una regin de memoria que
tiene una relacin muy fuerte con la activacin dinmica actual. La pregunta ahora ser, y cmo se
controla la pila?, el registro sp (stack pointer), siempre tiene el contenido de la parte alta de la pila. La
regin de memoria apropiada por la activacin dinmica es la extensin de bytes contenidos entre el
valor actual del apuntador de pila y el valor inicial que el apuntador de pila tuvo al principio de la
funcin. A esta regin de memoria se le llama, memoria local de una funcin (ms precisamente, de una
- 17 -
Material de Apoyo:
- 18 -