Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Microcomputadoras Al Detalle PDF
Microcomputadoras Al Detalle PDF
MICROPROCESADORES Y MICROCOMPUTADORAS
2.
3.
4.
5.
Direccionamiento Inmediato
Direccionamiento a Registro
Direccionamiento Directo
Direccionamiento de Registro Indirecto
Direccionamiento de Registro Indirecto con Desplazamiento
Direccionamiento de Registro Indirecto con un Registro Base y un Registro
ndice
Direccionamiento de Registro indirecto con un registro base, un registro ndice y un registro constante
Cdigo Objeto del 8086/8088
Bit W y Campo REG
Bit D, MOD y R/M
Cdigo Objeto para el Uso de Registro Base y Registro ndice
Sumario del Cdigo Objeto
Interrupciones de los Servicios Bsicos de Entrada y Salida (BIOS, por sus siglas en ingls)
Directiva: .DATA
Directiva: .MODEL SMALL
Directiva: .DOSSEG
3 -1
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
5.6
5.7
5.8
5.9
5.10
5.11
5.12
5.13
5.14
5.15
5.16
5.17
5.18
5.19
5.20
5.21
5.22
5.23
5.24
5.25
Ejercicio 1
Ejercicio 2
Ejercicio 3
Ejercicio 4
Ejercicio 5
Ejercicio 6
Ejercicio 7
Ejercicio 8
Ejercicio 9
Ejercicio 10
Ejercicio 11
Ejercicio 12
Ejercicio 13
Ejercicio 14
Ejercicio 15
Ejercicio 16
Ejercicio 17
Ejercicio 18
Ejercicio 19
Ejercicio 20
3 -2
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
AX
BX
CX
DX
DS
ES
SS
CS
BP
SI
DI
SP
IP
F
(acumulador)
(registro base)
(registro contador)
(registro de datos)
(registro del segmento de datos)
(registro del segmento extra)
(registro del segmento de pila)
(registro del segmento de cdigo)
(registro de apuntadores base)
(registro ndice fuente)
(registro ndice destino)
(registro del apuntador de pila)
(registro del apuntador de siguiente instruccin)
(registro de banderas)
3 -3
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
samblador. Puesto que dicha interfaz se basa en el concepto de la pila BP, nos permite
acceder parmetros pasados sin alterar el registro de segmento SS. Los registros SI y
DI son tiles para manejar bloques de cadenas en memoria, siendo el primero el ndice
fuente y el segundo el ndice destino. En otras palabras, SI representa la direccin
donde se encuentra la cadena y DI la direccin donde ser copiada.
El registro SP apunta a un rea especfica de memoria que sirve para almacenar
datos bajo la estructura LIFO (ltimo en entrar, primero en salir), conocida como pila
(stack ) El registro IP (instruction pointer) apunta a la siguiente instruccin que ser
ejecutada en memoria.
A continuacin se describe el significado de cada bit del registro F (banderas)
Todas las banderas apagadas:
NV
UP
DI
PL
NZ
NA
PO
NC
ZR
AC
PE
CY
DN
EI
NG
NV = no hay desbordamiento
OV = S lo hay
UP = hacia adelante
DN = hacia atrs
DI = desactivadas
EI = activadas
PL = positivo
NG = negativo
NZ = no es cero
ZR = s lo es
NA = no hay acarreo auxiliar
AC = hay acarreo auxiliar
PO = paridad non
PE = paridad par
NC = no hay acarreo
CY = s lo hay
3 -4
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
AF
Llevar auxiliar = 1, indica que hubo llevar del nibble (4 bits) 0 al nibble 1. O un
pedir prstamo del nibble alto al nibble bajo.
Llevar = 1, cuando ha ocurrido un llevar o pedir prstamo del resultado (8 o
16 bits)
Sobreflujo = 1, indica que ha ocurrido un sobreflujo aritmtico. Esto significa
que el tamao del resultado excede la capacidad de ALMACENAMIENTO del destino y el dgito significativo se perdi.
Signo. Esta bandera se activa cuando el bit ms significativo del resultado es 1.
Ya que los nmeros binarios negativos son representados usando notacin C2,
SF refleja el signo del resultado:
0 indica +
1 indica Paridad. Cuando esta bandera est activa, el resultado de la operacin tiene un
nmero par de unos. Esta bandera se usa para verificar errores en la transmisin.
Cero. Esta bandera se activa cuando el resultado de la operacin es cero.
CF
OF
SF
PF
ZF
bandera de direccin
bandera de interrupcin
bandera de trampa
MOV
XCHG
IN
OUT
XLAT
LEA
LDS
LES
LAHF
SAHF
transfiere
intercambia
entrada
salida
traduce usando una tabla
carga la direccin efectiva
carga el segmento de datos
carga el segmento extra
carga los indicadores en AH
guarda AH en los indicadores
PUSH FUENTE
POP DESTINO
(sp) fuente
destino (sp)
3 -5
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
INC
DEC
LOOP
LOOPZ ,LOOPE
LOOPNZ,LOOPNE
JCXZ
incrementar
decrementar
realizar un bucle
realizar un bucle si es cero
realizar un bucle si no es cero
salta si CX es cero
TEST
CMP
JMP
JE, JZ
JNE, JNZ
JS
JNS
JP, JPE
JNP, JOP
JO
JNO
JB, JNAE
JNB, JAE
JBE, JNA
JNBE, JA
JL, JNGE
JNL, JGE
JLE, JNG
JNLE, JG
verifica
compara
salta
salta si es igual a cero
salta si no igual a cero
salta si signo negativo
salta si signo no negativo
salta si paridad par
salta si paridad impar
salta si hay capacidad excedida
salta si no hay capacidad excedida
salta si por abajo (no encima o igual)
salta si no est por abajo (encima o igual)
salta si por abajo o igual (no encima)
salta si no por abajo o igual (encima)
salta si menor que (no mayor o igual)
salta si no menor que (mayor o igual)
salta si menor que o igual (no mayor)
salta si no menor que o igual (mayor)
CALL
RET
llamada a subrutina
retorno al programa o subrutina que llam
3 -6
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
Instrucciones Aritmticas.
Estas instrucciones son las que realiza directamente el 8086/8088
a.
Grupo de adicin:
b.
SUB
SBB
AAS
DAS
divisin
divisin entera
ajuste ASCII para la divisin
Conversiones:
CBW
CWD
NEG
f.
multiplicacin
multiplicacin entera
ajuste ASCII para la multiplicacin
Grupo de divisin:
DIV
IDIV
AAD
e.
resta
resta con acarreo negativo
ajuste ASCII para la resta
ajuste decimal para la resta
Grupo de multiplicacin:
MUL
IMUL
AAM
d.
suma
suma con acarreo
ajuste ASCII para la suma
ajuste decimal para la suma
Grupo de sustraccin:
c.
ADD
ADC
AAA
DAA
Tratamiento de cadenas:
Permiten el movimiento, comparacin o bsqueda rpida en bloques de datos:
MOVC
MOVW
CMPC
CMPW
SCAC
SCAW
LODC
LODW
STOC
STOW
3 -7
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
REP
CLD
STD
repetir
poner a 0 el indicador de direccin
poner a 1 el indicador de direccin
Instrucciones Lgicas.
Son operaciones bit a bit que trabajan sobre octetos o palabras completas:
NOT
AND
OR
XOR
negacin
producto lgico
suma lgica
suma lgica exclusiva
SHL, SAL
SHR
SAR
ROL
ROR
RCL
RCR
CLC
STC
Instrucciones de Pila.
Una de las funciones de la pila del sistema es la de salvaguardar (conservar) datos (la
otra es la de salvaguardar las direcciones de retorno de las llamadas a subrutinas):
PUSH
POP
PUSHF
POPF
introducir
extraer
introducir indicadores
extraer indicadores
NOP
HLT
WAIT
LOCK
ESC
no operacin
parada
espera
bloquea
escape
3 -8
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
Instrucciones de Interrupcin.
STI
CLI
INT
INTO
IRET
2.
3.
Las comparaciones con signo van de acuerdo con la interpretacin que usted le
quiera dar a los bytes o palabras de su programa. Por ejemplo, suponga que tiene un
3. LENGUAJE ENSAMBLADOR DEL MICROPROCESADOR
LUIS URIETA PREZ Y PABLO FUENTES RAMOS
3 -9
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
byte cuyo valor es 11111111 en binario y que desea compararlo con otro cuyo valor es
00000000. Es 11111111 mayor que 00000000? S y NO, eso depende de la interpretacin que usted le quiera dar. Si trabaja con nmeros enteros sin signo S LO SER,
pues 255 es mayor que 0. Por el contrario, si tiene signo entonces SER MENOR puesto
que 1 es siempre menor que 0.
Lo anterior lleva a seleccionar las instrucciones de comparacin y de salto de
acuerdo con la interpretacin que se les d a los bytes o palabras; reflexione sobre este
punto.
Los saltos condicionales se encuentran limitados al rango de 128 a +127 bytes
como mxima distancia, ya sea adelante o hacia atrs. Si desea efectuar un salto a
mayores distancias es necesario crear una condicin mixta entre saltos condicionales y
no condicionales.
Iteraciones.
Con los saltos condicionales y no condicionales se pueden crear estructuras de
iteracin bastante complejas, aunque existen instrucciones especficas para ello tal
como loop.
Esta instruccin es muy til cuando se va a efectuar cierto bloque de instrucciones un nmero finito de veces. He aqu un ejemplo:
CUENTA:
.
..
MOV
ITERA:
.
.
LOOP
DW, 100
CX, CUENTA
ITERA
El bloque de instrucciones que se encuentra entre la etiqueta ITERA y la instruccin loop ser ejecutado hasta que el registro CX sea igual a 0. Cada vez que se ejecuta la instruccin loop, el registro CX es decrementado en 1 hasta llegar a 0. Esta instruccin tiene la limitante de que debe encontrarse en el rango de +128 a 127 (mximo nmero de bytes entre ITERA y loop)
Iteraciones condicionales
Existen otras dos variantes de la instruccin loop. Las instrucciones loope y
loopz decrementan CX e iteran si CX = 0 y ZF = 1, mientras que loopne y looppnz
iteran si CX 0 y ZF 0. Un punto importante es que al decrementarse CX las banderas NO RESULTAN AFECTADAS . Por lo tanto, le corresponde a usted afectarlas dentro del
bloque de iteracin.
3 -10
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
Letras de la A a la Z
Nmeros del 0 al 9
Los smbolos especiales: - $ . @ %
3 -11
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
Direccin de 20 bits
Bus de direccin
Del sistema
IP
Cada direccin generada por el 8086/8088 usa uno de los 4 registros de segmento. Este registro de segmento es recorrido 4 bits hacia la izquierda antes de ser
sumado al offset.
La instruccin del CPU especifica cules registros internos se usan para generar
el offset.
Vamos a ver los diferentes modos de direccionamiento tomando como ejemplo
la instruccin MOV.
Instruccin MOV
Transfiere un byte desde el operando fuente al operando destino. Tiene el siguiente formato:
MOV
destino, fuente
Direccionamiento Inmediato
El operando fuente aparece en la instruccin. Un ejemplo, es el que mueve un valor
constante a un registro interno.
MOV
AX, 568
Direccionamiento a Registro
Indica que el operando a ser usado est contenido en uno de los registros internos de
propsito general del CPU. En el caso de los registros AX, BX, CX o DX los registros
pueden ser de 8 a 16 bits
3 -12
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
Ejemplos:
MOV
MOV
; AX BX
; AL BL
AX, BX
AL, BL
Cuando usamos direccionamiento a registro, el CPU realiza las operaciones internamente, es decir, no se genera direccin de 20 bits para especificar el operando fuente.
Direccionamiento Directo
Especifica en la instruccin la localidad de memoria que contiene al operando. En este tipo de direccionamiento, se forma una direccin de 20 bits.
Ejemplo:
MOV
CX, COUNT
COUNT = CONSTANTE
+
DIRECCIN DEL SISTEMA DE 20 BITS
Cuando accedamos datos, el registro DS se usa con un offfset para calcular la direccin de 20 bits,
ste es el segmento por omisin. Puede ser invalidado por usar un prefijo de segmento en la instruccin.
Ejemplo:
MOV
Este es el segmento por omisin que se usa. Sin embargo, cualquiera de los 4 segmentos
puede usarse. Esto se efecta especificando el registro apropiado en la instruccin.
Por ejemplo, suponga que deseamos usar el registro ES en lugar del DS:
MOV
3 -13
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
AX, [SI]
El valor de 16 bits contenido en el registro SI debe ser el offset usado para calcular la direccin de 20 bits.
Otra vez, debe usarse un registro de segmento para generar la direccin final. El valor de
16 bits en SI se combina con el segmento apropiado para generar la direccin.
Direccionamiento de Registro Indirecto con Desplazamiento
Este tipo de direccionamiento incluye a los dos modos de direccionamiento anteriores. La
direccin offset de 16 bits se calcula sumando el valor de 16 bits especificado en un registro interno y una constante.
Por ejemplo, si usamos el registro interno DI y el valor constante (desplazamiento), donde COUNT ha sido previamente definido, el nemotcnico para esta construccin es:
MOV
Si:
COUNT =
DI =
0378H
04FAH
0872H
[BP] [DI], AX
AX, [BX] [SI]
; el offset es BP + DI
; el offset es BX + SI
0367H
7890H
0012H
7C09H
3 -14
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
Como programador, debes escribir los nemotcnicos. El cdigo objeto es generado por la computadora (son los bytes que ejecuta el CPU) Con el conjunto de instrucciones del 8086/8088, cada tipo de modo de direccionamiento puede requerir un
nmero diferente de bytes. En los ejemplos siguientes proporcionaremos el nmero de
bytes requeridos por cada modo de direccionamiento.
Bit W y campo REG
La instruccin MOV
AX, 568H
Indica mover inmediatamente al registro interno AX el valor 568H. El registro interno puede ser de 1 byte o de una palabra. Esta instruccin requiere 2 o 3 bytes, como se indica
en la Figura C.
1011 W REG
1 BYTE
DATA
1 o 2 BYTES
El primer byte contiene los bits ms significativos (MSB) como 1011. El prximo bit es W.
W indica:
1 para word
0 para byte
REGISTRO DE REGISTRO
16 BITS
DE 8 BITS
AX
AL
CX
CL
DX
DL
BX
BL
SP
AH
BP
CH
SI
DH
3 -15
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
REG
111
REGISTRO DE REGISTRO
16 BITS
DE 8 BITS
DI
BH
Campo DATA. Si el registro de destino es de 1 byte, el dato debe estar en el segundo byte de la instruccin. Si el destino es de una palabra, el segundo byte de la instruccin son
los 8 bits menos significativos (lsb) del dato, el tercer byte de la instruccin son los 8 bits
ms significativos (MSB) del dato. La siguiente tabla, muestra los nemotcnicos 2 o 3
bytes
NEMOTCNICO
CDIGO OBJETO
MOV AX, 568 Instruccin de 3 bytes
B8
68
05
MOV
AL, 56
instruccin de 2 bytes
B0
56
AX, BX
Esta instruccin es de 2 bytes porque no nos referimos a memoria. Los bytes aparecern
como lo muestra la Figura E:
1000 10 DW
1er BYTE
2do BYT E
FIGURA E.
El primer byte contiene los 2 bits menos significativos como DW. El bit W es para word=1
o para byte=0. La D es para indicar si el dato ser almacenado en el operando especificado por los campos MOD y R/M (D = 0) o si va a ser almacenado en el registro especificado por el campo REG (D = 1)
La Figura F muestra las asignaciones para MOD y R/M. Note en la descripcin de
MOD=11, el campo R/M es codificado con un formato de registro. Este formato se mostr
en la Figura D.
3 -16
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
Para esta instruccin deseamos almacenar el dato en el registro AX. Por lo tanto el bit D
= 0. Esto significa que el dato debe ser almacenado en la localidad especificada por los
campos MOD y R/M. Por lo tanto, MOD = 11. El campo R/M = 000, indicando que el registro AX es el destino para los datos. El campo REG para el segundo byte de datos es 011
indicando que el registro BX es el registro fuente a ser utilizado. El segundo byte de la
instruccin es 11 011 000 = D8. Por lo que el cdigo objeto para la instruccin es:
MOV
AX, BX
es 89
D8
Add LOW
3er. BYTE
Add HIGH
4o. BYTE
3 -17
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
El primer byte de la Figura G, debe tener el bit D=1. Esto es debido a que el destino para
el dato debe ser especificado por el campo REG en el segundo byte. El bit W=1. porque
es una transferencia de palabra. El primer byte es:
10001011 = 8B
En el segundo byte, ya que estamos usando una constante que requiere 16 bits, el campo
MOD = 10. Refiriendo a la Figura F, sta indica que el desplazamiento debe ser formateado en 2 bytes y deben seguir a este segundo byte. El prximo campo para el segundo
byte es el campo de registro (REG) Ya que debemos usar el registro CX, este valor debe
ser 001 (esto se obtiene de la Figura D)
Finalmente, el campo R/M. Ya que el campo MOD<> 11, este campo debe especificar
cul registro base y cul registro de ndice estn siendo usados para generar la direccin
offset de 16 bits. En nuestro caso, usamos el campo [BX + SI + DESPLAZAMIENTO]
8BH
88H
45H
03H
FUNCIN INT 21
(AH)=1
Ejemplo:
MOV
INT
(AH)=2
AH, 1
21h
3 -18
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
DL, 40
AH, 2
21h
; carcter a desplegar
; aparece en la posicin corriente del cursor
; el carcter contenido en DL
CURSOR
(AH)=8
DL, 7
AH, 02
21h
21h
; DL = campana
; 1 segundo
; 1 segundo
(AH)=9
AH, 08
21h
;AL = carcter
Despliega en la pantalla la cadena apuntada por el par de registros DS:DX. Debemos marcar el fin de la cadena con el carcter $
DS:DX apuntan a la cadena que se va a desplegar
(AH)=0A h
3 -19
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
(AH)=25h
(AH)=35h
(AH)=4Ch
SALIDA AL DOS
Retorna al DOS. Trabaja para ambos archivos *.com y *.Exe. Recuerde que INT
20h trabaja solamente para archivos *.com
(AL) = cdigo de retorno, normalmente activo a 0, pero se puede activar a cualquier otro nmero y usar los comandos del DOS, IF y ERRORLEVEL, para detectar errores
PROGRAMACIN EN LENGUAJE ENSAMBLADOR
Los archivos deben terminar con la extensin ASM. Las letras minsculas trabajan igual que las maysculas, pero durante el presente trabajo se utilizarn maysculas para evitar confusin entre el nmero 1 y la minscula l, el 0 (cero) y la letra O.
Considrense las siguientes lneas de un programa:
.MODEL SMALL
.CODE
MOV
MOV
INT
INT
AH, 2H
DL, 2AH
21H
20H
END
Una H despus de cada nmero indica al ensamblador que los nmeros son
hexadecimales. Recuerde que DEBUG asume que todos los nmeros son hexadecimales pero el ensamblador asume que todos los nmeros son decimales.
El ensamblador puede confundir nmeros con etiquetas, para evitar esto coloque
un 0 (cero) antes de un nmero hexadecimal que inicie con una letra.
Ejemplo:
MOV
MOV
DL, ACH
DL, 0ACH
; AC es una etiqueta
; AC es un nmero hexadecimal
3 -20
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
El ensamblador crea un archivo intermedio *.OBJ el cual contiene nuestro programa e informacin adicional usada por otro programa llamado LINKER <encadenador>.
Encadenar al archivo *.OBJ
A>LINK ARCHIVO;
Microsoft Overlay Linker Version 3.64
copyright microsoft corp 1983-1988. All rights reserved
LINK : warning L4021: No Stack Segment
Hemos creado nuestro archivo *.EXE. Ahora s necesitamos crear nuestra versin *.COM. El archivo EXE2BIN.EXE del DOS convierte un archivo EXE a un archivo
BIN.
A>EXE2BIN ARCHIVO ARCHIVO.COM
A>
3. LENGUAJE ENSAMBLADOR DEL MICROPROCESADOR
LUIS URIETA PREZ Y PABLO FUENTES RAMOS
3 -21
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
B402
B22A
CD21
CD20
MOV
MOV
INT
INT
AH, 02
DL, 2A
21
20
Note que las dos primeras y la ltima lnea no aparecen en el listado. Se eliminan en la versin final del lenguaje de mquina porque son directivas y stas son para
documentacin. El ensamblador toma en cuenta esta documentacin a costa de ms
lneas de cdigo.
Comentarios. Para comentar una lnea ponga el ;. Todo lo que est despus del ; el ensamblador lo considera como comentario.
Etiquetas. Pueden tener hasta 31 caracteres y pueden contener letras, nmeros y cualesquiera de los siguientes smbolos:
.
@
_
$
interrogacin
punto
arroba
subrayado
dlar
Las etiquetas no deben iniciar con un nmero decimal y el punto se utiliza solamente como el primer carcter.
Una de las principales diferencias entre el DEBUG y el ensamblador reside en las
etiquetas. Recuerde que con DEBUG debemos hacer el clculo nosotros. El ensamblador refiere a etiquetas y l calcula el desplazamiento.
Cuando ponemos : despus de una etiqueta, decimos que la etiqueta es cercana
(NEAR). El trmino NEAR tiene que ver con los segmentos.
Procedimientos en ensamblador
3 -22
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
.MODEL SMALL
.CODE
PRINT _A_J
MOV
MOV
PROC
DL, A
CX, 10
PRINT _LOOP:
CALL WRITE _CHAR
INC
DL
LOOP PRINT _LOOP
MOV AH, ACh
INT
21h
PRINT _A_J
;
;
;
;
imprime carcter
siguiente carcter del alfabeto
continua
retorna al DOS
ENDP
PROC y ENDP son directivas para definir procedimientos. PROC define el inicio y
ENDP define el final.
En este ejemplo, tenemos 2 procedimientos; por lo tanto, necesitamos indicarle al ensamblador cul debe usar como el procedimiento principal (donde debe el microprocesador iniciar la ejecucin de nuestro programa) La directiva END indica al ensamblador
cual es el procedimiento principal. El procedimiento principal puede estar en cualquier
lugar del programa. Sin embargo como estamos tratando con archivos *.COM, debemos
colocar primero el procedimiento principal.
NOTA: Si encuentras algn mensaje de error que no reconozcas, verifica que hayas digitado el programa adecuadamente. Si an falla, consulta el manual del ensamblador
Despus, usa el DEBUG para desensamblar el programa y ver cmo el ensamblador pone los procedimientos juntos.
C> DEBUG PRINT:A_J.COM
PROC
; retorna al DOS
MOV
INT
AH, 4Ch
21h
3 -23
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
PUBLIC
WRITE_HEX
PROC
CX
DX
DH, DL
CX, 4
DL, CX
WRITE_HEX_DIGIT
DL, DH
DL, 0Fh
WRITE_HEX_DIGIT
DX
CX
PUBLIC
WRITE_HEX
ENDP
; es el nibble <10?
; no convierte a letra
; suma 30
;escribe carcter
HEX_LETTER:
ADD DL, A-10
WRITE_DIGIT:
CALL WRITE_CHAR
POP DX
RET
WRITE_HEX_DIGIT
ENDP
PUBLIC
WRITE_CHAR
PROC
AX
AH, 2
21h
AX
ENDP
3 -24
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
END
TEST_WRITE_HEX
En este programa, hay una nueva directiva PUBLIC la cual indica al ensamblador que
genere informacin adicional al LINKER. El LINKER nos permite traer partes separadas
de nuestro programa, ensamblarlas desde diferentes archivos fuente en un solo programa. La directiva PUBLIC informa al ensamblador que el procedimiento nombrado
despus de PUBLIC debe ser hecho pblico o disponible a los procedimientos de otros
archivos.
Esqueleto de un programa en ensamblador
INT
20h
MOV
INT
AH, 4Ch
21h
NOMBRE_PROCEDIMIENTO ENDP
END
Directiva: .DATA
Se considera un programa como SMALL cuando contiene hasta 64K de cdigo y 64K
de datos.
Ya que .DATA y .STACK son datos, se ponen en un solo segmento cuando se usa el
modelo de memoria MODEL SMALL.
DS, SS
_DATA
STACK
DGROUP
3 -25
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
Directiva: .DOSSEG
Causa que el STACK SEGMENT se cargue en memoria despus del DATA SEGMENT; hay una razn para esto. El segmento de datos que creamos tiene datos que
necesitan estar en el archivo *.EXE, as que puedan ser copiados en memoria cuando
nuestro programa est corriendo. De igual forma, el STACK necesita tomar espacio en
memoria, pero la memoria del STACK no necesita estar inicializada (solamente el
SS:SP tiene que activarse)
De esta forma, poniendo el STACK SEGMENT despus del DATA SEGMENT no necesitamos espacio en el disco para el STACK.
La directiva DOSSEG indica al ensamblador que queremos los segmentos de nuestro
programa cargado en un orden especfico (el segmento de cdigo primero y el STACK
al ltimo)
Veamos lo expuesto en un ejemplo:
Obtener la suma de 10 datos y desplegar el resultado en la pantalla.
DOSSEG
.MODEL SMALL
.STACK
. DATA
; asigna un STACK de 1K
PUBLIC DATOSSUM
DATOSSUM
DB
01h, 02h, 03h, 04h, 05h
DB
06h, 07h, 08h, 09h, OAh
.CODE
.SUMA
PROC
MOV
MOV
AX, DGROUP
DS, AX
XOR
XOR
MOV
BX, BX
DL, DL
CX, OAh
ACUMULA:
ADD DL, DATOSSUM [BX]
INC
BX
LOOP ACUMULA
MOV
INT
MOV
INT
SUMA
AH, 02h
21h
AH, 4Ch
21h
;
;
;
;
;
DL contiene el resultado
despliega el resultado
AL = dato a desplegar
salida al DOS
ENDP
END
Los siguientes ejercicios propuestos, son con el fin de mostrar el uso del conjunto de instrucciones del microprocesador y sus modos de direccionamiento.
3. LENGUAJE ENSAMBLADOR DEL MICROPROCESADOR
LUIS URIETA PREZ Y PABLO FUENTES RAMOS
3 -26
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
Empezamos a usar instrucciones bsicas y modos de direccionamiento bsicos y vamos aumentando la complejidad de las instrucciones y de los modos de direccionamiento en forma tal que al concluir los ejercicios hayamos cubierto un 80% del
conjunto de instrucciones de la mquina.
Para cada ejercicio est propuesta la solucin en un diagrama de flujo, despus
se muestra la codificacin en lenguaje ensamblador y para los usuarios de la utilera
DEBUG del DOS, se muestra la codificacin en lenguaje de mquina.
Todos los programas con DEBUG inician en la localidad 100 y los comandos a
utilizar son: R (registro), T (ejecucin paso a paso) y E (examina y cambia memoria)
Con estos comandos, podemos ejecutar cualquiera de los programas.
Con el fin de aprovechar el lenguaje ensamblador, tambin se muestra la codificacin y la ejecucin en el Turbo Ensamblador de Borlan.
EJERCICIO 1. El contenido de la localidad 0200 tiene un dato de 8 bits. Realizar un
programa que coloque en la localidad de memoria 0201 el nibble (4
bits) ms significativo, tomando en cuenta que el nibble menos significativo debe ser 0.
SOLUCIN
Se puede ver grficamente el contenido de las localidades 0200 y 0201 para comprender mejor el enunciado:
200
b7 b 6 b5 b4
B3 b 2 b 1 b0
201
b7 b 6 b5 b4
AL [200]
AL AL and F0
[201] AL
FIN
3 -27
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
A0
24
A2
4B
CD
00
F0
01
4C
21
20
02
Ejecucin:
R
T
T
T
T
E
EJERCICIO 2.
3 -28
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
EJERCICIO 3. Realizar un programa que coloque en la localidad de mem oria 202 el nmero menor de los contenidos en las localidades 200 y 201. Considere
nmeros sin signo.
NOTA: El DEBUG asume que los datos son hexadecimales, mientras que el ensamblador considera que son decimales. En caso de usar el ensamblador
agregar H al final del dato.
SOLUCIN
Grficamente, se tiene:
200
N1
201
N2
202
Diagrama de flujo:
COMPARA
AL [200]
(1)
AL vs [201]
(2)
AL [201]
NO
AL [201]
SI
(3)
SII
[202] AL
(4)
FIN
(5)
SII:
CMP
JNB
MOV
MOV
MOV
INT
AL, [200]
AL, [201]
SII
AL, [201]
[202], AL
AH, 4C
21
Si empleamos el DEBUG, podemos utilizar el comando ASSEMBLY e iniciar en la localidad de memoria 100; o bien, podemos utilizar la tabla de instrucciones y codificar directamente en lenguaje de mquina empleando el comando E, que permite capturar en
hexadecimal el programa.
3. LENGUAJE ENSAMBLADOR DEL MICROPROCESADOR
LUIS URIETA PREZ Y PABLO FUENTES RAMOS
3 -29
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
A0
3A
73
A0
A2
B4
CD
00
06
03
01
02
4C
21
02
01
02
02
02
Para ejecutar el programa, cargamos el registro IP con el valor de inicio del programa,
escribiendo:
_R IP 100 despus con el comando _T (Trace) ejecutamos paso a paso el programa.
N0
201
N1
202
N2
203
M0
204
M1
205
M2
_E
_E
_E
200
AA
AA
AA
203
BB
BB
BB
206
00
00
00
65
66
66
206
N0 + M 0
207
N1 + M 1 + C
208
N2 + M 2 + C
AL, [200]
AL, [203]
[206], AL
AL, [201]
AL, [204]
[207], AL
AL, [202]
AL, [205]
[208], AL
8 LSB
2 BYTE
8 MSB
NOTA: Observe que en las instrucciones de MOVer no se afecta ninguna bandera del PSW.
[200] se refiere al contenido de la direccin 200.
3 -30
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
AA AA AA = 1010
BB BB BB = 1011
Acarreos
111
1010
1011
111
1010
1011
111
1010
1011
111
1010
1011
111
1010
1011
1
0110
0110
0110
0110
0110
0101
EJERCICIO 5. Uso del registro CX como contador. Vamos a mover los 8 bits menos
significativos del registro BL al registro BH.
Sean los datos iniciales:
BX = BH y BL = 43A6
BX 43A6
CX 08
nmero inicial
RLC BX, 1
CX CX - 1
loop
NO
CX = 0?
SI
continua
FIN
MOV
MOV
OTRAVEZ: RLC
LOOP
MOV
INT
BX, 43A6
CX, 08
BX, 1
OTRAVEZ
AH, 4C
21
;(1)
;(2)
;(3)
;(4)
;(5)
;(6)
3 -31
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
NOTA: Observar que en (4) ponemos LOOP OTRAVEZ y como es un salto hacia atrs el DEBUG pone un .
B3
B9
D1
E2
B4
CD
A6
08
D3
FC
4C
21
43
00
;(1)
;(2)
;(3)
;(4)
;(5)
;(6)
1111
C2 =
1111
F
1011
+1
1100
C
Cuando saltamos hacia delante el nmero es positivo. Para salto corto usamos 8 bits y
para salto largo 16 bits.
SOLUCIN
200
Suma verificacin
201
longitud
202
inicio
Diagrama de flujo:
SUMA VERIF
CH 0
CL [201]
BX 202
Direccin de inicio
AL [BX]
3. LENGUAJE ENSAMBLADOR DEL MICROPROCESADOR
LUIS URIETA PREZ Y PABLO FUENTES RAMOS
3 -32
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
BX BX + 1
AL AL BX
CX CX - 1
NO
CX = 0?
SI
[200] AL
FIN
CH, 0
CL, [201]
BX, 200
AL, [BX ]
BX
AL, [BX ]
CX
SUMAO
[200], AL
;poner 0 en CH
;mover el contenido de la localidad 201 a CL
;mover el contenido de 200 a BX
;mover el contenido de BX a AL
;incrementar BX
;O exclusiva contenidos AL y BX
;decrementar CX
;mover el contenido de AL a la localidad 200
B5
8A
3B
4B
8A
43
32
E2
A2
B4
CD
00
0E
02
01
02
02
07
07
F8
00
4C
21
02
Retorno al DOS
_E 100
_R IP,100
_T
3 -33
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
201
8 bits ms significativos
202
Longitud = 3
203
204
02 (bits ms significativos)
205
206
02 (bits ms significativos)
207
208
02 (bits ms significativos)
N0
N1
N2
Diagrama de flujo:
INICIO
CARRY 0
CL [202]
CH 0
CONTADOR
BX 203
AX 0
AX AX + [BX] + carry
BX BX + 2
CX CX - 1
NO
CX = 0?
3 -34
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
SI
[200] AL
[201] AH
FIN
CLC
MOV
MOV
MOV
MOV
RETORNO: ADC
INC
LOOP
MOV
END
CH, 0
CL, [202]
BX, 203
AX, 0
AX, [BX]
BX
RETORNO
[200], AX
Codificacin en lenguaje mquina: Usamos el DEBUG para ejecutar el programa en lenguaje de mquina
0100
0101
0103
0107
010A
010D
010F
0112
0114
F8
B5
8A
B3
B8
13
83
E2
A3
00
0E
03
00
07
C3
F9
00
02
02
00
CLC
MOV
CH, 0
MOV
CL, [202]
MOV
BX, 203
MOV
AX, 0
ADC
AX, [BX]
ADD
BX, 2
LOOP, RETORNO
MOV
[200], AX
02
02
20
201
202
203
LONGITUD
204
INICIO
3 -35
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
Diagrama de flujo:
INICIO
[200] 0
[201] 0
[202] 0
CH 0
CL [203]
BX 204h
AL [BX]
AL vs 00
SI
NO
AL 0
negativos
Z=1
NO
SI
cero
[200] [200]+1
[201] [201]+1
positivos
[202] [202]+1
BX BX+1
CX CX-1
NO
CX = 0
SI
FIN
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
RETORNO: CMP
JGE
INC
SIGUE:
INC
LOOPNZ
FIN:
RET
SII:
JNZ
INC
JMP
AL, 00h
[200], AL
[201], AL
[202], AL
CH, AL
CL, [203]
BX, 0204
AL, [BX]
AL, 00h
SII
[200]
BX
RETORNO
NO
[201]
SIGUE
3 -36
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
NO:
INC
JMP
[202]
SIGUE
MENOR
4001
LONGITUD
4002
DATO 1
DATO 2
DATO n
Diagrama de flujo
MENOR
DI 4002
AL [DI]
CL [4001]
CX = conta-
CH 00
DI DI+1
<
AL vs [DI]
AL [DI]
CX CX-1
CX = 0?
N
O
SI
4000 [AL]
FIN
3 -37
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
X:
Y:
MOV
MOV
MOV
MOV
INC
CMP
JB
MOV
LOOP
MOV
END
DI, 4002
AL, [DI]
CL, [4001]
CH, 0
DI
AL, [DI]
Y
AL, [DI]
X
[4000], AL
EJERCICIO 11. Determinar cuntos bits valen 1 en el contenido de la localidad de memoria 200. Almacene el resultado en la localidad 201
SOLUCIN
Grficamente, se tiene:
200
DATO
201
# DE UNOS DE DATO
Diagrama de flujo
UNOS
[201] 0
AL [200]
CX 0008
X
Rotamos hacia la
izquierda AL REG
N
O
C =
SI
[201] [201]+1
CX CX-1
N
O
CX = 0?
SI
FIN
3 -38
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
X:
Y:
MOV
MOV
MOV
MOV
ROL
JNC
INC
LOOP
END
AL, 00h
[201], AL
AL, [200]
CX, 0008h
AL
Y
[201]
X
201
202
203
Diagrama de flujo
LONG
[200] 00
DI 202
AL [DI]
AL vs ETX
SI
Z = 1?
[200] [200]+1
N
O
FIN
DI DI+1
3 -39
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
MOV
MOV
MOV
CMP
JE
INC
INC
JMP
END
X:
FIN:
[200], 00h
DI, 0202h
AL, [DI]
AL, ETX
FIN
[200]
DI
X
EJERCICIO 13. Investigar una cadena de caracteres ASCII para determinar el ltimo
carcter distinto del blanco. La cadena empieza en la localidad 202 y
finaliza con CR (0Dh) Colocar la direccin del ltimo carcter diferente del espacio en la localidad 200 y 201.
SOLUCIN
Grficamente, se tiene:
200
201
202
INICIA CADENA
LONGITUD DE LA CADENA
0Dh CR
Diagrama de flujo
DIR
SI 202
X
AL [SI]
AL vs CR
Si
AL = CR
No
[200] SI
AL vs SPACE
FIN
Si
AL = SPACE
No
SI SI+1
SI SI-1
3 -40
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
MOV
MOV
CMP
JE
CMP
JE
INC
JMP
ANTESALM: DEC
ALMACENA : MOV
END
SI, 202
AL, [SI]
AL, 0dh
Almacena
AL, 20h
ANTESALM
SI
X
SI
200, SI
;AL vs CR
;AL vs SPACE
EJERCICIO 14. Reemplazar todos los dgitos que estn a la derecha del punto decimal
por caracteres blancos. La cadena inicia en la localidad 201 y consiste
de nmeros decimales codificados en ASCII y un posible punto decimal (2Eh) La longitud est en la localidad 200. Si no aparece punto
decimal, asuma que est implcito en el lado derecho.
NOTA: En ASCII los decimales 0,,9 se representan como 30,,39.
3 -41
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
SOLUCIN
Grficamente, se tiene:
200
LONGITUD DE LA CADENA
201
INICIA CADENA
2E
PUNTO DECIMAL
20h
20h
BLANCOS
20h
20h
Diagrama de flujo
PUNTO
AH = BLANCO
BX 201
AH 20
R2
CH 0
CL [200]
BX
BX+1
R1
AL [BX]
[BX] AH
AL vs 2E
CX CX-1
SII
NO
Z=1
CX = 0
NO
BX BX+1
SI
FIN
CX CX-1
NO
CX = 0
SI
FIN
3 -42
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
SII:
R2:
MOV
MOV
MOV
MOV
CMP
JZ
INC
LOOP
END
MOV
INC
MOV
DEC
JNZ
END
BX, 201
CL, [0200]
CH, 00h
AL, [BX]
AL, 2Eh
SII
BX
R1
AH, 20h
BX
[BX], AH
CX
R2
00 si la paridad es correcta
FF si la paridad es incorrecta
201
Longitud de la cadena
202
Inicia la cadena
Fin de la cadena
AL = DATO
b7 b6 b5 b4 b3 b2 b1 b0 Contamos los UNOS
Si contador = par
Si contador = non
Correcto
Incorrecto
3 -43
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
Diagrama de flujo
PARIDAD
S_PARIDAD
BX 202
PILA CX
CH 0
CX 8
CL [201]
AH 0
R2
AL [BX]
Verifica y marca
con 00 o FF la
localidad 200
S_PARIDAD
AL (C)
NO
BX BX+1
C=1
CX CX-1
SI
AH AH+1
CX = 0
NO
CX CX-1
SI
FIN
NO
C=0
SI
AH (C)
NO
C=1
SI
[200] FF
CX PILA
Retorno de
subrutina
3 -44
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
BX, 202
CH, 00
CL, [201]
AL, [BX]
S_PARIDAD
BX
X
MOV
MOV
RCR
JNC
ADD
LOOPNZ
RCR
JNC
MOV
POP
RET
R2:
SII:
NO:
CX
CX, 0008h
AX,00h
AL
SII
AH, 01h
R2
AH
NO
[0200], FFh
CX
EJERCICIO 16. Comparar dos cadenas de caracteres ASCII para determinar cul sigue
a la otra en orden alfabtico. La longitud de las cadenas est en la localidad 201. Una cadena inicia en la localidad 202 y la otra en la localidad 252. Si la cadena que inicia en la localidad 202 es menor o igual
a la otra cadena, borrar la localidad 200, en caso contrario almacenar
FF en la localidad 200.
SOLUCIN
Grficamente, se tiene:
200
201
202
Inicia la cadena 1
252
Inicia la cadena 2
NOTA: En lugar de utilizar los dos registros de ndice, vamos a utilizar un apuntador ms
un desplazamiento.
3 -45
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
Diagrama de flujo
COMPARA
[200] 00
DI 202
CH 00
CL [0201]
AL
[DI]
AL vs [DI+10h]
NO
Z=1
SI
DI DI+1
CX CX-1
SII
SIGNO = NO
[200] FF
No
CX = 0
Si
FIN
R:
NO:
SII:
MOV
MOV
MOV
MOV
CMP
JNC
INC
LOOPNZ
END
JB
MOV
END
[200], [200]
DI, 0202h
CH, 00h
CL, [0201]
AL, [DI]
AL, [DI+10h]
NO
DI
R
SII
[0200], FFh
EJERCICIO 17.
3 -46
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
Tablas.
La instruccin XLAT realiza la traduccin a travs de una tabla de bsqueda. La
tabla se debe cargar en memoria y la direccin de inicio (base) se guarda en el registro BX antes de utilizar esta instruccin.
Si los datos de esta tabla son A(0), A(1), , A(255), un valor i en AL se reemplaza por el valor A(i) al ejecutarse XLAT.
Funcionamiento de la instruccin XLAT.
Los contenidos de los registros BX y AL se suman para obtener la direccin de una posicin de memoria y el contenido de dicha posicin se copia en AL.
La instruccin XLAT traduce datos de 8 bits; por lo tanto, estn restringidos a un rango de
0 a 255.
BX A(0) BX + AL =Direccin de una posicin de memoria
El contenido de dicha posicin se copia en AL
A(1)
A(2)
A(3)
A(i)
EJERCICIO 18. Conversin del cdigo GRAY a cdigo GRAY-EXCESO 3, sin utilizar la
instruccin XLAT.
SOLUCIN
La tabla funcional para la conversin de cdigos, se muestra a continuacin:
DEC
Cdigo GRAY
EXCESO 3
Cdigo GRAY
AH
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
0
0
0
0
1
1
1
1
1
1
1
1
0
0
0
0
0
0
1
1
1
1
0
0
0
0
1
1
1
1
0
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
0
0
0
0
0
0
1
1
1
1
1
1
1
1
0
0
0
0
1
1
1
1
1
1
1
1
0
0
0
0
0
0
0
1
1
1
0
0
0
0
1
1
1
1
0
0
0
0
1
AL
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
DATO
3 -47
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
Si consideramos que esta tabla de valores se encuentra almacenada a partir de la localidad 5000h, podemos comparar el contenido del acumulador contra cada uno de los contenidos de las localidades, hasta encontrar la que acople.
Cuando se encuentra el acoplamiento, los 4 bits menos significativos de esa localidad son
el resultado de la conversin.
Diagrama de flujo
GRAY_GEX3
SI 5000
R
AH [SI]
LSR
AH, Y
AH vs AL
SI
AH = AL
NO
SI SI+1
AH [SI]
AH AH .AND. 0F
FIN
R:
MOV
LSR
LSR
LSR
LSR
CMP
JE
INC
JMP
CONVIERTE: MOV
AND
END
SI, 5000h
AH, [SI]
AH
AH
AH
AH
AH, AL
CONVIERTE
SI
R
AH, [SI]
AH,0Hh
3 -48
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
Se tiene un convertidor analgico /digital (A/D) y se desea leer la informacin cada segundo hasta tener 100 valores, los cuales deben almacenarse en una tabla de datos. Adems,
SOLUCIN
Se necesita una memoria de acceso aleatorio (RAM) para los valores ledos del convertidor A/D.
Se requieren tres puertos paralelos de entrada/salida (E/S) para los exhibidores
numricos correspondientes a VMX, VMN y VPROM .
Se necesita un puerto de E/S para el convertidor A/D.
Se requiere una memoria de programable de slo lectura (PROM) para el programa.
DB
AB = Bus de Direccin
DB = Bus de Datos
RAM
1 Kx8
100 VALORES
PROM
1 Kx8
PROGRAMA
3 -49
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
8255
PA
VMN
PB
VPROM
PC
VMX
EXHIBIDORES NUMRICOS
CONVERTIDOR
8
8255
PA
A/D
PB
NO USADOS
PC
Configuracin de los
Circuitos Integrados
Localidades
RAM
ROM
Las primeras de 1K
Las ltimas de 1K
8255
Direccin
Contenido
40
41
42
43
VMIN = PA
VPROM = PB
VMX = PC
C A/D = CONTROL
E/S
Direccin
8255
50
51
52
53
Contenido
C A/D = PA
No usado = PB
No usado = PC
CONTROL
Diagrama de flujo
CAD.ASM
INICIACION
100 VALORES
V_MIN
3 -50
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
V_MAX
V_PROM
Ejemplo 2.
DESPLIEGA
RETARDO_1H
AB Bus de Direccin
DB Bus de Datos
DB
PROM
1Kx8
8255
8
MQUINA 1
PA
BINARIO
8
MQUINA 2
PB
GRAY
8
MQUINA 3
PC
EXC-3
REGISTRO
DE
CONTROL
3 -51
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
Configuracin de los
Circuitos Integrados
Localidades
PROM
Las ltimas de 1K
Direccin
8255
E/S
40
41
42
43
Contenido
MAQ1 = PA
MAQ2 = PB
MAQ3 = PC
CONTROL
Entrada
Salida
Salida
Diagrama de flujo
CONV .ASM
INICIACION
Ejemplo 3.
CONV_GRAY
CONV_EXC3
UN_SEG
3 -52
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
SOLUCIN
Para la parte del hardware, proponemos un sistema mnimo conteniendo una PROM de
2Kx8 y un adaptador de perifricos en paralelo 8255, como se muestra en el siguiente
diagrama a bloques:
P
AB
AB Bus de Direccin
DB Bus de Datos
DB
PROM
2Kx8
8255
PA
PB
PC
No se usa
a1, a 0
REGISTRO
DE
CONTROL
3 -53
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
Diagrama de estados:
1/verde
INICIO
1/verde
A
1/verde
B
1/verde
C
0/rojo
0/rojo
0/rojo
0/rojo
ERROR
RESET
Apaga rojo
Apaga verde
Subrutinas requeridas:
INICIACIN
ACTIVA_ROJO
ACTIVA_VERDE
UN_SEGUNDO
Diagrama de flujo
INICIACION
AL
Puerto A = ENTRADA
Puerto B = SALIDA
Puerto C = NO USADO
[03] AL
RET
3 -54