You are on page 1of 17

Definicion de un estructura de Stack

Cuando en un programa se llama a una subrutina, el actual valor del PC


apunta a la siguiente direccin a la instruccin de llamada, es decir
apunta a la direccin donde debe retornar cuando termina de ejecutar
la subrutina.

Una parte de la memoria de acceso aleatorio (RAM) se utiliza como rea


de memoria de pila (STACK). Una Pila de almacenamiento del tipo Stack
es una estructura de tipo LIFO, es decir, una unidad donde los datos a
almacenar son ingresados en forma secuencial pero al retirar los datos el
primero en salir es ltimo en ingresar. Si por ejemplo hay que
interrumpir la operacin rutinaria de un microprocesador para
desempear entretanto una tarea especial (IRQ), se almacenan en dicha
pila determinadas informaciones sobre el estado del programa principal,
por ej: estado del contador del programa principal y los flags.

El Indicador de posicin (Stack Pointer) seala la direccin en la


memoria de pila donde est el tope del Stack, SP apunta a la direccin
del ltimo dato almacenada en el Stack. Tras concluir una subrutina, se
carga desde aqu nuevamente el antiguo valor del contador de programa y
prosigue el programa principal.

microprocesadores, clase N3 1
Estructura del microprocesador Intel 8085

Los Seis Registros generales:


Estos registros pueden utilizarlos el programa como registros
autnomos de 8 bits B, C, D, E, H y L, o bien como registros
dobles de 16 bits (BC, DE y H L).

A travs del multiplexor (selector de registro), posible


transmitir palabras de 8 bits entre el bus de datos interno y la
matriz de registros. Las palabras de 16 bits pueden transmitirse
a travs de la buffer de direcciones.

Toda computadora nicamente puede ejecutar lo que se le


introduzca mediante un programa. Por consiguiente, para disear
el control de una mquina mediante un computador, no slo se
requiere un determinado hardware, sino que tambin
necesitamos un programa (software). En general , en el
desarrollo la parte ms importante corresponde a la redaccin de
los programas. Estos se preparan mediante sistemas de
desarrollo concebidos para este fin.

microprocesadores, clase N3 2
Programa en assembler
ADR CONT LABEL NEM OPER COMENTARIO

0000 ORG 0 ; PROGRAM START ADDRESS


0000 31FF13 LXI SP, RAMAD ; STACK DEFINITION
0003 3E98 MVI A, 98H ; CONTROL WORD FOR 8255,
0005 D317 OUT CONWO
0007 0600 NBU: MVI B, 0 ; RESET COUNTER
0009 DB14 IN LB ; FETCH LIGHT BARRIERS
000B E603 ANI 3 ; MASK D0, D1
000D FE03 CPI 3 ; MEASURING PATH FREE?
000F C20700 JNZ NBU ; NOT BOTH UNBROKEN
0012 DB14 LBU: IN LB
0014 E6 01 ANI 1
0016 C21200 JNZ LBU ; LEFT LB STILL UNBROKEN?
0019 04 RBU: INC B ; INCREMENT COUNTER
001A CD2A00 CALL WAIT ; TIME LOOP (e.g. adjustable to 1 ms)
001D DB14 IN LB
001F E602 ANI 2 ; MASK RIGHT BARRIER
0021 C2100 JNZ RBU ; RIGHT LB UNBROKEN ?
0024 78 MOV A, B
***************************************************************Convert to speed
0025 D315 OUT DISP ; OUTPUT COUNT IN HEX
0027 C30700 JMP NBU ; RETURN TO START PROGRAM
*************************Subroutine time loop (approx 255 x 15 clock cycles)
002A 0EFF WAIT: MVI C, 0FFH ; TIME LOOP
002C OD LOOP: DCR C
002D C22C00 JNZ LOOP
0030 C9 RE T
********************Assignment of values to the symbolic address
0017 CONWO: EQU 17H ; CONTROL PORT 8255
0014 LB: EQU 14H ; INPUT PORT A
0015 DISP: EQU 15H ; OUTPUT PORT B
0013 RAMAD: EQU 13FFH ; HIGHEST RAM ADDRESS, BEGINNING OF STACK
0000 END

microprocesadores, clase N3 3
La primera columna (ADR) representa la primera direccin de
memoria de la fila correspondiente, por ejemplo para la segunda
fila del programa la primera direccin seria: 0000 y para la
tercera fila la primera direccin seria 0003

La segunda columna representa el contenido de la


correspondientes direcciones de memoria, por ejemplo para la
segunda fila el contenido seria 31 FF 13, donde 31 seria el
contenido de la celda $0000 de memoria , FF el contenido de la
celda 0001 y 13 el contenido de la celda 0002.Consecuentemente
la tercera fila se inicia en la siguiente direccin es decir la 0003.

La tercera columna es opcional, en ella se definen los label o


rtulos del programa, un label representa con un nombre
simblico de una parte del programa, es til para describir un
punto del programa y referenciarlo mediante un nombre y no una
direccin cuando el programa necesite por ejemplo saltar a una
posicin arbitraria. En la definicin de un label se pueden usar
letras y nmeros, pero el primer carcter debe ser una letra. En
el programa el primer label definido es NBU y es referenciado
en instruccin de la direccin 000F, JNZ NBU
microprocesadores, clase N3 4
La cuarta columna representa una instruccin del microprocesador, la
instruccin es representada por un NEMONICO, es decir una
abreviacin del nombre del la instruccin, por ejemplo la tercer fila
tiene el nemnico MVI, que es una abreviacin de MoVe Inmediate. El
conjunto de nemnicos de las instrucciones posibles (cada instruccin
tiene uno) para un microprocesador es definido por el fabricante del
micro.

En la quinta columna se colocan los operandos de las instrucciones, es


decir los datos que se utilizaran en las instrucciones, una instruccin
puede tener dos operandos (MVI A,98H), un operando (ANI 3) o
ningn operando (RET), algunas instrucciones tienen un operando
tcito que es el registro A (Acumulador), por ejemplo CPI 3.

La sexta columna es opcional, y en ella se colocan los comentarios


que documentan el programa, el documentar exhaustivamente los
programa es una buena prctica.

microprocesadores, clase N3 5
Programacin en Assembler

Un programa ASSEMBLER realiza una traduccin de los nemonicos


a su equivalente de cdigo binario, tambin llamado cdigo de
mquina, esta traduccin es uno a uno, es decir, para cada
nemonico existe un valor binario que lo representa, este cdigo
nico asociado a la instruccin se conoce como OPCODE. En la
instruccin de la direccin 0006, la instruccin es ANI y el
opcode es 06H, esto se puede verificar puesto que la misma
instruccin est en la direccin 001FH, el valor del segundo byte
de la instruccin es 02H y es la representacin binario del valor
del operando.

microprocesadores, clase N3 6
Ciclos de un microprocesador
Bus de datos interno, 8 bits

8 8 Cuando se inicializa
Oe
8 Registro de Ld
Oe
Ld B (reset) un micro el PC
toma el valor cero,
Registro
A Lo Ld Auxiliar Intrucciones
Oe
Ld C
Oe Oe

entonces, la primera
FLAGS Ld D
Ld
Decodificador Oe
de instrucciones E

instruccin que se
Ld
Z P CY y control del ciclo
Oe
de mquina H
8 Ld

ejecutara ser aquella


ALU
Oe
8 Ld L 8

Ld
Oe Ld

SPH
Oe Ld

SPL
almacenada en la
Oe
direccin de memoria
cero. El contenido de la
16
8
Ld Oe Ld Oe Ld

PCH PCL
memoria cero es el
Opcode de la primera
Oe

16

instruccin que se
8
Ld Oe Ld

ejecutar
Counter Up Down

Oe

16

Control de tiempo y de ejecucin Bufer de direccin Bufer de datos

8
16
INT MEMW MEMR IOW IOR
Bus de Control Bus de direcciones Bus de datos

microprocesadores, clase N3 7
Estructura de un microprocesdor
Ciclos de Fetch y ejecucin
La ejecucin de una instruccin se divide en un ciclo de Fetch y un
ciclo de ejecucin, por la tanto, la ejecucin de un conjunto de
instrucciones (un programa), seria una larga secuencia de: un ciclo
de fetch seguido por un ciclo de ejecucin
Instruccin i-1 Instruccin i Instruccin i+1 Instruccin i+2
FETCH i-1 EJECU i-1 FETCH i EJECU i FETCH i+1 EJECU i+1 FETCH i+2 EJECU i+2

Durante el ciclo de Fetch la CPU determina que instruccin debe


ejecutar, esto se logra al almacenar en el registro RI de la CPU el
Opcode de la instruccin que corresponde ejecutar, por lo tanto el
registro RI, es actualizado en forma peridica con los Opcode de las
instrucciones que se ejecutan. Todas las secuencias de seales
necesarias para realizar el Fetch son generadas en forma automtica
por la unidad de control de la CPU

microprocesadores, clase N3 8
Al inicio del fetch el PC (Program Counter) apunta a la
direccin de memoria donde el est el Opcode de la
instruccin que corresponde ejecutar, por lo tanto, durante el
Fetch el contenido del registro PC es usado para direccionar
la memoria y obtener el Opcode, al final del Fetch el valor del
PC es incrementado en el nmero de Bytes que tiene la
instruccin.
Durante el ciclo de ejecucin el contenido del RI (Opcode) es
alimentado a la unidad de decodificacin, la salida de esta
unidad alimenta a la unida de control, la salida de las unidad de
control son seales lgicas individuales de control, todas las
transferencias de informacin entre registros y/o buses estn
sincronizadas por una seal de control. En el diagrama interno
del micro las seales de control estn representadas con
lneas azules.

microprocesadores, clase N3 9
La unidad de control de tiempo y ejecucin se encarga , junto con
seales de temporizacin, de que las operaciones se efecten en el
orden debido. Tras recibirse una instruccin y haberse
decodificado, la lgica de control dispone que se inicie la
operacin requerida en cada caso enviando las seales
correspondientes a unidades situadas dentro y fuera del
microprocesador.

Un aspecto muy importante a considerar es que la unidad de


control responde a dos fuentes de informacin, la primera es la
informacin de la decodificacin del Opcode, sta informacin es
sincrnica, es decir, responde al reloj maestro del micro, la
segunda fuente de informacin son las seales de status externa
al microprocesador , algunas de ellas son sincronizadas al reloj,
otras son asincrnicas como por ejemplo las IRQ. Pero todas las
salidas de esta unidad (seales de control), estn sincronizada al
reloj del sistema.

microprocesadores, clase N3 10
Programa en assembler
ADR CONT LABEL NEM OPER COMENTARIO

0000 ORG 0 ; PROGRAM START ADDRESS


0000 31FF13 LXI SP, RAMAD ; STACK DEFINITION
0003 3E98 MVI A, 98H ; CONTROL WORD FOR 8255,
0005 D317 OUT CONWO
0007 0600 NBU: MVI B, 0 ; RESET COUNTER
0009 DB14 IN LB ; FETCH LIGHT BARRIERS
000B E603 ANI 3 ; MASK D0, D1
000D FE03 CPI 3 ; MEASURING PATH FREE?
000F C20700 JNZ NBU ; NOT BOTH UNBROKEN
0012 DB14 LBU: IN LB
0014 E6 01 ANI 1
0016 C21200 JNZ LBU ; LEFT LB STILL UNBROKEN?
0019 04 RBU: INC B ; INCREMENT COUNTER
001A CD2A00 CALL WAIT ; TIME LOOP (e.g. adjustable to 1 ms)
001D DB14 IN LB
001F E602 ANI 2 ; MASK RIGHT BARRIER
0021 C2100 JNZ RBU ; RIGHT LB UNBROKEN ?
0024 78 MOV A, B
***************************************************************Convert to speed
0025 D315 OUT DISP ; OUTPUT COUNT IN HEX
0027 C30700 JMP NBU ; RETURN TO START PROGRAM
*************************Subroutine time loop (approx 255 x 15 clock cycles)
002A 0EFF WAIT: MVI C, 0FFH ; TIME LOOP
002C OD LOOP: DCR C
002D C22C00 JNZ LOOP
0030 C9 RE T
********************Assignment of values to the symbolic address
0017 CONWO: EQU 17H ; CONTROL PORT 8255
0014 LB: EQU 14H ; INPUT PORT A
0015 DISP: EQU 15H ; OUTPUT PORT B
0013 RAMAD: EQU 13FFH ; HIGHEST RAM ADDRESS, BEGINNING OF STACK
0000 END

microprocesadores, clase N3 11
Ejecucin de un programa
0000 ORG 0 ; PROGRAM START ADDRESS
0000 31FF13 LXI SP, RAMAD ; STACK DEFINITION
0003 3E98 MVI A, 98H ; CONTROL WORD FOR 8255,

COUNTER=$0000, PC=$0000, SP=$0000, A=$00, B=$00, C=$00, E0=$00, D=$00, H=$00, L=$00

Ejecucin de la instrucin $0000 LXI SP,

Ciclo de Fetch de la instruccin $0000 LXI SP,


Buffer_direcc PC ($0000)
Bus_ADR Buffer_direcc ($0000)
BUS_CONTROL MEMR
BUS_DATA MEM[BUS_ADR] ( $31) ; Lectura de memoria
BUS_INT BUS_DATA ( $31)
RI BUS_INT ( $31) ; Opcode de LXI SP, ( $31) en RI
Counter PC ($0000)
Counter Counter+#Bytes_INT; incremento en #Bytes ( Decodif de RI )
PC Counter ($0003)
Counter Counter-#Bytes_INT ; $0003 - 3
Counter Counter+1 ; $0000+1

COUNTER=$0001, PC=$0003, SP=$0000, A=$00, B=$00, C=$00, E0=$00, D=$00, H=$00, L=$00

Al final del Fetch, el PC ( $0003) apunta a la direccin de memoria que tiene el Opcode ( $3E) de la
siguiente Instruccin, por su parte el Counter_UD ($0001) apunta al segundo Byte de la actual
instruccin ( $FF).
microprocesadores, clase N3 12
Ciclos de FETCH

El nmero de bytes de en
Bus de datos interno, 8 bits

que se incrementa el PC,


8 8

es determinado por la
Oe
Oe Ld B
8 Registro de Ld
Registro
A Oe

unidad de decodificacin
Lo Ld Auxiliar Intrucciones C
Ld

Oe Oe

del RI.
FLAGS Ld D
Ld
Decodificador Oe
de instrucciones Ld E
Z P CY y control del ciclo
Oe
de mquina H
8 Ld

El ciclo de Fetch es nico


ALU
Oe
8 Ld L 8

Ld
Oe Ld Oe Ld
e independiente de la
SPH SPL
instruccin que se
ejecute.
Oe

16
8
Ld Oe Ld Oe Ld

PCH PCL

Oe

16
8
Ld Oe Ld

Counter Up Down

Oe

16

Control de tiempo y de ejecucin Bufer de direccin Bufer de datos

8
16
INT MEMW MEMR IOW IOR
Bus de Control Bus de direcciones Bus de datos

microprocesadores, clase N3 13
Estructura de un microprocesdor
Configuracin de los mdulos de un microcomputador
Lnea de Interrupcin

Microprocesador
ROM RAM

Bus de datos
Bus de Control

Bus de Direcciones

IRQ 0 Interrupcin del


Mdulo Perifrico de
Entrada/Salida Programa por
(programable) prioridades
IRQ n

Conexin con la periferia del usuario

microprocesadores, clase N3 14
0000 ORG 0 ; PROGRAM START ADDRESS
0000 31FF13 LXI SP, RAMAD ; STACK DEFINITION
0003 3E98 MVI A, 98H ; CONTROL WORD FOR 8255,

COUNTER=$0001, PC=$0003, SP=$0000, A=$00, B=$00, C=$00, E0=$00, D=$00, H=$00, L=$00

Ciclo de ejecucin de la instruccin $0000 LXI SP,


Buffer_direcc Counter ($0001)
Bus_ADR Buffer_direcc ($0001)
BUS_CONTROL MEMR
BUS_DATA MEM[BUS_ADR] ( $FF) ; Lectura de memoria
BUS_INT BUS_DATA ($FF)
SPL BUS_INT ( $FF) ; 2 Byte en SPL
Counter Counter+1 ; $0001+1
Buffer_direcc Counter ($0002)
Bus_ADR Buffer_direcc ($0002)
BUS_CONTROL MEMR
BUS_DATA MEM[BUS_ADR] ( $13) ; Lectura de memoria
BUS_INT BUS_DATA ( $13)
SPH BUS_INT ( $13) ; 3 Byte en SPH SP= $13FF

COUNTER=$0002, PC=$0003, SP= $13FF, A=$00, B=$00, C=$00, E0=$00, D=$00, H=$00, L=$00

Al concluir el ciclo de ejecucin de la instruccin $0000 el SP es igual a $13FF( RAMAD), es decir se


carg el SP con el contenido del segundo y tercer Byte de la instruccin. La ejecucin de la
instruccin $0000 a concluido , el PC ($0003) apunta a la siguiente instruccin a ejecutar.

microprocesadores, clase N3 15
0000 ORG 0 ; PROGRAM START ADDRESS
0000 31FF13 LXI SP, RAMAD ; STACK DEFINITION
0003 3E98 MVI A, 98H ; CONTROL WORD FOR 8255,
0005 D317 OUT CONWO
0007 0600 NBU: MVI B, 0 ; RESET COUNTER

COUNTER=$0002, PC=$0003, SP=$13FF, A=$00, B=$00, C=$00, E0=$00, D=$00, H=$00, L=$00

Ejecucin de la instrucin $0003 MVI A,

Ciclo de Fetch de la instruccin $0003 MVI A,

Buffer_direcc PC ( $0003)
Bus_ADR Buffer_direcc ($0003)
BUS_CONTROL MEMR
BUS_DATA MEM[BUS_ADR] ( $3E ) ; Lectura de memoria
BUS_INT BUS_DATA ( $3E)
RI BUS_INT ( $3E) ; Opcode de MVI A ( $3E) en RI
Counter PC ($0003)
Counter Counter+#Bytes_INT; incremento en #Bytes ( Decodif de RI )
PC Counter ($0005)
Counter Counter-#Bytes_INT ; $0005 - 2
Counter Counter+1 ; $0003+1

COUNTER=$0004, PC=$0005, SP=$13FF, A=$00, B=$00, C=$00, E0=$00, D=$00, H=$00, L=$00

microprocesadores, clase N3 16
0000 ORG 0 ; PROGRAM START ADDRESS
0000 31FF13 LXI SP, RAMAD ; STACK DEFINITION
0003 3E98 MVI A, 98H ; CONTROL WORD FOR 8255,
0005 D317 OUT CONWO
0007 0600 NBU: MVI B, 0 ; RESET COUNTER

COUNTER=$0004, PC=$0005, SP=$13FF, A=$00, B=$00, C=$00, E0=$00, D=$00, H=$00, L=$00

Ciclo de ejecucin de la instruccin $0003 MVI A,


Buffer_direcc Counter ($0004)
Bus_ADR Buffer_direcc ($0004)
BUS_CONTROL MEMR
BUS_DATA MEM[BUS_ADR] ( $98) ; Lectura de memoria
BUS_INT BUS_DATA ($98)
AL BUS_INT ( $98) ; 2 Byte en registro A

COUNTER=$0004, PC=$0005, SP=$13FF, A= $98, B=$00, C=$00, E0=$00, D=$00, H=$00, L=$00

Al concluir la ejecucin de la instruccin $0003 el reg. A es igual a $98), es decir se carg en A el


contenido del segundo Byte de la instruccin. , el PC (0005 ) apunta a la siguiente instruccin a
ejecutar.

microprocesadores, clase N3 17