Práctica 1 Introducción a la programación en ensamblador 1. Generalidades 2. Introducción 3. Cuestiones 1. Generalidades El desarrollo de las prácticas consistirá en una breve introducción del tema por parte del profesor, aunque la mayor parte del tiempo se dedicará al trabajo individual e independiente del alumno. En cada sesión el alumno deberá contestar a las cuestiones planteadas y entregar una hoja de resultados al finalizar. Estas hojas de resultado junto con la actitud de alumno durante las sesiones servirán para la evaluar y calificar las prácticas (que representan un 10% de la nota final). A partir de la práctica 2 el alumno debe traer algún medio de almacenamiento para guardar el trabajo realizado en cada sesión. 2. Introducción En esta primera práctica se hará uso de los conceptos básicos de la programación en ensamblador, para ello se proponen una serie de cuestiones sencillas que el alumno debe contestar en papel haciendo uso de los apuntes de ensamblador proporcionados en la copistería y que están disponibles en la Web del departamento www.atc.us.es Antes de contestar a las cuestiones de este boletín lea con detenimiento los apuntes de ensamblador 80x86. 3. Cuestiones A continuación se presentan una serie de cuestiones que el alumno debe contestar. 3.1. Uso de instrucciones aisladas. 1. Escriba una instrucción que almacene en el registro EAX lo que hay en el registro EBX. 1 Práctica 1: Introducción a la programación en ensamblador 2. Escriba una instrucción que almacene en el registro ECX lo que hay en la memoria en la posición apuntada por EDX. 3. Escriba una instrucción que almacene el EAX el resultado de sumar los registros EAX y EBX. 4. Escriba un trozo de código que almacene en EAX el resultado de resta ECX y EBX. 5. Escriba un trozo de código que realice la multiplicación de los registros ECX y EDX, indique dónde se almacenan los resultados. 3.2. Interpretación de instrucciones Si el contenido de los registros EAX, EBX, ECX y EDX; y el de la memoria es el que se muestra; Indique cómo se modifican (en el caso de que se modifiquen) después de la ejecución de cada uno de los siguientes trozos de código (los códigos son independientes entre sí) 017F FF80 0000 1000 AABB CCDD FFFF FFFF 2 00 11 22 33 44 55 66 77 Departamento de Arquitectura y Tecnología de Computadores: Universidad de Sevilla 6. MOV EAX, [EBX] ADD AEX, ECX MOV [EBX], EAX 7. MUL EAX, 200 MOV EAX, EDX 8. MOV EBX, [EBX] AND EBX, EAX MOV [1000h], EBX 9. CMP AX, 0 JNZ diferentes MOV EAX, 5000h diferentes: MOV EAX, 2000h 10. CMP AX, 0 JNZ diferentes MOV EAX, 5000h JMP fuera diferentes: MOV EAX, 2000h fuera: NOP 3 Práctica 1: Introducción a la programación en ensamblador 3.3. Traducción de expresiones aritmético/lógicas Traduzca a ensamblador las siguientes expresiones escritas en lenguaje C, considere la siguiente declaración de variables: int i,z; byte v; long int a, b c; 11. i++; 12. v=v+37; 13. b=4*(a+3); 14. a=b&c; 4 Departamento de Arquitectura y Tecnología de Computadores: Universidad de Sevilla 15. z=1/(4*c); 3.4. Traducción de estructuras de control Traduzca a ensamblador las siguientes sentencias escritas en lenguaje C. Considere que todas las variables son de 32 bits. 16. if (!b) a=a+3; 17. if (b<30) a=a+3; else a=a-3; 18. do{ d=d+a-3; }while (d<80); 5 Práctica 1: Introducción a la programación en ensamblador 19. a=0; for (i=1;i<10;i++) a=a*i; 20. for (i=0;i<a;i++) b=b*b; 3.5. Interpretación de instrucciones en ensamblador. Traduzca a lenguaje C las siguientes instrucciones en ensamblador, indique en cada caso el tamaño de las variables usadas. 21. MOV ECX 10 ini: MOV EAX, a MUL ECX MOV a, EAX LOOP ini 6 Departamento de Arquitectura y Tecnología de Computadores: Universidad de Sevilla 22. MOV CL, a SAR b, CL 23. CMP JGE MOV JMP AX, 3 else EBX, 1000 fin else: MOV EBX,-1000 fin: NOP 24. MOV EAX, a MOV EBX, 20 ini: MUL DEC CMP JNZ NOP 10 EBX EBX, 0 ini 7 Práctica 1: Introducción a la programación en ensamblador 25. LEA LEA LEA MOV ESI, EDI, EDX, ECX, datos mayores menores 16 MOV CMP JBE MOV ADD jmp EAX, [ESI] EAX, 16 else [EDI],EAX EDI, 4 while do: else: MOV [ECX],EAX ADD ECX, 4 while: ADD ESI, 4 CMP ESI,100 JBE do NOP 8 Departamento de Arquitectura y Tecnología de Computadores: Universidad de Sevilla Apellidos DNI Nombre Turno Fecha Nota Copie en esta hoja el resultado de las cuestiones que se indican. Cuestión 7 Cuestión 15 Cuestión 18 9 Práctica 1: Introducción a la programación en ensamblador Cuestión 20 Cuestión 22 Cuestión 25 10