Identificar accesos al código y a la pila Suponed los siguientes contenidos de los registros: SS = 0400h ESP = 00000100h CS = 0010h EIP = 00000010h Y el código siguiente: Programa Principal Subrutina rut1 1 Rut1 PROC PUSH EAX 4 PUSH ESI 2 CALL rut1 5 MOV ESI,0 3 POP 6 CALL rut2 ESI 7 MOV ESI,EAX 8 POP EAX 9 RET Rut1 ENDP EAX = 459A00FFh ESI = 000FFFF0h Subrutina rut2 Rut2 PROC 10 MOV EAX,4 11 RET Rut2 ENDP Suponed que: • La siguiente instrucción a ejecutar es la instrucción 1, que está en la dirección lógica 0010h:00000010h (tal y como indican los registros CS y EIP) • El código de cada instrucción ocupa 1 byte de memoria • La subrutina rut1 comienza en la dirección lógica 0010h:000000A0h • La subrutina rut2 comienza en la dirección lógica 0010h:000000FFh Rellenar la siguiente tabla con los datos de todos los accesos que realiza el código anterior a los segmentos de código y pila. En concreto, cada vez que el procesador realiza un acceso a memoria hay que rellenar una línea de la tabla indicando (ver los ejemplos en la misma tabla): • El número de la instrucción que genera el acceso • La dirección lógica que genera • Si el acceso es de lectura o escritura • El tamaño, en bytes, del dato que se lee o escribe • El valor, en hexadecimal, del dato leído o escrito • Una breve descripción del acceso Se recomienda que vayáis dibujando el estado de la pila después de ejecutar cada instrucción. No. Dirección lógica Inst . 1 0010:00000010 1 0400:000000FC 2 0010:00000011 L/ E Tam Dato Descripción L E L 1 4 1 Código instrucción 1 459A00FF Código instrucción 2 Fetch de la instrucción 1 Poner en la pila el valor del EAX Fetch de la instrucción 2 11 0400:000000F0 L 4 0010:00A3 Recupera la dirección de retorno 3 0400:000000FC L 4 459A00FF Recupera el valor para ESI Indicar el valor final de los registros: SS = CS = ESP = EIP = EAX = ESI =