Autor: Arturo Olivares Martos
Cada persona tenía un examen, por lo que hubo muchas versiones de este examen. De una batería de preguntas del profesor (salía de forma aleatoria); por lo que no hay un único examen, sino muchos. Esta es la segunda versión subida.
Cada respuesta correcta suma 1 punto, y cada respuesta incorrecta resta 0.33 puntos. Las preguntas no respondidas no suman ni restan. La puntuación total es sobre 20.
Dada la siguiente estructura: struct W {int j[2]; char s[8]; short a[4]; long *j;};
Indique el tamaño total de la estructura.
Dado un vector W
de enteros (en %rdx
), y un índice j
(en %rcx
). La expresión *(W+j-4)
podría traducirse en una sentencias de ensamblador, del tipo:
Para leer un dato de un array multi-nivel, se requieren acceder a memoria:
La lectura de un elemento de un array anidado, necesita los siguientes accesos a memoria:
Se define struct S1{ int i[3]; char c[3]; double v} p[3];
y union U1{ int i[3]; char c[3]; double v} q[3];
. Indica que afirmación es correcta.
¿Cuál es la forma correcta de utilizar la instrucción "lea"
para implementar la función f
mediante una única línea en ensamblador en línea?int f(int a, int b)
{
return 2 * a + b;
}
¿Cuánto vale edx
tras la ejecución del siguiente código? mov $0x11, %eax
xor %edx, %edx
idiv $0x4
¿Qué registros podemos modificar a nuestro antojo en el interior de una función que sigua el protocolo "System V AMD64 ABI", también llamados salva invocante?
¿Cuál será el código de una función cuya definición es int f(int a, int b, int c)
y que se implementa así? mov %esi , %eax
ret
¿Qué se obtiene al intentar observar en memoria un objeto de 8 bytes declarado "resultado .quad 0 x8877665544332211
" mediante la orden de gdb
: "x /4hx &resultado
"? Nota: la dirección de memoria puede variar.
Dado el siguiente fragmento de programa en ensamblador: mov $-15,%eax
sar $0x42,%eax
and $0xFF,%eax
¿Cuál es el valor del registro RAX
al finalizar la última instrucción?
¿Qué función codifica el siguiente fragmento de código? 0: cmp %esi , %edi
2: mov %esi , %eax
4: cmovge %edi , %eax
7: retq
¿Qué función codifica el siguiente fragmento de código? 0: cmp %esi , %edi
2: setne %al
5: retq
¿Qué contendrá el tope de la pila durante la ejecución de la función f()
en el siguiente programa? 401020 <_start >:
401020: e8 08 00 00 00 callq 40102 d f
401025: 48 31 ff
xor %rdi , %rdi
401028: e8 e3 ff ff ff
callq 401010 exit@plt
40102 d f :
40102 d: eb fe
jmp 40102d f
40102 f: c3
retq
Dado el siguiente fragmento de programa en ensamblador: mov $-11,%eax
sar $0x83,%eax
and $0xFF,%eax
¿Cuál es el valor del registro RAX
al finalizar la última instrucción?
Dado el siguiente fragmento de programa en ensamblador: xor %rcx,%rcx
add $7,%rcx
mov $0x1234,%ebx
rcr %cl,%rbx
¿Cuál es el valor del registro RBX
al finalizar la última instrucción?
¿A qué función puede corresponder el siguiente código ensamblador? cmp %esi , %edi
mov %esi , %eax
cmovge %edi , %eax
ret
Dado el siguiente fragmento de programa en ensamblador: mov $-18,%eax
sar $0x46,%eax
and $0xFF,%eax
¿Cuál es el valor del registro RAX
al finalizar la última instrucción?
¿Cuanto vale rax
tras ejecutar el programa dentro de gdb
mediante las órdenes que aparecen como comentarios?. text # break bucle
_start : . globl _start # run
xor %rax , %rax # continue
bucle : inc %rax # continue
jmp bucle # print $rax
Dado el siguiente fragmento de programa en ensamblador: mov $-18,%eax
sar $0x46,%eax
and $0xFF000000,%eax
¿Cuál es el valor del registro RAX
al finalizar la última instrucción?