Reporte Lab 3
Reporte Lab 3
Reporte Lab 3
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:
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:
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?
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?
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?
4
19. ¿Qué registros contienen los argumentos de my_strcpy y cuál es su contenido?
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?
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?
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