LAB2 Fundamentos de Informatica PDF

Title LAB2 Fundamentos de Informatica
Author Anonymous User
Course Fonaments d'informàtica
Institution Universitat Autònoma de Barcelona
Pages 6
File Size 308.1 KB
File Type PDF
Total Downloads 20
Total Views 127

Summary

Enunciat...


Description

Fundamentos de Informática Laboratorio II

De C a Assembly: Estructuras de control

De C a Assembly: Estructuras de control Objetivos  

Estudiar la traducción a assembly de estructuras de flujo comunes: if, while y for Realizar un pequeño programa que implemente el cálculo de la sucesión de Fibonacci mediante diferentes instrucciones de bucle

Material 

Microsoft Visual Studio 2019. Disponible en https://neptu.uab.es/msdnaa/

¡Importante!   





La realización de las prácticas se hará en grupos formados por dos personas. Cada ejercicio puntúa por igual. Se recomienda llevar este documento impreso a la sesión de prácticas, ya que no se permite el uso de teléfonos móviles durante la sesión. Asimismo, el uso de teléfonos móviles implicará el suspenso inmediato de la práctica. La entrega de estos ejercicios se realiza por escrito al final de la sesión de prácticas de forma que dichos ejercicios deben resolverse en el laboratorio y aclarar las dudas con el profesor durante la sesión. El plagio de informes de prácticas conllevará el suspenso inmediato de todas las prácticas para todas las partes implicadas, sin opción a recuperación de las mismas.

1. Estructura IF-ELSE Ejemplo 1: Tomemos como ejemplo este sencillo programa en C: #include int main() { short num, sietes; num = 7; if (num == 7) { sietes = 1; } fuera_if_1: if (num != 7) { sietes = 0; } fuera_if_2: printf("numero de sietes es %d \n", sietes); return 0; }

Vamos a estudiar cómo el compilador traduce la primera instrucción “if” a código assembly:

1

Fundamentos de Informática Laboratorio II

De C a Assembly: Estructuras de control

short num, sietes; num = 7; 00A7183F mov eax,7 00A71844 mov word ptr [num],ax if (num == 7) { 00A71848 movsx eax,word ptr [num] 00A7184C cmp eax,7 00A7184F jne main+51h (0A71861h) sietes = 1; 00A71851 mov byte ptr [ebp-0DDh],1 00A71858 mov eax,1 00A7185D mov word ptr [sietes],ax } fuera_if_1: if (num != 7) { 00A71861 movsx eax,word ptr [num] 00A71865 cmp eax,7 00A71868 je fuera_if_2 (0A71877h) sietes = 0; 00A7186A mov byte ptr [ebp-0DDh],1 00A71871 xor eax,eax 00A71873 mov word ptr [sietes],ax } fuera_if_2: printf("numero de sietes es %d \n", sietes); 00A71877 cmp byte ptr [ebp-0DDh],0 00A7187E jne fuera_if_2+16h (0A7188Dh) 00A71880 push 0A718B5h 00A71885 call __RTC_UninitUse (0A7108Ch) 00A7188A add esp,4 00A7188D movsx eax,word ptr [sietes] 00A71891 push eax 00A71892 push offset string "numero de sietes es %d \n" (0A77B30h) 00A71897 call _printf (0A71046h) 00A7189C add esp,8 return 0; 00A7189F xor eax,eax }

Estudiando la traducción del “if” a lenguaje assembly del programa anterior, encontramos las siguientes instrucciones: MOVSX CMP JNE

EAX, word ptr [num] EAX, 7 fuera_if

Guarda en el registro EAX, el contenido de la variable num Compara el registro EAX con el valor 7 Salta a la etiqueta “fuera_if” si EAX no es igual a 7

JNE es una abreviatura del inglés “Jump if Not Equal”, en la siguiente tabla están recogidas las instrucciones de salto que nos podemos encontrar en un programa assembly . jXX

Salta si

jmp

unconditional

je

equal / zero

jne

not equal / not zero 2

Fundamentos de Informática Laboratorio II

De C a Assembly: Estructuras de control

jXX

Salta si

js

negative

jns

non negative

jg

greater (signed)

jge

greater or equal (signed)

jl

less (signed)

jle

less or equal (signed)

ja

above (unsigned)

jb

below (unsigned)

1. Explicar cada línea del código Assembly del Ejemplo 1.

00A7183F 00A71844 00A71848 00A7184C 00A7184F 00A71851 00A71858 00A7185D

00A71861 00A71865 00A71868 00A7186A 00A71871 00A71873

Código short num, sietes; num = 7; mov eax,7 mov word ptr [num],ax if (num == 7) { movsx eax,word ptr [num] cmp eax,7 jne main+51h (0A71861h) sietes = 1; mov byte ptr [ebp-0DDh],1 mov eax,1 mov word ptr [sietes],ax } fuera_if_1: if (num != 7) { movsx eax,word ptr [num] cmp eax,7 je fuera_if_2 (0A71877h) sietes = 0; mov byte ptr [ebp-0DDh],1 xor eax,eax mov word ptr [sietes],ax

Descripción

2. En la siguiente línea identifique cada elemento que la compone 01133885 jne fuera_if_1 (01133897h) 3. Ejecutar el programa anterior (Ejemplo 1) paso a paso con F10 con diferentes valores de num: 6, 7 y 8. ¿Cuántos y qué saltos se hacen en cada caso? 4. Justifica porque el resultado de la comparación de esta línea de código es siempre FALSO. 00A71877

cmp

byte ptr [ebp-0DDh],0

3

Fundamentos de Informática Laboratorio II

De C a Assembly: Estructuras de control

Ejemplo 2: #include int main() { short num, sietes; num = 7; if (num == 7) { sietes = 1; } else { dentro_else: sietes = 0; } fuera_de_if: printf("numero de sietes es %d \n", sietes); return 0;

} Ejemplo 3: #include int main() { short num; short sietes = 0; num = 7; if (num == 7) { sietes = 1; } fuera_de_if: printf("numero de sietes es %d \n", sietes); return 0; }

5. Haz una tabla con dos columnas. En la primera apunta las respuestas para el ejemplo 2 y en la segunda, para el ejemplo 3. Ahora rellénala contestando las siguientes preguntas: 5.1. ¿Qué valor tiene la variable sietes después de la instrucción if-else cuando la variable num no es igual a siete? 5.2. ¿Cuántos saltos se ven en el código assembly?, ¿Qué instrucciones son? 5.3. ¿Cuántos saltos hay que hacer si la variable num tiene valor de 5? Indica qué instrucciones de salto son. 5.4. ¿Cuántos saltos hay que hacer si la variable num tiene valor de 7? Indica qué instrucciones de salto son. Pregunta 5.1 5.2 5.3 5.4

Ejemplo 2

Ejemplo 3

6. Explique qué función cumple cada uno de estos registros y de cuantos bytes son: EAX; ECX; EDI; EIP; ESP; EBP; EFL.

4

Fundamentos de Informática Laboratorio II

De C a Assembly: Estructuras de control

7. En el ejemplo 3, cuando la variable num tiene valor de 7, ¿qué valor toma el flag register Z (flag Zero o ZR) tras ejecutar la instrucción cmp? ¿Y modificando el valor de la variable num a 6? Explica por qué el flag register Z toma los valores de 0 y 1, relacionándolo con los valores lógicos TRUE/FALSE. 8. Identifique el número de instrucciones y, escriba y enumera todas las instrucciones presentes en los códigos de los ejemplos 2 y 3. 8.1. Según la respuesta anterior, justificar cuál de los dos códigos es más optimizado en términos del número de instrucciones.

2. CONDICIONES Y SALTOS INCONDICIONALES En el siguiente ejemplo, vamos a estudiar una estructura de bucle while y su traducción a lenguaje assembly. Ejemplo 4: #include short i,j; int main() { i = 0; j = 1; bucle_while: while (i < 5) { j*=i; i++; } fuera_de_while: return 0; }

9. ¿En qué se parece la traducción a lenguaje assembly del bucle while a un if-else? ¿Cuántas instrucciones de salto aparecen en el código assembly del ejemplo 4?

10. Estructura for: Programa un bucle for que haga lo mismo que el bucle while del ejemplo 4. ¿Qué diferencias ves cuando se genera el código assembly? ¿Cuántas instrucciones de salto aparecen en un caso y en el otro?

5

Fundamentos de Informática Laboratorio II

De C a Assembly: Estructuras de control

3. While y do-while. Siendo la definición de la secuencia de Fibonacci la siguiente: fibonacci(0)=0 fibonacci(1)=1 ... fibonacci(n)=fibonacci(n-1)+fibonacci(n-2) Partiendo del siguiente código que calcula la secuencia de fibonacci en un bucle while como se indica en el ejemplo 5, utilice el mismo código, pero esta vez cambiando por el bucle do-while (ejemplo 6), Ejemplo 5: #include /* calcula fibonacci de termino n-esimo */ /* fib(n) = fib(n-2) + fib(n-1) */ int i, n, t1, t2, nextTerm; int main() { i = 0; n = 10; t1 = 0; t2 = 1; while (i < n) { nextTerm = t1 + t2; t1 = t2; t2 = nextTerm; i++; } fuera_de_while: return(0); }

Ejemplo 6: while_fib: do{ /* calcula fibonacci de termino n-esimo */ /* fib(n) = fib(n-2) + fib(n-1) */ i++; }while(i < n)

11. ¿Qué diferencias más importantes puedes ver entre los dos programas cuando se compara el código assembly de los dos bucles?

12. ¿Cuál de las dos opciones te parece la mejor implementación? ¿Por qué?

6...


Similar Free PDFs