Sie sind auf Seite 1von 3

Lenguajes de alto nivel

Representacin simblica de las instrucciones de mquina ( 1 sentencia = 1


instruccin de mquina ).
Ventaja: se puede alcanzar la mxima flexibilidad, performance, y manejo del
HW.
Desventaja: baja productividad, baja confiabilidad, difcil verificacin y
debugging, mantenimiento, costoso, baja portabilidad, etc. Lenguaje de alto
nivel (HLL):

Expresan los algoritmos de una manera adecuada a la capacidad


cognitiva humana.
Generan cdigo ms sencillo ( 1 sentencia HLL, varias instrucciones de
mquina ).
Portabilidad: cdigo portable a diversas arquitecturas y sistemas
operativos.
Modularidad, facilidad de modificacin y mantenimiento
Productividad en la generacin de cdigo.

Compiladores
Un compilador es un programa que traduce un lenguaje fuente (source) en un
lenguaje objetivo (target) equivalente

Un
Un
Un
Un
Un
Un
Un

programa
programa
programa
programa
programa
programa
programa

C traducido a Assembler.
Pascal traducido a Assembler.
Java traducido a JVM.
Java traducido a C.
LaTex traducido a Tex.
Assembler traducido a instrucciones de mquina.
HDL traducido a circuitos de HW.

Procedimientos & Funciones


Procedimiento: es una construccin que permite dar nombre a un conjunto de
sentencias y declaraciones asociadas que se usan para resolver un
subproblema dado. Una funcin es un procedimiento que devuelve resultados.
Se lo llama tambin subrutina, subprograma, rutina, etc.
Puesto que un subproblema puede codificarse como un procedimiento, un
problema complejo puede dividirse en subproblemas ms simples, quienes a su
vez pueden ser subdivididos hasta llegar a la descripcin de subproblemas muy
simples (Divide & Conquer, diseo Top-Down, etc.)

Ventajas: reutilizacin del cdigo y de la memoria, distribucin entre


programadores, simplicidad del testeo y debugging, mantenimiento,
programacin estructurada, etc.
Desventajas: overhead moderado, y cuidados para el proceso de llamado y
retorno E0

La Pila
Se utiliza para guardar variables locales. Es un arreglo (array) de dimensiones
variables que crece tpicamente hacia las direcciones ms bajas de memoria y
se achica hacia arriba.

Marco de Pila
Los lenguajes de programacin modernos (HLL) tienen tpicamente variables
locales. Cada invocacin de una funcin tiene su propia instancia de variables
locales. La porcin de la pila usada para invocar a una funcin o procedimiento
se denomina Marco de Pila (Marco de Pila (stack frame, SF) frame, SF) o
tambin o tambin activation activation record (AR) record (AR).

Organizacin
Un compilador puede usar cualquier esquema de layout que sea conveniente.
Los fabricantes de microprocesadores especifican esquemas de layout estndar
para su utilizacin para todos los compiladores. Si todos los compiladores usan
las mismas calling conventions, entonces funciones compiladas con un
compilador pueden llamar a funciones compiladas con otro compilador.

Pasaje de Parmetros
F (a , a , ..., a ) Los registros son ms rpidos que la memoria. En lo posible el
compilador debe mantener los valores en registros. Calling Calling convention
convention moderna moderna: mejor que poner a , a , ..., a en stack frame, van
a , ..., a ( )en registros r , r ,r ,r ,y a ,a ,a , ..., a en la pila. Si r ,r ,r ,r son
necesarios para otro propsito, la funcin llamada deber salvar los
argumentos en juego en el stack frame. Este espacio debe ser reservado en el
stack frame an si los parmetros se pasan va registros.

Los Registros guardan:

Algunos Parmetros.
Valor de Retorno. Variables Locales
Resultados intermedios de expresiones (temporarios)

El Marco de Pila guarda

Variables pasadas por referencia o que tienen la direccin tomada Variables


accedidas por procedimientos anidados dentro del corriente. Variables que son
demasiado grandes para entrar en el register file. Array variables (se requiere
arimtica de direccionamiento para acceder elementos).

Registros Asignacin

Los compiladores tpicamente ubican variables en la pila hasta que


pueden determinar si pueden ser promovidos a un registro (p.ej. sin
referencias).
La asignacin de variables a registros la realiza el Register Allocator
(etapa de optimizacin del compilador)

Registros - resguardo
El estado de los registros debe guardarse antes que la funcin invocada los
utilice.

Caller-save: los registros son responsabilidad de la funcin llamante.


Callee-save: los registros son responsibilidad de la funcin llamada.

Calling Conventions
Los registros R0 hasta R3 son usados para pasar parmetros a la funcin.
Dentro de la funcin se pueden usar para cualquier propsito y no necesitan
preservarse.
Los registros R4 hasta R11 deben ser preservados por la funcin llamada. Si
los usa hay que enviarlos a la pila en el prlogo de la funcin (push, inst. STM)
y recuperarlos al eplogo (pop, inst. LDM).
Los registros R12 hasta R15 tienen propsitos especiales. R13 es el Stack
Pointer (SP), R14 es el Link Register (LR), R12 es de scratch y R15 es el
Program Counter (PC
El valor de la funcin se devuelve en R0 (y en R1 de ser necesario).

Das könnte Ihnen auch gefallen