Programación en Lenguaje Ensambladorags/OC/downloads/APUNTES DE...ensamblador generado por un...

60
Organización de Computadoras Organización de Computadoras Depto. Cs. e Ing. de la Comp. Depto. Cs. e Ing. de la Comp. Universidad Nacional del Sur Universidad Nacional del Sur Módulo 10 Módulo 10 Programación en Programación en Lenguaje Ensamblador Lenguaje Ensamblador

Transcript of Programación en Lenguaje Ensambladorags/OC/downloads/APUNTES DE...ensamblador generado por un...

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)

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 6060

¿¿Preguntas?Preguntas?