Académique Documents
Professionnel Documents
Culture Documents
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
ensamblador. 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
Overflow
Direction
Interrupts
Sign
Zero
Auxiliary Carry
Parity
Carry
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
CF
OF
SF
PF
ZF
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.
DF =
IF =
TF =
bandera de direccin
bandera de interrupcin
bandera de trampa
MOV
XCHG
IN
OUT
XLAT
LEA
LDS
LES
LAHF
SAHF
PUSH FUENTE
POP DESTINO
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
(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.
MUL
IMUL
AAM
multiplicacin
multiplicacin entera
ajuste ASCII para la multiplicacin
DIV
IDIV
AAD
divisin
divisin entera
ajuste ASCII para la divisin
Conversiones:
f.
resta
resta con acarreo negativo
ajuste ASCII para la resta
ajuste decimal para la resta
Grupo de divisin:
e.
SUB
SBB
AAS
DAS
Grupo de multiplicacin:
d.
suma
suma con acarreo
ajuste ASCII para la suma
ajuste decimal para la suma
Grupo de sustraccin:
c.
ADD
ADC
AAA
DAA
CBW
CWD
NEG
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.
3 -9
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
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
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
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
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
CX, COUNT
DS*16
+
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
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
REGISTRO DE REGISTRO
16 BITS
DE 8 BITS
111
DI
BH
REG
instruccin de 2 bytes
B0
56
AL, 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 BYTE
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
(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
3 -21
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
B402
B22A
CD21
CD20
MOV
MOV
INT
INT
AH, 02
DL, 2A
21
20
.
@
_
$
interrogacin
punto
arroba
subrayado
dlar
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
DGROUP
_DATA
STACK
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
b 7 b6 b5 b4
B3 b2 b1 b0
201
b 7 b6 b5 b4
AL [200]
AL AL and F0
[201] AL
FIN
3. LENGUAJE ENSAMBLADOR DEL MICROPROCESADOR
LUIS URIETA PREZ Y PABLO FUENTES RAMOS
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
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
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
_E
201
N1
_E
202
N2
203
M0
204
M1
205
M2
_E
200
AA
AA
AA
203
BB
BB
BB
206
00
00
00
65
66
66
206
N0 + M0
207
N1 + M1 + C
208
N2 + M2 + 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. LENGUAJE ENSAMBLADOR DEL MICROPROCESADOR
LUIS URIETA PREZ Y PABLO FUENTES RAMOS
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
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
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
Z=1
NO
negativos
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 = contador
CH 00
DI DI+1
<
AL vs [DI]
AL [DI]
CX CX-1
CX = 0?
NO
SI
4000 [AL]
3. LENGUAJE ENSAMBLADOR DEL MICROPROCESADOR
LUIS URIETA PREZ Y PABLO FUENTES RAMOS
3 -37
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
FIN
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
DATO
201
# DE UNOS DE DATO
Diagrama de flujo
UNOS
[201] 0
AL [200]
CX 0008
X
Rotamos hacia la
izquierda AL REG AL
NO
C = 1?
SI
[201] [201]+1
Y
CX CX-1
3 -38
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
NO
CX = 0?
SI
FIN
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
3 -39
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
Diagrama de flujo
LONG
[200] 00
DI 202
X
AL [DI]
AL vs ETX
SI
Z = 1?
NO
[200] [200]+1
FIN
DI DI+1
MOV
MOV
MOV
CMP
JE
INC
INC
JMP
END
X:
FIN:
[200], 00h
DI, 0202h
AL, [DI]
AL, ETX
FIN
[200]
DI
X
INICIA CADENA
LONGITUD DE LA CADENA
0Dh CR
3 -40
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
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
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
RI:
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
Correcto
Si contador = non
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
NO
FIN
C=0
SI
AH (C)
NO
C=1
SI
[200] FF
CX PILA
Retorno de
subrutina
3 -44
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
X:
MOV
MOV
MOV
MOV
CALL
INC
LOOPNZ
END
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:
SUB
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)
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
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
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
8255
Direccin
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
DESPLIEGA
RETARDO_1H
de
conversin
de
cdigo
con
un
SOLUCIN
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
8255
Direccin
E/S
40
41
42
43
Contenido
MAQ1 = PA
MAQ2 = PB
MAQ3 = PC
CONTROL
Entrada
Salida
Salida
Diagrama de flujo
CONV.ASM
INICIACION
CONV_GRAY
CONV_EXC3
UN_SEG
Ejemplo 3. Cierto proceso debe llevarse a cabo en forma secuencial cada segundo
por cada paso. El proceso se realiza empezando por A, despus B, a
continuacin C y finalmente D. Si se efecta en el orden indicado deber
activarse desde el inicio un diodo emisor de luz (LED, por sus siglas en
ingls) verde y al finalizar el proceso, retornar al programa principal.
Si el proceso no se lleva a cabo en el orden mencionado, lo llevaremos al
estado ERROR y se debe activar un LED rojo para indicar esta
condicin. El circuito deber permanecer en ese estado hasta que se
aplique un pulso de RESET retornando al estado inicial.
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
a 1, 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