




















































Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Prepara tus exámenes
Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Prepara tus exámenes con los documentos que comparten otros estudiantes como tú en Docsity
Encuentra los documentos específicos para los exámenes de tu universidad
Estudia con lecciones y exámenes resueltos basados en los programas académicos de las mejores universidades
Responde a preguntas de exámenes reales y pon a prueba tu preparación
Consigue puntos base para descargar
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Comunidad
Pide ayuda a la comunidad y resuelve tus dudas de estudio
Ebooks gratuitos
Descarga nuestras guías gratuitas sobre técnicas de estudio, métodos para controlar la ansiedad y consejos para la tesis preparadas por los tutores de Docsity
Asignatura: Fundamentos de Computadores, Profesor: maria maria, Carrera: Ingeniería de Computadores, Universidad: UCM
Tipo: Ejercicios
1 / 60
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!





















































2º Cuatrimestre 2017 - 2018 1
SUBRRUTINAS
§ ¿Qué es una subrutina?
§ ¿ Cómo se invoca una función?
mayor=mayor +3;
§ Hacer una subrutina que calcula el mayor de dos números X,Y
§ ¿Cómo se pasan los valores a una subrutina?
§ Programa que calcula C = max(X,Y) + 3, usando la subrutina Nmayor
§ Ejecución de la vuelta de la subrutina Nmayor
Subrutina Programa principal
0x … 0x0C 0x0C 0x0C 0x0C 0x0C 0x0C00000C 0x0C 0x0C 0x0C00001C 0x0C 0x0C 0x0C00003C 0x0C 0x0C 0x0C 0x0C 0x0C 0x0C00002C 0x0C 0x0C00004C
Mov PC,LR
BL 0x0C ADD R5,R0, # STR R5, [R3] Mov R0,R B 0x0C BLE 0x0C00003C
B 0x0C00002C 08 00 00 0C
§ Una subrutina puede usar los registros R0-R3 con total libertad § En estos registros están los parámetros que necesita la subrutina § Además, en R0 la subrutina escribe el resultado § ¿Qué pasa si necesita usar los registros R4-R10 para realizar sus cálculos?
Instrucciones que implementan la funcionalidad de la subrutina ..
§ Gestión de la pila
iP= R 0x0C7FEFEC 0x0C7FF 0x0C7FEFF 0x0C7FEFF 0x0C7FEFF 0x0C7FEFFC 0x0C7FEFE 0x0C7FEFE xxxxxxxx xxxxxxxx xxxxxxxx No utilizable xxxxxxxx
. . .
§ Ejemplo: supongamos una subrutina que usa los registros R5,R8 y R SP=FP
iP= R
Dirección del último elemento de la pila 0x0C7FEFEC 0x0C7FF 0x0C7FEFF 0x0C7FEFF 0x0C7FEFF 0x0C7FEFFC 0x0C7FEFE 0x0C7FEFE -- -- -- No utilizable
. . . Guarda R5,R8 y R en la pila Restaura el valor R5,R8 y R Prólogo Epílogo Cuerpo de la subrutina
Subrut1: … …
ldr R8, [SP] add SP, SP, # ldr R5, [SP] add SP, SP, # § Ejecución del epílogo FFFF 0000000B
iP= R
Dirección de la base de la pila Dirección del último elemento de la pila
iP= R
iP= R
0x0C7FEFEC 0x0C7FF 0x0C7FEFF 0x0C7FEFF 0x0C7FEFF 0x0C7FEFFC 0x0C7FEFE 0x0C7FEFE 0B 00 00 00 0F 00 00 00 03 00 00 00 No utilizable
. . .
0x0C7FEFEC 0x0C7FF 0x0C7FEFF 0x0C7FEFF 0x0C7FEFF 0x0C7FEFFC 0x0C7FEFE 0x0C7FEFE 0B 00 00 00 0F 00 00 00 03 00 00 00 No utilizable
. . .
0x0C7FEFEC 0x0C7FF 0x0C7FEFF 0x0C7FEFF 0x0C7FEFF 0x0C7FEFFC 0x0C7FEFE 0x0C7FEFE 0B 00 00 00 0F 00 00 00 03 00 00 00 No utilizable
. . .
§ La arquitectura ARM ofrece instrucciones que facilitan la programación cuando hay que salvar muchos registros
0xEFFFFFF 0xEFFFFFF 0xEFFFFFFC 0xF 0xF 0xF 0xF000000C 0xF 0xF 0xF 0xF000001C 0xF 0xF R1 0x R2 0x000000F R5 0x R6 0xF Memoria
0xEFFFFFF 0xEFFFFFF 0xEFFFFFFC 0xF 0xF 0xF 0xF000000C 0xF0000010 0x000000F 0xF0000014 0x 0xF 0xF000001C 0xF 0xF R1 0x R2 0x000000F R5 0x R6 0xF000000C Memoria 0x Antes de ejecutar la instrucción (^) Después de ejecutar la instrucción § STMDB R6!, {R5,R1,R2}
Antes de ejecutar la instrucción
Después de ejecutar la instrucción § LDMIA R6!, {R1,R2}