Upload
others
View
14
Download
1
Embed Size (px)
Citation preview
Organización de ComputadorasOrganización de ComputadorasDepto. Cs. e Ing. de la Comp.Depto. Cs. e Ing. de la Comp.Universidad Nacional del SurUniversidad Nacional del Sur
Módulo 10Módulo 10Programación enProgramación en
Lenguaje EnsambladorLenguaje Ensamblador
Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 22
CopyrightCopyrightCopyright © 2011-2019 A. G. Stankevicius
Se asegura la libertad para copiar, distribuir y modificar este documento de acuerdo a los términos de la GNU Free Documentation License, Versión 1.2 o cualquiera posterior publicada por la Free Software Foundation,sin secciones invariantes ni textos de cubierta delantera o trasera
Una copia de esta licencia está siempre disponibleen la página http://www.gnu.org/copyleft/fdl.html
La versión transparente de este documento puedeser obtenida de la siguiente dirección:
http://cs.uns.edu.ar/~ags/teaching
Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 33
ContenidosContenidosEstructura de un programa
Las arquitecturas i386 y OCUNS
Estructuras de control
Invocación de los servicios del SO
Pasaje de parámetros
Pila del programa y reentrancia
Proceso de ensamblado, vinculación y carga
Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 44
Estructura de programaEstructura de programaEl código fuente, como suele ser el caso enlos lenguajes de programación de alto nivel,son en esencia archivos de texto
Los programas en la arquitectura OCUNS constan únicamente de una secuencia de instrucciones
Una instrucción puede opcionalmente estar etiquetada para facilitar su posterior referencia
En otras arquitecturas los programas fuente puede tener una estructuración más compleja
Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 55
EtiquetasEtiquetasEn assembler, las etiquetas son básicamente direcciones de memoria
En los lenguajes de alto nivel, ¡también!
Pueden apuntar a una locación que contiene datos o bien que contiene código
call rutina, R0⋮
rutina: hlt
Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 66
Registros del procesadorRegistros del procesadorLa arquitectura OCUNS cuenta con 16 registros de propósito general
Recordemos que el registro F está “cableado a cero”, es decir, no importa que valor se le asigne, al final termina conteniendo un cero
No cuenta con un registro que apunte a la pila
Entre los registros internos contamos con los tradicionales registros IR y PC
Los registros internos no son accesibles de manera directa por el programador
Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 77
Registros del procesadorRegistros del procesadorEn contraste, la arquitectura i386 tiene 8 registros a disposición del programador:
ESP y EBP: suelen tener un rol específico
EAX, EBX, ECX, EDX, ESI, EDI: son registrosde propósito general
En ambas arquitecturas la memoria funciona como un gran arreglo
Se direcciona al byte
En el caso de i386, con ordenamiento little-endian
Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 88
Instrucción MOV (CISC)Instrucción MOV (CISC)Sintaxis: mov dest, origen
mov ebx, 3 ; guarda un 3 en EBX
mov eax, ebx ; copia EBX en EAX
mov eax, CONT ; guarda CONT en EAX
Restricciones:
El destino no puede ser una constante
Se puede hacer referencia de a lo sumouna dirección de memoria
Origen y destino tienen que ser compatibles
Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 99
Instrucción MOV (RISC)Instrucción MOV (RISC)La arquitectura OCUNS no cuenta con una instrucción específica para mover información
Para mover información desde o hacia memoria usaremos las instrucciones load y store
Para mover información entre registros podemos usar cualquier operación aritmética que nos retorne el resultado deseado
En general, resulta práctico usar el registro F como segundo operando (si es que el cero se comporta como neutro de la operación en cuestión)
Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 1010
Accediendo a memoria (CISC)Accediendo a memoria (CISC)Los corchetes denotan que se debe aplicarun nivel de indirección:
mov eax, 5 ; guarda un 5 en EAX
mov ecx, [eax] ; guarda el contenido de
; la locación 5 en ECX
mov ecx, [5] ; inst. equivalente
La arquitectura i386 permite accedera memoria mediante el siguiente modo:
[ base + escala × índice + offset ]
Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 1111
Accediendo a memoria (RISC)Accediendo a memoria (RISC)En una arquitectura RISC por lo general hay muy pocas instrucciones capaces de referenciaruna dirección de memoria completa
La arquitectura OCUNS cuenta con solo una instrucción a tal efecto: lda
Si bien la intención es cargar una dirección en un registro en preparación a la ejecución de un load ode un store, puede ser usada para cargar un valor arbitrario
lda R5, 80
Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 1212
Operaciones (CISC)Operaciones (CISC)Operaciones aritméticas disponibles:
add destino, operando
sub destino, operando
inc destino
dec destino
not destino
neg destino
mul operando / imul operando
div divisor / idiv divisor
Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 1313
Operaciones (RISC)Operaciones (RISC)Operaciones aritméticas disponibles:
add destino, operando, operando
sub destino, operando, operando
inc destino
dec destino
Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 1414
Estructuras de controlEstructuras de controlLos lenguajes de alto nivel cuentan con diversas estructuras de control para dictaminar el flujo de ejecución de las instrucciones
El lenguaje ensamblador es más elemental,sólo cuenta con:
Los flags del procesador para recordar el resultadode la última operación
Las instrucciones de salto para alterar el flujo de ejecución de forma condicionada o no
Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 1515
Principales flags (CISC)Principales flags (CISC)La arquitectura i386 cuenta con diversos flags, los cuales reflejan el resultado de la última operación aritmética
Para los enteros no signados se usan los flagszero (ZF) y carry (CF)
Para los enteros signados se usan los flagsoverflow (OF) y sign (SF)
Cabe destacar que el resultado de la mayoría de las operaciones afectan a los flags
Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 1616
Principales flags (RISC)Principales flags (RISC)La arquitectura OCUNS también cuenta con diversos flags, si bien por tratarse de una arquitectura RISC solo opera con números signados
Como se trata de una arquitectura de papel y lápiz, podemos imaginar que cuenta con todos los flags que concibamos, más allá de su utilidad práctica
Al igual que antes, el resultado de las distintas operaciones afectan a estos flags.
Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 1717
Instrucción CMP (CISC)Instrucción CMP (CISC)Sintáxis: cmp primero, segundo
Esta instrucción computa primero – segundo, modificando los flags de manera acorde.
Si resultado = 0 (primero = segundo):ZF = 1; CF = 0;
Si resultado > 0 (primero > segundo):ZF = 0; CF = 0; SF = OF;
Si resultado < 0 (primero < segundo):ZF = 0; CF = 1; SF != OF;
Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 1818
Instrucción JMP (CISC)Instrucción JMP (CISC)Sintaxis: jmp dest / jmp short dest
jmp infinite-loop
jmp short label-cercano
Los saltos incondicionales siempre transfierenel control a una cierta dirección de memoriasin tener en cuenta el estado de los flags
La instrucción a continuación de un jmp jamás será ejecutada…
...salvo que sea ¡el destino de un salto!
Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 1919
Saltos condicionales (CISC)Saltos condicionales (CISC)En los saltos condicionales no siemprese produce la transferencia de control,habida cuenta que el salto se realiza o no dependiendo del estado de uno o más flags
Los saltos más sencillos dependen del estadode sólo un flag (no son tan frecuentes)
Los saltos más complejos dependen del estadode múltiples flags a la vez (son más frecuentes)
Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 2020
Saltos condicionales (CISC)Saltos condicionales (CISC)Saltos simples:
jz dest / jnz dest: depende de ZF
jo dest / jno dest: depende de OF
js dest / jns dest: depende de SF
jc dest / jnc dest: depende de CF
jp dest / jnp dest: depende de PF
Si el flag está activo se produce el salto
Si el flag no está activo, la ejecución continúa en la instrucción siguiente al salto condicional
Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 2121
Saltos condicionalesSaltos condicionales (CISC) (CISC)Saltos condicionales para valores signados(se asume que se acaba de ejecutarla instrucción cmp eax, ebx):
je dest: salta si eax = ebx
jne dest: salta si eax ≠ ebx
jl dest / jnge dest: salta si eax < ebx
jle dest / jng dest: salta si eax ≤ ebx
jg dest / jnle dest: salta si eax > ebx
jge dest / jnl dest: salta si eax ≥ ebx
Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 2222
Saltos condicionalesSaltos condicionales (CISC) (CISC)Saltos condicionales para valores no signados (se asume que se acaba de ejecutarla instrucción cmp eax, ebx):
je dest: salta si eax = ebx
jne dest: salta si eax ≠ ebx
jb dest / jnae dest: salta si eax < ebx
jbe dest / jna dest: salta si eax ≤ ebx
ja dest / jnbe dest: salta si eax > ebx
jae dest / jnb dest: salta si eax ≥ ebx
Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 2323
Instrucción JMP (RISC)Instrucción JMP (RISC)Sintaxis: jmp registro
jmp R0
Los saltos incondicionales siempre transfierenel control a la dirección de memoria contenida en el registro indicado
Esta instrucción se complementa con la invocación a procedimiento (call), la cuál preserva en un registro la dirección a la cuálse debe retornar al finalizar el procedimiento
Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 2424
Saltos condicionales (RISC)Saltos condicionales (RISC)En el caso de la arquitectura OCUNS, los saltos condicionales son mucho más simples:
jz registro, dest: si el resultado fue cero
jg registro, dest: si el resultado fue positivo
Al igual que en la arquitectura i386, el saltose produce si la condición es satisfecha, continuando la ejecución en la instrucción inmediata siguiente al salto en caso contrario
Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 2525
Estructuras de control (CISC)Estructuras de control (CISC)La estructura de control condicional se puede codificar con facilidad en i386:; if (a > 15) { b = 32; } else { a = a + 1; }
mov eax, [a]
cmp eax, 15 ; comparo a con 15
jng else ; ir a “else” si ≤ 15
mov [b], 32 ; brazo “then”
jmp seguir ;
else: inc eax ; brazo “else”
seguir: ... ; resto del programa
Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 2626
Estructuras de control (CISC)Estructuras de control (CISC)Las restantes estructuras de control tambiénse pueden codificar de una manera similar
Otra posibilidad es inspeccionar el código ensamblador generado por un compiladorde C ante las distintas estructuras de control
El parámetro opcional -S le solicita al compiladorde C que no descarte el archivo intermedio conteniendo el código en lenguaje ensamblador
Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 2727
Estructuras de control (RISC)Estructuras de control (RISC)La misma estructura de control también se puede capturar en la arquitectura OCUNS:; if (a > 15) { b = 32; } else { a = a + 1; }
lda R0, a ; preparación de los registros
lda R1, b ; auxiliares para acceso a mem.
lda R2, 15 ; preparación de los registros
lda R3, 32 ; auxiliares usados para simular
; el modo literal
load RA, 0(R0) ; RA contiene el valor actual
; de la variable a
Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 2828
Estructuras de control (RISC)Estructuras de control (RISC); if (a > 15) { b = 32; } else { a = a + 1; }
sub R4, RA, 15 ; comparo a con 15
jg R4, then ; ir a “then” si a > 15
inc RA ; brazo “else”
call seguir, RF ; es un call…
; ¡pero no es un call!
then: store R3, 0(R1) ; brazo “then”
seguir: … ; resto del programa
Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 2929
Llamadas al sistemaLlamadas al sistemaEl sistema operativo brinda sus serviciosa los distintos programas bajo la formade llamadas al sistema
Recordemos que el nivel 3 es híbrido, incorporando pocas instrucciones por sobre la funcionalidad provista por el nivel 2 de la máquina convencional
La mayor parte de las llamadas al sistema involucran conceptos que serán abordados recién en otras asignaturas
Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 3030
Llamadas al sistema (CISC)Llamadas al sistema (CISC)La invocación de llamadas al sistema bajoel GNU/Linux es similar a la invocaciónde un procedimiento en C
En una arquitectura de 32 bits, la interrupción 80h es el portal de acceso a todos los servicios de este SO
El servicio solicitado se indica en el registro EAX y sus parámetros usualmente en los restantes registros del procesador
Si el servicio retorna algún valor, lo hará también haciendo uso del registro EAX
Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 3131
ConvencionesConvencionesPor ejemplo, para invocar a la llamadaal sistema sys_write, se requiere:
Cargar el número de servicio solicitado(sys_write es el 4) en el registro EAX
Cargar el descriptor del archivo que queremosescribir en el registro EBX
Cargar el puntero al buffer conteniendolo que queremos escribir en el registro ECX
Cargar la cantidad de bytes que queremosescribir en el registro EDX
Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 3232
ConvencionesConvencionesEn general, el pasaje de parámetros enlas llamadas al sistema adopta dos variantesen función de la cantidad de argumentos:
Para pasar de cero a seis argumentos se usa pasaje de parámetros en registros, usando los registros EBX, ECX, EDX, ESI, EDI y EBP, en ese orden
Para pasar más de seis argumentos se usa pasajede parámetros en memoria, usando el registro EBX para indicar la dirección de comienzo de la listade parámetros
Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 3333
Hola mundo! (CISC)Hola mundo! (CISC)section .data
texto db 'Hola mundo!',10
largo equ $ - texto ; $ denota el offset
; actual
section .text
global _start ; etiqueta global que
; marca el comienzo
; del programa
Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 3434
Hola mundo! (CISC)Hola mundo! (CISC)_start:
mov eax, 4 ; servicio sys_write
mov ebx, 1 ; standard output
mov ecx, texto ; offset de mensaje
mov edx, largo ; largo del mensaje
int 80h ; invocación al servicio
mov eax, 1 ; servicio sys_exit
mov ebx, 0 ; terminación sin errores
int 80h ; invocación al servicio
Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 3535
Llamadas al sistema (RISC)Llamadas al sistema (RISC)En el caso de la arquitectura OCUNS, el tercer nivel del sistema operativo extiende mínimamente a la máquina convencional
Solo se asume que los accesos a la posición de memoria FF serán capturados y redireccionados al dispositivo estándar de entrada o de salida según corresponda
Por caso, lo escrito en esa posición saldrá por pantalla y lo leído será lo ingresado por el teclado
Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 3636
Hola mundo! (RISC)Hola mundo! (RISC)Tarea para el hogar: desarrollar un programa para la arquitectura OCUNS que sea equivalente al presentado para la arquitectura i386
El principal desafío consiste en resolver cómo generar la secuencia de caracteres a ser escritos en la posición de memoria FF
Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 3737
Invocación a rutinas (CISC)Invocación a rutinas (CISC)La invocación a un procedimiento no difiereen gran medida de los saltos convencionales
Se adopta la convención de dejar en el topela pila del programa la dirección a la que se debe retornar una vez finalizada la ejecucióndel procedimiento
Las instrucciones call y ret simplifican la invocación a procedimientos y el posterior retorno una vez finalizados
Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 3838
EjemploEjemplostart_:
mov eax, [UNVALOR]
call triplicar ; procedimiento para triplicar
... ; el valor almacenado en EAX
triplicar:
push ecx ; preservo ECX en la pila
push edx ; preservo EDX en la pila
mov ecx, 3
mul ecx ; multiplico por 3
pop edx ; recupero EDX de la pila
pop ecx ; recupero ECX de la pila
ret ; retorno
Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 3939
Invocación a rutinas (RISC)Invocación a rutinas (RISC)La arquitectura OCUNS también cuenta conun par de instrucciones a tal efecto
Cabe acotar que es diferente el mecanismo para comunicar cuál es la dirección de retorno, ya que se hace uso de un registro en vez deusar la pila del programa
En caso de implementar programas reentrantes, la pila desde ya puede ser simulada por el programador
La ley de equivalencia entre hardware y software está siempre a nuestra disposición
Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 4040
EjemploEjemplo lda RE, FF
load RA, 0(RE) ; lee un valor en RAcall dupli, R0 ; invoca a rutinastore RA, 0(RE); se muestra en pant.hlt
dupli: add RA, RA, RA ; ¿qué parámetros jmp R0 ; recibe dupli?
Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 4141
Pila del programaPila del programaLa pila del programa (stack) es una de las regiones que forma parte de los programasen ejecución
Su tamaño es dinámico, crece o disminuye segúnse requiera
Crece hacia abajo desde la dirección más alta
Es utilizada para almacenar datos temporalmente, tales como la dirección de retorno al invocar aun procedimiento o el valor actual de un registroel cual será alterado, por caso, durante la invocacióna un servicio del sistema operativo
Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 4242
Pila del programa (CISC)Pila del programa (CISC)Operaciones sobre la pila del programa provistas por la arquitectura i386:
Instrucción push: resta el tamaño en bytes del objeto apilado al valor actual del registro ESP (stack pointer) y lo almacena en el lugar ahora apuntado por ESP
Instrucción pop: recupera el objeto a ser desapilado de la locación apuntada por el registro ESP ylo actualiza sumándole el tamaño en bytesde ese objeto. Nótese que el objeto sigue en memoria, pero será sobrescrito cuando el tamaño de la pila vuelva a crecer (es decir, cuando el ESP se achique)
Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 4343
Pila del programa (RISC)Pila del programa (RISC)En la arquitectura OCUNS la pila del programa debe ser gestionada por el programador
La idea es reservar un registro y hacer uso del mismo como si se tratara de un puntero al tope de la pila
El registro sigue siendo de propósito general, es decir, la arquitectura no impide que se adultere el valor del puntero de manera deliberada
Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 4444
Caller save vs. callee saveCaller save vs. callee savePara preservar el contenido de los registrosque serán alterados durante la ejecución deun procedimiento surgen dos alternativas:
Una posibilidad (denominada “caller save”) es que quien llama al procedimiento se encargue de salvar en la pila del programa aquellos registros quese necesiten preservar
Otra posibilidad (denominada “callee save”) esque el procedimiento que es llamado se encarguede preservar en la pila del programa sólo aquellos registros que serán modificados
Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 4545
Caller save vs. callee saveCaller save vs. callee saveCada alternativa tiene ventajas y desventajas:
Caller save permite optimizar múltiples llamadosa un procedimiento, evitando que cada unade las invocaciones preserve y recuperede la pila múltiples registros
Callee save, por otra parte, posibilita queel procedimiento sólo preserve los registrosque serán afectados (el llamador usualmenteno tiene acceso a esta información)
La idea es adoptar sólo uno de estos esquemasa lo largo de un mismo programa
Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 4646
Pasaje de parámetrosPasaje de parámetrosLos procedimiento en ocasiones requieren recibir información adicional al ser invocados, esto es, requieren un conjunto de parámetros
El pasaje de estos parámetros se puede resolver de diversas formas:
Usando los registros del procesador
Usando una región de la memoria
Usando la pila del programa
Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 4747
Pasaje de parámetrosPasaje de parámetrosUsando registros:
Este es por lejos el mecanismo más eficiente(pues no implica accesos adicionales a memoria)
La cantidad de parámetros está limitada a la cantidad de registros disponibles
Usando la memoria:
Este mecanismo es más flexible que el anterior, pues permite una cantidad mucho mayor de parámetros
Naturalmente, tiene como desventaja que implica accesos adicionales a memoria
Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 4848
Pasaje de parámetrosPasaje de parámetrosUsando la pila del programa:
El pasaje de parámetros usando registros o usandola memoria no resulta del todo apropiado a la horade implementar procedimientos recursivos
En contraste, el pasaje de parámetros usandola pila del programa permite la implementaciónde procedimientos recursivos con relativa simpleza
Nótese que la dirección de retorno seguirá ocupando el tope de la pila, es decir, los parámetros serán apilados por debajo (¡lo que implica que la pilano será accedida como una pila!)
Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 4949
ReentranciaReentrancia¿Por qué resulta más conveniente usar la pila, que está memoria, que directamente un región de la memoria?
En otras palabras, ¿por qué en un caso podemos implementar soluciones recursivas y en el otro no?
La diferencia entre las dos alternativas radica en que usando la pila obtenemos lo que se denomina un procedimiento reentrante o puro
Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 5050
ReentranciaReentranciaPara alcanzar la reentrancia hace falta queel código no sea automodificable y que sólo se opere sobre los registros o la pila del programa
Para apreciar las ventajas de este tipo de código hay que recordar que los sistemas en la actualidadson multiprogramados, es decir, existe másde un programa en ejecución a la vez
Bajo esta definición, la recursión consiste meramente en sacar provecho de la reentrancia en una determinada rutina
Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 5151
Ejecución de un programaEjecución de un programaComo hemos visto, un programa atraviesa distintas etapas desde su concepción hasta llegar a estar corriendo en una arquitectura:
En primer lugar hay que escribir el código fuente
Más tarde hay que convertir ese código fuenteen código objeto
Luego, se debe convertir el código objeto (de unoo más archivos fuente) en el código ejecutable
Finalmente, se debe cargar en memoria el código ejecutable y comenzar su ejecución
Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 5252
Etapa de compilaciónEtapa de compilaciónCaracterísticas:
Durante esta etapa el código fuente es convertidoen código objeto instrucción por instrucción
Se resuelven la totalidad de las referencias locales
Se identifican y dejan pendientes de resolvera la totalidad de las referencias externas
El código objeto es prácticamente ejecutable, sólo resta incorporar el código objeto asociado a otros módulos o bien a las funciones de librería quese hayan utilizado
Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 5353
1-pasada vs. 2-pasadas1-pasada vs. 2-pasadasEn relación a la resolución de las referencias locales, es interesante tener en cuenta cómose lleva adelante esa resolución
Es decir, al encontrar una referencia local, es decir, una etiqueta, ¿cómo se puede saber a qué locaciónde memoria se está referenciando?
El compilador cuenta con una estructura de datos interna denominada tabla de símbolos, donde anota la dirección que asocia alas distintas declaraciones de etiquetasque va encontrando durante el ensamblado
Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 5454
1-pasada vs. 2-pasadas1-pasada vs. 2-pasadasNaturalmente, la tabla de símbolos sólo contiene la dirección de las etiquetas cuyas declaraciones ya visitó
Es decir, en principio no es posible resolverlas referencias a etiquetas aún no declaradas (por caso, saltos hacia adelante)
Esto implica que el ensamblador deba realizar dos pasadas sobre el código fuente
Ahora bien, ¿será factible resolver las referenciasen sólo una pasada?
Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 5555
1-pasada vs. 2-pasadas1-pasada vs. 2-pasadasLa respuesta es que sí, veamos cómo:
La clave radica en tener presente que tanto programa fuente como tabla de símbolos coexisten en el mismo espacio de direccionamiento (la memoria principal)
Al encontrar una referencia a una etiqueta aún no declarada, se coloca en la tabla de símbolos una referencia a esa locación (en la cual posteriormente se deberá actualizar la dirección de la etiqueta)
De aparecer otras referencias a esa misma etiqueta, se van enlazando las locaciones en donde eventualmente se deberá poner la dirección correcta
Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 5656
1-pasada vs. 2-pasadas1-pasada vs. 2-pasadasContinúa:
Cuando eventualmente se alcance la declaraciónde esa etiqueta, se recorre la “lista enlazada” arrancando en la dirección almacenada en la tablade símbolos reemplazando las referencias conla dirección recién descubierta
Caso contrario, de alcanzar el fin del archivo fuente simplemente se señala el error de compilación
Cabe acotar que esta idea sólo es aplicable sien el espacio asignado a la etiqueta dentrode la instrucción cabe una dirección completa
Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 5757
Etapa de vinculaciónEtapa de vinculaciónCaracterísticas:
Durante esta etapa el código objeto de uno o más archivos fuentes es convertido en código ejecutable
La principal tarea del vinculador es resolverla totalidad de las referencias externas
Las referencias a otros módulos se resuelven a partir de código objeto de ese módulo (el cual debe suministrarse en ese momento)
Las referencias a librerías se resuelven usandoel código objeto de la librería, el cual estará disponible en alguna ubicación conocida de antemano
Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 5858
Etapa de cargaEtapa de cargaCaracterísticas:
El cargador, un componente del sistema operativo,es el encargado de cargar a memoria el código ejecutable de un cierto programa
A esta altura todas las referencias externas están resueltas, sólo resta conocer la dirección inicial a partir de la cual será cargado el código ejecutable
Los modelos más avanzados de manejo de memoria han simplificado notablemente esta tarea (por caso,al contar con un espacio de direccionamiento de uso exclusivo para cada proceso)
Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 5959
Vinculación dinámicaVinculación dinámicaComo es frecuente que múltiples programas compartan la misma librería (por caso, stdio), en la actualidad es posible vincular múltiples programas a una misma instancia en memoria de la librería
Desde ya, esta librería debe estar compuesta exclusivamente de procedimientos reentrantes
Nótese que esas referencias externas no podrán ser resueltas en tiempo de vinculación, razón por la cual es este tipo de librería se las denomina de vinculación dinámica (por caso, las librerías .DLL)