You are on page 1of 120

4.

Software de base

Introduccin
Al conjunto de componentes tangibles
como teclado, CPU, impresora,
dispositivos de memoria se les clasifica
como hardware. Un hardware sin
programas que permitan controlarlo no
sirve de mucho, as los componentes
intangibles denominados software son
tan importantes como el hardware en
un sistema de cmputo.

Programa
Un programa es una secuencia lgica
de instrucciones que permiten a travs
del control que una mquina realice una
tarea, aunque en realidad sea el
hardware el que ejecuta las acciones

Sistema de
de
Sistema
Computacin
Computacin

Hardware
Hardware

Software
Software

Sistema
Sistema
operativo
operativo

Programas de
de
Programas
aplicacin
aplicacin

4.1 Sistemas operativos

enciende

entradas

S.O.
Compara con
comandos

Inicia
Inicia
Sistema operativo
operativo
Sistema

Realiza acciones
Mensaje de error

Un comando o mandato puede ser:

ejecutar un programa de aplicacin o


realizar una tarea domestica, como dar
formato a un disco o realizar operaciones
con los archivos

Despus de realizarlo vuelve a esperar


otro comando

El sistema operativo contiene los algoritmos


que definen la forma en la que la
computadora debe interactuar con el mundo
exterior, permitiendo que se controlen
actividades que permitan el uso de los
recursos.
Un recurso, denota a los dispositivos que
estn disponibles en una mquina, tales
como dispositivos perifricos, memoria
principal y CPU, entre otros.

Funcin central de un SO

Administrar y organizar los


recursos de la computadora
para su mejor utilizacin

Manejo de informacin
Manejo de Entrada/Salida
Manejo del procesador
Manejo de memoria
Kernel

SO convierte a una mquina


real en una virtual
El sistema operativo crea la ilusin de estar
trabajando con una mquina virtual, cuya
existencia se simula con el software. As, se
crea la ilusin de una mquina virtual que se
comunica con su entorno de una forma ms
conveniente que el hardware real. As, una
persona puede trabajar con una computadora
sin saber nada de las funciones internas.

C aractersticas virtuales
Datos almac enados en bloques lgic os
Presenc ia
slo
de
los
datos
p ertenec ientes a un usuario individual
Capac idad de entender mandatos
en
forma
c ompatible
c on
el
p ensamiento humano
Mismas c arac terstic as internas que
otras mquinas

Caractersticas reales
Datos almac enados en bloques fsic os
Presenc ia de datos que pertenec en a
todos los usuarios
Capac idad
de
entender
slo
lenguaje de mquina
Carac terstic as
internas
signific ativamente diferentes de las de
otras mquinas

En las ciencias de la computacin, como en


muchas otras, el progreso se logra
resolviendo primero problemas pequeos, y
empleando las soluciones de esos problemas
como herramientas (llamadas herramientas
abstractas)
para
resolver
problemas
mayores. El resultado es una jerarqua de
soluciones en la que cada nivel ofrece una
abstraccin adicional que simplifica los
problemas del siguiente.

4.2 Evolucin de los sistemas


operativos

Etapas
Inicio
Proceso por lotes
Proceso interactivo
Sistemas de tiempo compartido

Inicio
En los aos 40 y 50 del siglo pasado las
mquinas requeran para ejecutar un
programa de la preparacin del equipo
(montar cintas, colocar tarjetas perforadas,
ajustar interruptores, etc.) y por esta razn se
manejaba como una entidad aislada. La
mquina estaba por completo bajo el dominio
de un solo programador en un momento
dado.

Proceso por lotes


Los SO se iniciaron para simplificar los
preparativos de los programas y agilizar las
transiciones entre trabajos
Separacin del programador con la mquina
y en su lugar el operador
proceso por lotes (batch processing), se
refiere a la ejecucin de trabajos
reunindolos primero con sus datos
asociados para formar un solo lote en el
almacenamiento masivo y ejecutndolos
despus sin ms interaccin con el usuario

Para agilizar el trabajo, se introdujeron


los sistemas de cola (FIFO, First In First
Out, PEPS)

En algunas ocasiones no es adecuado


trabajar bajo el esquema de cola, por lo
que los SO permiten asignar
prioridades a los trabajos

En los primeros sistemas de proceso por


lotes, cualquier instruccin referente a los
requerimientos para ejecutar un programa
(por ejemplo, que cintas se deban montar)
se tenan que comunicar al operador, en
cambio en una cola, el SO determina el
siguiente proceso por lo que se complicaba el
trabajo del operador, por esta razn se
diseo un sistema de codificacin, llamado
lenguaje de control de trabajos (JCL, job
control language). As, el SO imprima
indicaciones para que el operador las
pudiese llevar a cabo, el resultado fue que ya
no fuera necesario que el operador tuviera
contacto personal con el usuario.

Posteriormente, aparecieron los


lectores de tarjetas, por lo que el
usuario poda introducir sus trabajos e
indicaciones directamente a la cola de
trabajos. Conforme se increment el
grado de avance de los sistemas
operativos, fue creciendo el nmero de
indicaciones que podan realizarse sin
ayuda del operador

Una de las grandes desventajas del proceso


anterior es que no se pueden alterar ni los
datos ni los programas una vez que estn
en la cola de trabajos, y sin embargo, existen
aplicaciones en las que los datos no estn
disponibles antes de que el programa se
ejecute (ejemplo, cuando se crea un
programa). Para resolver estos
inconvenientes se crearon los procesos
interactivos, donde el usuario puede
sostener un dilogo a travs de estaciones
de trabajo remotas, as las solicitudes se
atendan de inmediato y el resultado se
devolva al solicitante.

Proceso interactivo
El concepto de proceso interactivo est
ntimamente relacionado con el de
proceso en tiempo real, que se refiere
al requisito de que el software coordine
sus actividades con las del entorno.
Ejemplos: vuelo de un avin,
predicciones, etc.

Un sistema interactivo tambin debe ser


capaz de coordinar necesidades de varios
usuarios, ya que es preciso atender todas y
cada una de las solicitudes de los diversos
usuarios en el momento mismo de la
solicitud. Este requisito se satisfizo mediante
el tiempo compartido, que es una tcnica
en la cual la atencin de una sola CPU
alterna entre las diversas tareas de modo
que da la apariencia de que la CPU est
realizando tareas simultneamente.

Sistemas de tiempo
compartido
El tiempo compartido se refiere a la tcnica
de alternar la atencin de una CPU entre
varios procesos de modo que parezca como
si se ejecutaran al mismo tiempo. Se suele
utilizar el trmino tiempo compartido cuando
los procesos que comparten el tiempo
pertenecen a distintos usuarios. El trmino
multitarea se usa normalmente para
referirse a tcnicas similares aplicadas a
procesos que pertenecen a un solo usuario.

El tiempo compartido no fue una solucin


viable entre los usuarios de las primeras
computadoras debido a los requerimientos en
las velocidades de ejecucin y capacidades
de almacenamiento. La irona es que ahora
que se tiene la tecnologa, se ha eliminado la
necesidad de contar con tales sistemas ya
que la competencia entre usuarios se
resuelve adquiriendo ms equipos que se
conectan a travs de la red para intercambiar
informacin. As, el concepto de mquina
central grande que brinda servicio a muchos
usuarios cede ante el concepto de muchas
mquinas pequeas conectadas a la red.

Estas redes representan un ejemplo de


los sistemas multiprocesadores, de tal
forma que la apariencia de realizar
varias tareas al mismo tiempo no es
una caracterstica virtual, sino real.

4.3 Arquitectura en capas

Manejo de informacin
Manejo de Entrada/Salida

Abismo
Abismo entre
entre
capacidades
capacidades de
de
comunicacin
comunicacin
entre
entre la
la
mquina
mquina yy el
el ser
ser
humano
humano

Manejo del procesador


Manejo de memoria

Llamadas
al sistema

Kernel
Software
Software de
de base
base

Programa vs. proceso


Programa: conjunto de instrucciones
estticas en algn lenguaje
Proceso: conjunto de acciones que
suceden cuando un programa se
ejecuta
CPU

Programa objeto
(esttico)

Proceso en
ejecucin
(dinmico)

Dos procesos son simultneos cuando se


ejecutan en el mismo instante
Dos procesos son concurrentes cuando se
ejecutan en el mismo intervalo de tiempo
Para que exista simultaneidad entre n
procesos debe haber n procesadores, pero
para ejecutarlos concurrentemente se
requiere repartir un slo procesador

Arranque de una
computadora
Memorias:

voltiles,
tiles retienen la informacin
almacenada despus de la prdida de
energa
no voltiles,
tiles ni la computadora puede
alterar su contenido, se conocen como
memoria de slo lectura (ROM: read-only
memory)

ROM
SO + autoarranque (bootstrap)
Este programa que no es el SO, realiza la
siguiente secuencia de instrucciones:
1. Lee un rea previamente determinada del
almacenamiento masivo (normalmente en
disco, que contiene el principio del SO) y
coloca su contenido en un rea de la
memoria voltil
2. Ejecuta un salto a la primera celda de esa
rea de memoria

4.2 Software de desarrollo

4.2.1 Evolucin
Antes de que una computadora pueda
ejecutar una tarea, debe programrsele
para que lo haga colocando en la
memoria principal un algoritmo
apropiado, expresado en lenguaje de
mquina.

Lenguaje de mquina
Originalmente se utiliz el lenguaje de
mquina, pero pueden existir muchos
errores:
1er. paso: asignar nombres mnemnicos a
los diversos cdigos de operacin
2do. paso: asignar nombres a las direcciones
de las celdas de memoria en una instruccin,
con lo que se logra una mayor
comprensibilidad

Ejemplo
156C
166D
5056
306E
C000

CARGAR R5, Precio


CARGAR
R6,
Impuesto
SUMAR R0, R5, R6
ALMACENAR
R0,
Total
ALTO

Esta notacin se usaba al disear programas en papel y


luego se traduca

Pero: la traduccin es un proceso


mecnico
Mnemnicos

Lenguaje
Ensamblador
Traduccin

Lenguaje de
mquina

Programa
Ensamblador

Esto pareca un gran salto, por lo que 2da.


generacin.
Las primitivas empleadas en los 2 lenguajes
eran esencialmente las mismas; la nica
diferencia era su sintaxis de representacin.
Desventajas:

depende inherentemente de la mquina


los pasos, al ser pequeos no permiten
concentrarse al programador en la solucin
global. Ejemplo: cemento, tablas, vidrio, clavos,
tabiques, etc. para realizar una casa, es ms fcil
conceptualizarla como habitaciones, techos,
balcones, etc.

Modos de direccionamiento
Directo

OP <direccin>
DIV <direccin> Divide lo que contenga el
acumulador entre el contenido de la celda de
memoria descrita por la direccin

Inmediato

OP <dato>
DIV i <dato> Divide lo que contenga el
acumulador entre el nmero que viene a
continuacin

Nueva mquina
Contiene un acumulador donde se
realizan las operaciones solicitadas y se
deja el resultado nuevamente en el
acumulador
Maneja 2 modos de direccionamiento
Las instrucciones son de longitud
variable
Memoria de 0000-FFFF

Una operacin en modo inmediato es


menos general que la misma en modo
directo
Directo:
CARGA 28
SUMA 29
GUARDA 30
Suma el contenido de la
celda 28 con el nmero
que est en la celda 29
y se deja el resultado
en la 30

Inmediato:
CARGA i 18
SUMA i 200
GUARDA 30
Suma 18 con 200 y
deja el resultado en la
celda 30. Las
instrucciones estn
comprometidas

Nuevo cdigo
Nombre de la instruccin Cdigo interno
ALTO
70
CARGA
20
CARGA i
21
DIV
38
DIV i
39
GUARDA
02
MULT
36
MULT I
37
RESTA
33
RESTA I
34
SUMA
30
SUMA I
31

Longitud de la instruccin
1
2
2
2
2
2
2
2
2
2
2
2

Leer un nmero implica que el


procesador central tome un valor del
mundo exterior por medio de la unidad
de entrada (usando un registro especial
llamado puerto de entrada). Ese valor
individual llega de afuera y es
depositado en el acumulador como
resultado de una instruccin de lectura
(IN)

Entrada y Salida
IN Toma el valor individual que est en
el puerto de entrada y lo deposita en el
acumulador
OUT Toma el valor del acumulador y lo
deja (una copia en realidad) en el
puerto de salida

Comparaciones
bandera,
bandera para indicar el resultado de la
ltima comparacin entre dos valores

IGUAL
DIFERENTE
MAYOR QUE
MENOR QUE
MAYOR O IGUAL QUE
MENOR O IGUAL QUE

COMP <direccin> Efecta una comparacin


entre el contenido del acumulador y el de la
celda cuya direccin se indica. Deja el
resultado de la comparacin en la bandera

Saltar
Salto condicional

BR? <direccin> Brinca directamente a la


celda con la direccin especificada si es
que la bandera indica ?
BR=, BR!=, BR >, BR <, BR <=, BR >=

Salto incondicional

BR <direccin>

Ejemplo
Supongamos que la secuencia A
abarca de las celdas 25 a 30 y que la
secuencia B va de la 31 a la 40. La
decisin de si se ejecuta una u otra
depender de una comparacin
anterior, por lo que en la celda 23 habr
que colocar una de las instrucciones de
bifurcacin (o salto) condicional

El sig. fragmento no ejecuta la


secuencia A si en la celda 65 hay un
10
Direccin
...
19
21
23
25
...
29
31
...
39

Instruccin

CARGA 650
COMP i 10
BR= 31
1ra. instruc c in de la sec uenc ia A
...
ltima instruc c in de la sec uenc ia A
1ra. instruc c in de la sec uenc ia B
....
ltima instruc c in de la sec uenc ia B

Ejemplo: Bsqueda del


mximo de 3 enteros
Pasos:
1.
2.
3.

4.

5.
6.

Leer los 3 nmeros


Considerar al primero como el mayor
Compara el mayor (o sea el primero) contra el
segundo: si el segundo es mayor, entonces se
considera al segundo como el mayor (y si no, no
hay cambios)
Compara el mayor (haya sido el primero o el
segundo) contra el tercero: si el tercero es mayor,
entonces el tercero se considera como el mayor (y
si no, no hay cambios)
Mostrar el mayor
Alto

Direccin
00
01
02
03
04
05
07
08
10
11
13

Instruccin
Espac io para los 4 datos

IN
GUARDA 00
IN
GUARDA 01
IN
GUARDA 02
CARGA 00

15
17
19
21
23
25
27
29
31
33
34

GUARDA 03
COMP 01
BR > 25
CARGA 01
GUARDA 03
COMP 02
BR > 33
CARGA 02
GUARDA 03
0UT
ALTO

Ms sobre modos de
direccionamiento
Programa objeto: programa escrito en
lenguaje de mquina est escrito con ceros y
unos, hace referencia a celdas absolutas de
memoria y es inflexible, en el sentido de que
no admite cambios para adaptarlo a nuevos
requerimientos.

Inmediato
Directo
Indirecto

Inmediato
Donde la operacin se aplica al dato
numrico escrito inmediatamente a la
derecha de una instruccin.

Por ejemplo, SUMA i 27

En forma general, OP -i valor

Directo
Se escribe la direccin del valor al que
se aplica la operacin

OP direccin (valor)

Ejemplo: para el siguiente suponga que


la celda 14 tiene un valor 20, CARGA
14, pondr el valor de 20 en el
acumulador

Indirecto
Interpreta el valor como direccin de
una celda a la que habr de ir para
extraer de all otra direccin que lleve al
valor deseado

OP direccin1 (direccin2 (valor))

Ejemplo
23

11

21

...

1001

1001

1002

1003

.....

2998

la instruccin CARGA ind 2998,


cargara el acumulador con 23

Problema: traducir el programa fuente a


lenguaje de mquina
Solucin: contratar a un traductor, pero
como hay que integrarlo a la mquina,
entonces mejor un programa. As, si el
traductor se convierte en un programa y se
deja residente en la memoria, el proceso de
comunicacin con ella tendra dos pasos:
primero convertir el programa fuente a
programa objeto y, segundo, llevar a la
memora y ejecutar ese programa objeto.

Programa fuente
con mnemnicos

Traductor
ENSAMBLADOR

Programa objeto en
lenguaje de mquina

!Programa T, 1ra. versin


!Traductor de leng. de mnemnicos a leng. de mquina
!El smbolo ! se usa para escribir comentarios
Para cada rengln del programa fuente ejecutar lo siguiente:
Buscar la palabra mnemnica en el diccionario de
equivalencias
Si est, entonces traducirla a lenguaje de mquina
(reemplazarla)
En caso contrario, mandar un mensaje de error
Fin del programa

Ejercicio
Traducir el siguiente programa fuente:
CARGA 20
SUMA 21
GUARDA 22
ALTO

A cdigo objeto:
20 20 30 21 02 22 70
si por error el tercer rengln estuviera como GOARDA
22 el traductor se quejara ya que no es traducible.

Siguiendo este camino aparece la posibilidad


de no preocuparse por seleccionar celdas de
memoria especficas, sino dejar esta
responsabilidad al traductor.
Una variable es un nombre simblico
asociado con una celda particular de la
memoria. Por ejemplo: CARGA alfa, har que
se cargue el acumulador con el contenido de
la celda 21 (suponiendo que alfa est
asociada a la celda 21).

Esto significa que el programador trabajar


con un ambiente simblico en vez de un
ambiente absoluto, lo que permitir que se
pueda comunicar con la mquina en un
lenguaje ms simblico ya que los programas
sern ms legibles para el humano.
Ejemplo: alfa alfa + beta

CARGA alfa
SUMA beta
GUARDA alfa
ALTO

Qu cambios hay que hacer


al traductor?
Guardar en una tabla las direcciones
absolutas que asign a las variables
simblicas, llamada tabla de smbolos

Ejemplo
c a + b y luego d e c
CARGA a
SUMA b
GUARDA c
CARGA e
RESTA c
GUARDA d

El traductor tiene que tener cuidado de que


un nombre smbolo est asociado a una
celda en particular todas las veces en las
que se haga uso del nombre simblico.

Ejercicio
CARGA a
SUMA b
GUARDA c
CARGA e
RESTA c
GUARDA d

Variable
a
b
c
d
e

Direccin
Asignada
70
71
72
73
74

La traduccin sera:
Programa fuente

Programa objeto
obtenido

Programa fuente
1
3
5
7
9
11
13

CARGA a
SUMA b
GUARDA c
CARGA e
RESTA c
GUARDA d
ALTO

Programa objeto
obtenido
20 70
30 71
02 72
20 73
33 72
02 74
70

Observaciones
Como c aparece dos veces, su
direccin absoluta (72) tambin aparece
dos veces
Las apariciones de 70 son diferentes, la
1ra. es la direccin de memoria de la
a y la segunda la codificacin de la
instruccin ALTO

La 1ra. vez que aparece una variable se


introduce a la tabla de smbolos y se
remplaza en el cdigo objeto por la direccin
absoluta, posteriormente slo la remplaza.
Algunos detalles tcnicos:

El traductor puede darse cuenta de la existencia


de variables, pero nunca le fueron asignadas
No se dijo a partir de cul direccin se desea
comenzar a asignar celdas de memoria

Pseudoinstruccin
una instruccin que el programador
escribe para el traductor, no para la
mquina
Las pseudoinstrucciones PROGRAMA
y FIN,
FIN indican dnde comienzan y
terminan las verdaderas instrucciones

DATO

Para definir una variable se usa la


pseudoinstruccin DATO, a la que precede el
nombre simblico y precede la cantidad de celdas
que ocupar. Ejemplo:
ALFA: DATO 1 !Supone que el traductor conoce a partir

!de que direccin se deben asignar las


!celdas de memoria

ORIGEN

Para comenzar a asignar celdas de memoria, la


pseudoinstruccin es:
ORIGEN <direccin fsica inicial>

As, el ejemplo anterior se


puede escribir como:
Programa fuente

Programa fuente
1
3
5
7
9
11
13

CARGA a
SUMA b
GUARDA c
CARGA e
RESTA c
GUARDA d
ALTO

Programa objeto
obtenido
20 70
30 71
02 72
20 73
33 72
02 74
70

ORIGEN 70
a: DATO 1
b: DATO 1
c : DATO 1
d: DATO 1
e: DATO 1
PROGRAMA
CARGA a
SUMA b
GUARDA c
CARGA e
RESTA c
GUARDA d
ALTO
FIN

Programa objeto
obtenido

20 70
30 71
02 72
20 73
33 72
02 74
70

Etiquetas
Referencias simblicas a direcciones
del programa, empleadas para dirigir
los altos condicionales y modificar el
flujo de ejecucin. Antes esto se haca
de forma absoluta, si se quiere realizar
de forma simblica, entonces esas
direcciones se especifican utilizando
etiquetas que referencian a direcciones
fsicas

Ejemplo: mximo de 3 enteros


!Bsqueda del mximo
ORIGEN 3000
alfa: DATO 1
beta: DATO 1
gama: DATO 1
max: DATO 1
PROGRAMA
IN
GUARDA alfa
IN
GUARDA beta
IN
GUARDA gama
CARGA alfa
GUARDA max
COMP beta
BR> etiq1
CARGA beta
GUARDA max
etiq1: COMP gama
BR> etiq2
CARGA gama
GUARDA max
etiq2: OUT
ALTO
FIN

!Leer el primer nmero


!Almacenarlo
!Leer el segundo nmero
!Almacenarlo
!Leer el tercer nmero
!Almacenarlo
!Suponer que el 1ro.
! es el mximo
! compara el 1ro. con el 2do.
! reemplazar cuando el 2do. fue mayor
! comparar mayor con el 3ro.
! reemplazar cuando el 3ro. fue el mayor
! mostrar el mximo

Auxiliares en la virtualizacin
de programas fuente
Pseudoinstrucciones para definir c ondic iones inic iales en el proc eso de
traduc c in
Mnemnicos
en lugar de c digos de instruc c iones
Variables
en lugar de c eldas por nmero
Etiquetas
en lugar de direc c iones numric as c omo destino para los
saltos

Traductor de
2 pasos o
lecturas

PASOS:
1ro. para guardar las
definiciones de todas las
etiquetas en la tabla de
smbolos y
2do. para reemplazar las
referencias a ellas por las
direcciones donde se
encontraron, y generar el
cdigo objeto

Nuevo acercamiento
! Programa T, 2da. versin
! Primer paso
Para cada rengln del programa fuente ejecutar lo siguiente:
Si existe una pseudoinstruccin ORIGEN y un nmero
considerarlo como la direccin actual e iniciar
Si existe una definicin de etiqueta, buscarla en la tabla de
smbolos
Si existe marcar error de etiqueta repetida
en otro caso darla de alta en la tabla de smbolos
Si la etiqueta acompaaba a una pseudoinstruccin DATO
seguida de un nmero asignar la direccin actual a esa variable
en la tabla de smbolos y sumar el nmero a la direccin actual
Si luego de la etiqueta aparece un mnemnico, aadir su
longitud a la direccin actual
Si existe la pseudoinstruccin FIN, termina el primer paso

! Segundo paso
Regresar al primer rengln despus de la pseudoinstruccin
PROGRAMA
Para cada rengln del programa fuente ejecutar lo siguiente:
Ignorar la posible definicin de etiqueta
Buscar el mnemnico en el diccionario de equivalencias
Si est, escribir su cdigo en el programa objeto
en otro caso, marcar error: mnemnico desconocido
Si a continuacin aparece una variable simblica, buscar su
direccin en la tabla de smbolos
Si est, escribir esa direccin en el programa objeto
en otro caso, marcar error: variable o etiqueta desconocida
si la pseudoinstruccin es FIN, terminar el proceso
Fin del programa T

Ensamblador
Traductor que asigna direcciones
absolutas a las variables simblicas del
programador.

Regresando
al
programa
para
determinar el mayor de 3 enteros. En la
primera pasada se formar la siguiente
tabla:
Nombre simblico
alfa
beta
gama
max
etiq1
etiq2

Direccin
3000
3001
3002
3003
3025
3033

etiq1:

etiq2:

ORIGEN 3000
alfa: DATO 1
beta: DATO 1
gama: DATO 1
max: DATO 1
PROGRAMA
IN
GUARDA alfa
IN
GUARDA beta
IN
GUARDA gama
CARGA alfa
GUARDA max
COMP beta
BR> etiq1
CARGA beta
GUARDA max
COMP gama
BR> etiq2
CARGA gama
GUARDA max
OUT
ALTO
FIN

3004
3005
3007
3008
3010
3011
3013
3015
3017
3019
3021
3023
3025
3027
3029
3031
3033
3034

Ejercicio
Producir
manualmente el
cdigo objeto
generado por el
programa para
determinar el mayor
de 3 enteros.

Caractersticas adicionales del


ensamblador
EQU:
EQU para constantes simblicas
diez: EQU 10
nmero: EQU 915

El ensamblador reemplaza la constante por el


valor

VALOR:
VALOR separa una celda de memoria y le
asigna un valor; valores iniciales
alfa: VALOR 30

El ensamblador asigna la direccin actual a la


celda llamada alfa y le da el valor de 30
Estos valores generados por estas dos
pseudoinstrucciones tambin debern almacenarse
en la tabla de smbolos para su posterior utilizacin.

Ejemplo
inic io
lmite:
alfa:
beta:
....

EQU
EQU
ORIGEN
dato
VALOR

700
8
8
1
lmite+ 2

Nombre simblico
inic io
lmite
alfa
beta

Direccin
----7000
7001

Valor
700
8
--10

Otra pseudoinstruccin
LISTA:
LISTA asigna a la etiqueta el conjunto
de valores especificados a
continuacin:
Nombre
fac tor
nmeros

fac tor:
nmeros:
zeta:
alfa:

EQU
ORIGEN
LISTA
DATO
VALOR

8
1000
7, 21, 14, 6, 99
3
fac tor * 5

zeta

alfa

Direccin
--1000
1001
1002
1003
1004
1005
1006
1007
1008

Ejemplos:
COMP nmeros+2 se traduce a 40 1002
GUARDA zeta+1 se traduce a 02 1006

Valor
8
7
21
14
6
99
---40

Almacenamiento de conjuntos
de nmeros
Estructura de datos, llamada vector o
arreglo tiene la capacidad de referirse a
un conjunto de valores con un solo
nombre y diferenciar sus elementos
mediante sus posiciones relativas al
inicio

Ejemplo
Arreglo de cinco celdas:
long:
arr1:

EQU
ORIGEN
DATO

5
1000
long

la primera celda se llama arr1, la


segunda arr2 y la quinta arr1+4

Tambin se pueden definir valores iniciales


como:
ORIGEN 1000
arr2:

LISTA

700, 710, 720, 730, 740

y la memoria se ver como:


700
1000

710
1001

720
1002

730
1003

740
1004

note que el valor de arr2+3 es 730, por lo que para


imprimir su valor se puede utilizar:
CARGA arr2+3
OUT

Para desplegar el contenido de todas las celdas:


CARGA arr2
OUT
CARGA arr2+1
OUT
...
CARGA arr2+4
OUT

Ejercicio

5
1000
inic io
700, 710, 720, 730, 740
1
1
inic io
base

Nombre
c eldas
inic io
arr2

base:
c uenta
c ic lo

base

base
base
c uenta
c uenta
c eldas
c ic lo

Cdigo objeto

! Programa general para mostrar c ontenidos de c eldas


c eldas:
EQU
inic io:
EQU
ORIGEN
arr2:
LISTA
base:
DATO
c uenta:
VALOR
PROGRAMA
CARGA i
GUARDA
!Se hac e la lec tura indirec ta a la c elda ac tual
c ic lo:
CARGA ind
OUT
! Se inc rementa la direc c in de referenc ia
!para apuntar a la siguiente c elda
CARGA
INCR
GUARDA
!Se inc rementa la c uenta
CARGA
INCR
GUARDA
!Averiguar si hay ms c eldas
COMP -i
BR < =
ALTO
FIN

Tabla de smbolos
Direccin
----1000
1001
1002
1003
1004
1005
1006
1011
1000
1001
1002
1003
1004
1005
1006
1007
1009
1011
1013
1014
1016
1017
1019
1021
1022
1024
1026
1028

Valor
5
1000
700
710
720
730
740
-1
-700
710
720
730
740
00
01
21 1000
02 1005
22 1005
11
20 1005
32
01 1005
20 1006
31
02 1006
41 05
48 1011
70

Descripcin del programa


ensamblador
! Primera versin
! 2 pasos

!Programa T, 3ra. versin


!1er. paso
Para cada rengln del programa fuente ejecutar lo siguiente:
Si existe la definicin de una etiqueta, buscarla en la tabla de smbolos,
esperando que no est;
si ya est en la tabla, marcar error: etiqueta repetida; en otro caso, darla de
alta en la tabla de smbolos, y efectuar luego una de las siguientes 5 acciones
segn sea el caso:
(1) si la etiqueta acompaaba a una pseudoinstruccin EQU seguida de un nmero,
meter ese nmero como valor de la constante en la tabla de smbolos
(2) si la etiqueta acompaaba a una pseudoinstruccin DATO seguida de un nmero,
asignar la direccin actual a esa variable en la tabla de smbolos y sumar el nmero a
la direccin actual
(3) si la etiqueta acompaaba a una pseudoinstruccin VALOR seguida de un nmero,
meter la direccin actual en la tabla y guardar el nmero como el valor de esa variable
en la tabla de smbolos. Luego aadir 1 a la direccin actual
(4) si la etiqueta acompaaba a una pseudoinstruccin LISTA seguida de un conjunto
de nmeros, para cada uno guardar la direccin actual y ese nmero como su valor en
la tabla de smbolos, aadiendo adems 1 a la direccin actual por cada uno de ellos
(5) si luego de la etiqueta aparece una instruccin mnemnica, aadir su longitud a la
direccin actual

Si existe una pseudoinstruccin ORIGEN seguida de un nmero o un nombre


simblico, considerar ese nmero como la direccin actual e iniciar, o bien
buscar el nombre en la tabla de smbolos y considerar su valor como la
direccin inicial
Si existe la pseudoinstruccin FIN, termina el primer paso

! Segundo paso
Regresar al primer rengln despus de la pseudoinstruccin
PROGRAMA
Para cada rengln del programa fuente ejecutar lo siguiente:
Ignorar la posible etiqueta
Buscar el mnemnico en el diccionario de equivalencias
Si est, escribir su cdigo en el programa objeto
en otro caso, marcar error: mnemnico desconocido
Si a continuacin aparece una variable simblica, buscar su
direccin en la tabla de smbolos
Si est, escribir esa direccin en el programa objeto
en otro caso, marcar error: variable o etiqueta desconocida
si la pseudoinstruccin es FIN, terminar el proceso
Fin del programa T

Macroprocesadores

Objetivo
Dar al ensamblador la capacidad de repetir
grupos de instrucciones. Esto es, compactar
renglones repetitivos a travs de una
abreviatura y pedir al traductor que lo
expanda durante la traduccin.

Ejemplo: si los renglones


CARGA a
SUMA b
GUARDA c

aparecen con frecuencia entonces se les podra


agrupar bajo el nombre de ADICIN. As, cada vez
que el traductor se encontrara con ADICIN como
parte del programa fuente, la expandira para
producir los tres renglones anteriores

Macroprocesamiento: sustitucin textual de


smbolos de un tipo con smbolos de otro.
Un macroprocesador, es un programa que
trabaja con definiciones globales de
renglones o smbolos, llamadas
macrodefiniciones (o macros), que sern
expandidas cuando se las llame para
producir nuevos renglones de texto. Una
macrollamada, es la invocacin de una
macrodefinicin por su nombre para lograr
una sustitucin textual.

Para definir una macro se utilizan las


palabras MACRO y FIN_MACRO, con lo cual
se constituye el cuerpo.
As,
<nombre>: MACRO
rengln 1
rengln 2
...
rengln n
FIN_MACRO

Ejemplo
ADICIN: MACRO
CARGA a
SUMA b
GUARDA c
FIN_MACRO
Donde se requiera llamarla slo se pone su nombre precedido
de %
Ejemplo: %ADICIN

Para lograr que se ejecute un programa


que utiliza macros se requiere de un
programa intermedio
Programa fuente con:
Macrodefiniciones
Macrollamadas
Texto

Programa
Intermedio

Programa fuente con:


Macroexpansiones
Texto

As, un macroprocesador es tambin un


traductor. Para efectuar una
macroexpansin el traductor debe
previamente almacenar las
macrodefiniciones en una tabla de
macros.

! Programa macroprocesador, 1ra. versin


Para cada rengln del programa fuente:
si contiene la palabra MACRO, buscar el nombre en la tabla
de macros
si est, marcar error: nombre de macro repetido
en otro caso, darla de alta en la tabla de macros y
comenzar a copiar los renglones que constituyen el
cuerpo, hasta encontrar la palabra FIN_MACRO
si el rengln contiene una macrollamada (%), buscar el
nombre en la tabla de macros
si no se encuentra, marcar error: macro desconocida
en otro caso, realizar la macroexpansin, copiando al
programa intermedio los renglones almacenados en
la tabla de macros
si el rengln contiene texto copiarlo al programa intermedio
Fin del programa macroprocesador

Ejercicio

Complete el siguiente programa


intermedio que producira el
macroprocesador:

Considere el sig. programa fuente:


--- 1
--- 2
--- 3
--- 4
ALFA: MACRO
--- A1
--- A2
--- A3
--- A4
FIN_MACRO
--- 5
--- 6
BETA: MACRO
--- B1
--- B2
--- B3
FIN_MACRO
--- 7
%BETA
--- 8
--%BETA
%ALFA
--- 10
--- 11
--- 12

1
2
3
4
-------------------------------------

--- 1
--- 2
--- 3
--- 4
-------------------------------------

1
2
3
4
5
6
7
B1
B2
B3
8
9
B1
B2
B3
A1
A2
A3
A4
10
11
12

Macros con parmetros


La macro ADICIN permite efectuar la
operacin c a + b, si ahora se desea realizar
la operacin k l + w, existen dos
posibilidades:

escribir los 3 renglones cambiando las letras (variables)


usar la misma macrodefinicin pero utilizando parmetros

As,
ADICIN: MACRO (3)
CARGA ?1

SUMA ?2

GUARDA ?3
FIN_MACRO

Y se invocara como: %ADICIN (a, b, c) o


como %ADICIN (l, w, k).

Otro ejemplo
!Macro para obtener el
promedio de tres
valores
ADICIN: MACRO (4)
CARGA ?1
SUMA ?2
SUMA ?3
DIV i 3
GUARDA ?4
FIN_MACRO

Que se puede invocar como


%PROM3 (a, b, c, r) como
%PROM3 (alfa, beta, gama,
sigma) y el macroprocesador
las expandira, en el primer
caso como:
CARGA a
SUMA b
SUMA c
DIV i 3
GUARDA r

y en el segundo cmo?:
CARGA alfa
SUMA beta
SUMA gama
DIV i 3
GUARDA sigma

El macroprocesador no ejecuta ninguna


instruccin del programa fuente, simplemente
reemplaza texto por otro.
Para que un macroprocesador pueda
manejar parmetros requiere guardarlos
temporalmente y efectuar la correspondencia
entre los parmetros ficticios (tambin
llamados argumentos) y los parmetros
reales. Por ejemplo, los argumentos estn
representados por ?1, ?2, ?3, ?4, mientras
que los reales como a,b,c,r alfa, beta,
gama, sigma.
Al momento de la macrollamada debe
simplemente colocar los parmetros reales
en sus correspondientes lugares marcados
como ?n dentro del cuerpo de la macro.

Lenguaje ensamblador
Macros

Macroensamblador

Todos los ensambladores comerciales en realidad


son macroensambladores.

Macroensamblador

Programa
Fuente

Macroprocesador

CPU

Ensamblador

Memoria

PROGRAMA
%LEER (alfa)
!Lee y almacena el 1er nmero
%LEER (beta) !Lee y almacena el 2do nmero
%LEER (gama) !Lee y almacena el 3er nmero
Cul es la tabla de
%ASIGNA (alfa, max) !Supone 1ro como mximo
smbolos y el cdigo objeto
COMP beta
! compara el mximo con el 2do.
producidos por esta nueva
BR> etiq1
versin?
%ASIGNA (beta, max) !reemplaza 2do com mayor
etiq1: COMP gama ! compara mayor con el 3ro.
!Bsqueda del mximo
ORIGEN 3000
BR> etiq2
alfa: DATO 1
%ASIGNA (gama, max)
! reemplaza 3ro mayor
beta: DATO 1
etiq2: OUT
! muestra el mximo
gama: DATO 1
ALTO
max: DATO 1
FIN

Ejercicio

LEER: MACRO (1)


IN
GUARDA ?1
FIN_MACRO
ASIGNA: MACRO (2)
CARGA ?1
GUARDA ?2
FIN_MACRO

4.2.2 Compiladores e
intrpretes

Objetivo: establecer comunicacin con


la computadora en un lenguaje ms
parecido al nuestro, es decir un
lenguaje con un nivel expresivo ms
alto (lenguaje ms parecido al nuestro).
Solucin: traduccin de lenguaje de
alto nivel expresivo

Lenguaje de
alto nivel

Compilador

Ensamblador

Lenguaje
objeto

Para entender la complejidad


del problema
Suponga que se desea traducir del
espaol al ingls:

la casa azul

traduciendo palabra por palabra:

the house is blue

Sin embargo en general, un diccionario no basta para lograr


una Buena traduccin. Esto se debe a la estructura del
lenguaje, definida por su gramtica, y a un mundo de
significados que no es reducible a un diccionario.

Ejemplos
Sufragio efectivo, no reeleccin
vs.
Sufragio efectivo no, reeleccin

Noam Chomsky estudio las gramticas formales.


Half baked chicken
medio pollo cocido
pollo medio cocido

rboles gramticales

Para poder compilar se requieren de los


siguientes pasos:

Anlisis lexicogrfico
Anlisis sintctico
Anlisis semntico
Generacin y optimizacin de cdigo

Anlisis lexicogrfico
El paso inicial consiste en reconocer los
smbolos, lo cual implica reconocer letras y
palabras. Reconocer significa: buscarlo y
encontrarlo en un diccionario.
Su tarea central consiste en separar los
componentes lxicos (tokens) del conjunto
de smbolos fuente. Un autmata es una
funcin matemtica con capacidad de
reconocer grupos de caracteres que
constituyen un token, o bien marcar un error
si no estn bien construidos.

Anlisis sintctico
Su finalidad es encontrar la estructura
gramatical de la frase formada por los
elementos aislados ya reconocidos. Para lo
cual se crea un programa que trata de
acomodar
estructuras
gramaticales
predefinidas para las frases, guindose de
las palabras que lo componen. Tambin se
les conoce como parsers, y funcionan en
forma ascendente o descendente.
Una frase est compuesta de palabras, que a
su vez estn compuestas de letras. Sin
embargo, las palabras se clasifican en ciertos
tipos gramaticales.

Ejemplo
la casa es azul
la = artculo
casa = sustantivo
es = verbo
azul = adjetivo

<...> smbolos no terminales


... smbolos terminales
liga smbolos no terminales con
miembros derechos que pueden o no
ser terminales. Se lee produce.

y adems, se tienen estructuras ms


complejas como:
<ORACIN> <FRASE NOMINAL> <FRASE VERBAL>
<FRASE NOMINAL> <ARTCULO> <SUSTANTIVO>
<FRASE VERBAL> <VERBO> <ADJETIVO>
<ARTCULO> la
<SUSTANTIVO> casa
<VERBO> es
<ADJETIVO> azul

rbol sintctico

Anlisis semntico
Objetivo: entender el significado de la frase.

Significado directo: la casa es azul


Significado indirecto: la casa es triste

Un compilador averigua si una expresin


dentro de un programa significa algo vlido.
Una vez analizada a fondo la frase, y cuando
se ha determinado su validez lexicogrfica,
sintctica y semntica, se puede traducir.

Generacin y optimizacin de
cdigo
Se divide en dos:

generacin y optimizacin de cdigo intermedio


generacin y optimizacin de cdigo objeto

Ejemplo: c a + b

se realiza el anlisis lexicogrfico, luego el


sintctico para determinar que su estructura
gramatical es:

Un rbol sintctico pide efectuar las


siguientes reglas de generacin de
cdigo intermedio:
1.
2.

+ (x1, a, b)
(c, x1, -)
que indica que operacin se aplica a la
tripleta de elementos que aparecen.

Existe la conveniencia de mantener la


generalidad de las reglas de
traduccin y el manejo de elementos
temporales.

Ejemplo
ca+b
...
c0
d e (a +b)

1. +(x1, a, b)
2. (c, x1, -)
3. (c, 0, -)
4. (x2, e, x1)
5. (d, x2, -)

Se decide si se eliminan o no en una segunda


fase, llamada generacin de cdigo objeto.

Todo compilador, requiere de una


ltima etapa: la optimizacin de
cdigo objeto.

Ejemplo
Programa fuente

Cdigo intermedio

Cdigo objeto

ca+b

+(x1, a, b)
(c, x1, -)

CARGA a
SUMA b
GUARDA x1
CARGA x1
GUARDA c

...

...

...

c0

(c, 0, -)

CARGA i 0
GUARDA c

d e (a +b)

(x2, e, x1)

CARGA e
RESTA x1
GUARDA x2
CARGA X2
GUARDA d

(d, x2, -)

Tarea
1.

Cul es la diferencia entre un compilador y un


intrprete
Describa brevemente las principales caractersticas
de los siguientes lenguajes de programacin:

2.
a.
b.
c.

3.

C/C++
FORTRAN
JAVA

Con la informacin obtenida en 2, escriba un


cuadro comparativo que muestre las diferencias y
similitudes de esos lenguajes de programacin
Describa brevemente las principales caracterstica
de:

4.
a.
b.
c.

Programacin procedural
Programacin orientada a objetos
Programacin declarativa

You might also like