FC Problemas2 1 PDF
FC Problemas2 1 PDF
FC Problemas2 1 PDF
1)
Registros Memoria
r0 0000 0016h 00h 0339 3826h
r1 0000 0054h 04h EA00 63AFh
r2 FFFF FFFFh 08h 17FA 8912h
r3 0000 0000h 0Ch BC98 3304h
r4 0000 0004h 10h 7845 F34Ah
14h 534B 4AAAh
Las instrucciones a ejecutar son:
10. El siguiente programa calcula el máximo común divisor de dos números a y b según el
algoritmo de restas de Euclides. Traducirlo a ensamblador del ARM:
int a=5, b=15, mcd;
While (a≠b){
if (a>b)
a=a‐b;
else
b=b‐a;
}
mcd=a;
15. Dado un vector A de 12 componentes se desea generar otro vector B, tal que B sólo contiene las
componentes de A que son números pares mayores que cero. Ejemplo:
A = (0,1,2,7,‐8,4,5,12,11,‐2,6,3) Æ B = (2,4,12,6).
16. Dados dos vectores A y B de 10 componentes cada uno se desea construir otro vector C tal que:
C(i) = |A(i) + B(9‐i)|, i = 0,...,9.
Escriba un programa en lenguaje de alto nivel que construya el vector C. Traduzca el programa
al lenguaje ensamblador del ARM.
17. Traduce el siguiente programa escrito en un lenguaje de alto nivel a lenguaje ensamblador. La
órden swap(a, b) intercambia los valores de las variables a y b.
int a=13, b=16;
While (a>10){
a=a‐1;
b=b+2;
}
if (a<b)
swap (a, b);
else
b= a‐1;
18. Escribe un programa para el ensamblador del ARM que llame a una subrutina, swap(int
*a, int *b), encargada de intercambiar el contenido de dos posiciones de memoria. La
subrutina recibirá como parámetros de entrada las posiciones de memoria correspondiente a a y
b y deberá preservar el contenido de todos los registros que se empleen para realizar la
operación.
Cuestión: ¿Qué registros debemos utilizar dentro de la función para evitar tener que salvar y
restaurar registros durante el proceso?
19. Escribe un programa para el ensamblador del ARM que cuente el número de 0’s de un vector
de longitud arbitraria. Emplea para ello una subrutina llamada cuenta0s que reciba como
parámetros de entrada toda la información necesaria para llevar a cabo la tarea.
Nota: definir una constante N que almacene el número de elementos del vector V.
do
swapped=0
for i from 0 to N‐2 do:
if V[i] > V[i+1] then
swap( V[i], V[i+1] )
swapped = true
end if
end for
while swapped
21. Escriba un programa en lenguaje de alto nivel que llame a una función fact que calcule el
factorial de un número n usando un bucle. Traduzca el programa al lenguaje ensamblador del
ARM.
22. Escriba un programa en lenguaje de alto nivel que calcule el factorial de un número n usando
recursividad, sabiendo que fact(n)=n*fact(n‐1). Traduzca el programa al lenguaje
ensamblador del ARM.