Reporte Lab 3

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 7

Universidad Galileo Guatemala 31 de Agosto de 2021

Facultad: FISICC Alumno: Randy Enrique Morán León


Curso: Microprocesadores Carnet: 19003081
Sección: A Hora de Laboratorio: 13:00 a 13:50
Auxiliar: Fabián Antonio Hernández Día de Laboratorio: Martes
Ventura

Laboratorio 3 Calling Assembly Routines from C

Objetivos:
Aprender el procedimiento necesario para desarrollar una aplicación en donde se utilice
código escrito en los lenguajes de programación ensamblador y C.

Resumen:
Para esta práctica de laboratorio luego de aplicar todas configuraciones necesarias en Keil
uVision5 que son necesarias para este laboratorio, y luego de implementar el código dado
por la guía procedemos a ejecutar paso a paso para ver el funcionamiento del código más
a detalle que como l hacemos regularmente.

Teoría:

Keil uVision: Es un IDE con lenguaje de programación en C con gran variedad de


aplicaciones debido a las amplias opciones de trabajo que tiene.

Lenguaje de Programación C: Es un lenguaje orientado a la implementación de sistemas


operativos, concretamente Unix. C es apreciado por la eficiencia del código que produce y
es el lenguaje de programación más popular para crear softwares de sistemas y
aplicaciones.

ARM Cortex-M: Es un grupo de núcleos de procesador RISC ARM de 32 bits. Estos


núcleos están optimizados para circuitos integrados de bajo costo y eficiencia energética

Lenguaje de Programación Ensamblador: Es un lenguaje de programación de bajo nivel.


que representa instrucciones básicas para los computadores, microprocesadores,
microcontroladores y otros circuitos integrados programables.

1
Directivas Utilizadas:

1. AREA: esta directiva da la orden al ensamblador para que este ensamble nuevo
código o sección de datos.
2. ALIGN: Esta directiva alinea la ubicación a un límite especifico llenado con ceros o
instrucciones.
3. THUMB: esta le indica al ensamblador que interprete las instrucciones como
instrucciones Thumb usando sintaxis UAL.
4. REQUIRE8: especifica que el archivo requiere la alineación de ocho bytes del stack.
5. PRESERVE8: especifica que el archivo preserve la alineación de ocho bytes del
stack.
6. EXPORT: declara un símbolo que se puede usar para referenciar archivos y
bibliotecas independientes.

Datos Prácticos:

Implementamos todo el código de la guía paso a paso tanto de ambos archivos.

2
Verificáramos el funcionamiento y vemos los resultados esperados, para luego analizar
paso a paso y responder las preguntas.

Cálculos Teóricos:

13. ¿Cuáles son los valores contenidos en el Stack Pointer (R13), el Link Register (R14) y
el Program Counter (R15)?

14. Observe la ventana que muestra el Disassembly. ¿A qué instrucción apunta la flecha
amarilla y cuál es su dirección? ¿Cómo se relaciona esta dirección con el valor del Program
Counter?

Vemos que es la dirección por ejecución en ese momento.

3
15. Ejecute una instrucción presionando la tecla F10 mientras la ventana que muestra el
Disassembly está seleccionada (haga clic sobre la ventana). ¿Cuáles son los dos registros
que cambiaron (deben estar resaltados en la ventana Registros) y cómo se relacionan con
la instrucción que se acaba de ejecutar?

Vemos que cambiaron los registros R4 y el PC, el R4 únicamente porque se cumplió


la instrucción anterior que era ingresarle el valor de 0x08 y el PC aumenta ya que
avanzamos una instrucción.

16. Observe las instrucciones en la ventana Disassembly. ¿Ve alguna instrucción de cuatro
bytes? Si es así, ¿cuáles?

17. Continuemos con la ejecución paso a paso (F10) hasta que la flecha amarilla señale la
instrucción BL.W my_strcpy. ¿Cuáles son los valores del SP, PC y LR?

18. Ejecute la instrucción BL.W my_strcpy (utilice F11). Ahora, ¿Cuáles son los valores del
SP, PC y LR? ¿Qué ha cambiado y por qué? ¿Coincide el valor del PC con lo que se
muestra en la ventana Disassembly?

Cambio el LR ya que la instrucción fue un BL y se Guardó en LR la dirección de


retorno, cambio PC que coincide con la dirección que se ve en Disassembly.

4
19. ¿Qué registros contienen los argumentos de my_strcpy y cuál es su contenido?

22. ¿Cuál es el contenido de la dirección de src?

23. ¿Cuál es el contenido de la dirección de dst?

24. Ejecute la aplicación paso a paso (F11) observando la ventana “Memory 3”. Verifique
que el contenido de src se copie en dst. ¿Qué registro tiene el carácter?

Efectivamente se está copiando y el carácter está en R2.

25. ¿Cuáles son los valores del carácter, el src pointer, el dst pointer, el link register (LR) y
el program counter (PC) cuando el código alcanza la última instrucción en la subrutina (BX
lr)?

5
26. Ejecute la instrucción (BX lr). ¿Cuál es el valor del PC?

27. ¿Cuál es la relación entre el valor de PC y el valor de LR anterior? Explique.

LR tiene la dirección de retorno+1 por el Thumb bit Y PC tiene tiene la dirección de


retorno sin el +1.

28. Finalmente, ejecute paso a paso la subrutina my_capitalize y verifique su


funcionamiento, con tres diferentes cadenas de caracteres.

Cadena 1

Cadena 2

Cadena 3

6
Conclusiones:
 Keil uVision Sin duda tiene muchas aplicaciones que poco a poco iremos
conociendo así como poder programar en C y en ensamblador al mismo tiempo.
 Con código ensamblador se puede trabajar más con la memoria directamente y así
tener programas más optimizado, se debe tener mucho cuidado con esto que puede
generar muchos problemas.

Bibliografía:

armDeveloper 28/08/2021
https://developer.arm.com/ip-products/processors/cortex-m

Wikipedia 28/08/2021
https://es.wikipedia.org/wiki/Lenguaje_ensamblador

También podría gustarte