Logo Studenta

Apunte_20 - Gustavo Rivas

¡Este material tiene más páginas!

Vista previa del material en texto

1 Electrónica II – UTN FRRo-Federico Ferroggiaro, Luis Paradiso 
 
 
 
 
 
 
 
 
 
 
 
ELECTRÓNICA II 
 
ING. FEDERICO FERROGGIARO 
 
ING LUIS PARADISO 
2 Electrónica II – UTN FRRo-Federico Ferroggiaro, Luis Paradiso 
 
DESARROLLO DE SOFTWARE PARA LOS MICROPROCESADORES 
 
Los microprocesadores trabajan en código de máquina pero los programadores lo hacen 
en lenguajes más cercanos al lenguaje humano. 
 
Cuando se programa en Lenguaje de Máquina o Lenguaje Objeto, hay que pensar en 
cómo la máquina resuelve el problema, consecuentemente hay que conocer a fondo la 
estructura del microprocesador y, además, hay que preguntarse cómo resolver el 
problema. 
 
Cuando se programa en Lenguajes de Bajo Nivel, como son los lenguajes numéricos y 
el Assembly, hay que preguntarse lo mismo que en el caso de trabajar en Lenguaje de 
Máquina. 
 
Esto implica que debe darse ubicación en memoria principal a cada dato e instrucción 
del programa, es decir, hay que dar direccionamiento absoluto a todos los componentes 
del programa. Además hay que conocer la estructura física del microprocesador. 
 
Los microprocesadores trabajan con dos conceptos: Registro-Registro(RR) y Registro-
Memoria(RM). 
 
Al trabajar con el microprocesador 8086 hay que definir su estructura física. 
 
Como puede verse en la figura siguiente los registros son 14(catorce), nos centraremos, 
en primera instancia, en los registros AX, BX, CX y DX que son registros de datos. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 Figura 1: Juego de Registros del microprocesador INTEL 8086 
 
3 Electrónica II – UTN FRRo-Federico Ferroggiaro, Luis Paradiso 
 
 
Además se tienen los siguientes registros de 16 bits: 
 
Registros Indices SI y DI 
Registros Punteros SP y BP 
Registros Segmentos: CS, DS, SS y ES 
Registros de Control: IP(Instruction Pointer) que es el contador de programa 
 Flags(Banderas) cuyos bits llamados banderas sirven para que 
el microprocesador tome decisiones. 
 
El registro IP es el llamado contador de programa y contiene la dirección de la próxima 
instrucción a transferir desde memoria principal a un registro que no está en el esquema 
que es el Registro de Instrucción, que debe contener la instrucción que se está 
ejecutando. 
 
Los registros de datos o generales son de 16 bits pero están divididos en dos registros de 
8 bits cada uno, de esta manera pueden manejar datos de 8 bits o de 16 bits. 
 
En el registro AX se tienen dos registros de 8 bits, el AH(que significa A High(alto)) y 
el AL(que significa A Low(Bajo)). De igual manera vale para BX, CX y DX.- 
 
INSTRUCCIONES Y MODOS DE DIRECCIONAMIENTO 
 
Las instrucciones en los microprocesadores de estructura CICS como es el 8086 
presenta distintas longitudes o tamaños según la manera que se direccionan los 
operandos que intervienen. 
 
El modo de direccionamiento más sencillo es el R-R llamado Direccionamiento modo 
Registro, la sintaxis de la instrucción es: 
 
 OPERACIÓN destino,fuente 
 
 
Por ejemplo si queremos Mover(copiar) un dato que está en el registro BX al registro 
AX, debemos escribir: 
 MOV AX, BX 
 Operación destino fuente 
 
Si antes de ejecutar la operación se tiene (AX) = 0F y (BX) = 1D, esto se lee contenido 
de Registro AX es 0F y el contenido de BX es 1D. En general, el paréntesis denota 
contenido de …. 
 
Luego de ejecutada la instrucción MOV, los contenidos de los registros son: 
 
(AX) = 1D y (BX) = 1D 
 
Si la intrucción hubiera sido: MOV BX, AX , y los valores iniciales los antes indicados, 
luego de ejecutada la instrucción, los registros tendrían los siguientes contenidos: 
 
(AX) = 0F y (BX) = 0F 
4 Electrónica II – UTN FRRo-Federico Ferroggiaro, Luis Paradiso 
 
Los sets o repertorios de instrucciones de los microprocesadores incluyen instrucciones 
de tipo matemático tal como sumar, restar, etc. 
 
En el 8086 la suma de dos registros tiene el mnemónico ADD. La instrucción tiene el 
formato: 
 OPERACIÓN Primer Operando y Resultado, Segundo Operando 
 
Si se tiene ADD AX , BX 
 
Significa (AX) = (AX) + (BX) La suma del contenido de dos registros 
queda como contenido del registro del primer operando. 
 
Si (AX) = 07 y (BX) = 23 (Los contenidos de los registros se expresan 
en hexadecimal) 
 
ADD AX, BX (AX) + (BX) = (AX) 
 
 07 + 23 = (AX) 
 
 2A = (AX) y (BX) = 23 
 
Si se quisiera hacer un programa que sumara tres números de 8 bits que se encuentran 
en los registros AL, AH, BL y restarle un número que se encuentra en CH, colocar el 
resultado en DX y luego detenerse, las instrucciones deberían tener la siguiente 
secuencia: 
 
(1) Colocar (DL) = 00 
(2) MOV AL, DL Se mueve el 00 al interior de (AH) 
(3) ADD AL, AH (AL) = (AL) + (AH) 
(4) ADD AL, BL (AL) = (AL) + (BL) 
(5) MOV DX, AL Se mueve o copia el resultado a (DX) 
(6) HLT La máquina se detiene 
 
También pueden existir movimientos y operaciones entre los registros y posiciones de 
memoria, por ejemplo, si deseamos sumar el contenido de la memoria A001 con el 
contenido del registro AX, debemos saber que el resultado siempre queda en el registro 
y que el modo de trabajo será R-M, registro-memoria. 
 
Los microprocesadores trabajan con los conceptos RR y RM pero no trabajan con el 
concepto MM.- 
 
Volviendo a la operación que hemos enunciado la instrucción sería 
 
 ADD AX, [A001] 
 
Y esto significa que al contenido del registro AX se le adiciona el contenido de la 
posición de memoria A001, si (AX) era antes de la operación 45AF y el contenido de 
A001(esta forma de direccionar datos se llama directa) era 01(notemos que cada 
posición de memoria contiene 8 bits), el resultado de la ejecución de la instrucción es: 
 (AX) + [A001] ----- 45AF + 01 = 45B0 ----- (AX) = 45B0 
5 Electrónica II – UTN FRRo-Federico Ferroggiaro, Luis Paradiso 
 
Supongamos que deseamos restar dos números que se encuentran en memoria principal 
de la computadora y dejar el resultado en una tercera posición de memoria. No tenemos 
ningún operando que trabaje con el concepto de MM, luego tiene que intervenir un 
registro. Sean los contenidos de las posiciones de memoria [A001] = 03 y [A002] = 02 
y deseamos colocar el resultado en A003. 
 
(1) MOV AL, [A001] Esta instrucción coloca (AL) = 03 
(2) SUB AL, [A002] Esta instrucción hace que (AL) = 01 
(3) MOV [A003], AL Esta instrucción hace que [A003] = 01 
(4) HLT La máquina se detiene 
 
La secuencia de instrucciones y datos que permiten realizar la operación deseada recibe 
el nombre de programa fuente en Assembly.- 
 
El problema que hemos resuelto era lineal, no había opciones ni toma de decisiones. 
Supongamos que el problema que se nos plantea es la resta de dos números que están en 
memoria principal, si el resultado de la resta, es positivo o cero, hay que restarle uno y 
parar, si es negativo hay sumarle 1 y parar. 
 
Debido a que las instrucciones de un programa se encuentran todas apiladas en los 
registros de la memoria principal, es necesario seguir un camino lineal en un caso y 
saltar algunas instrucciones en otro caso, para esto se tienen las instrucciones de 
SALTO(JUMP) en el repertoriode instrucciones del microprocesador. 
 
Los saltos pueden ser CONDICIONALES(salte si …) o INCONDICIONALES(salte sí 
o sí). 
 
Los saltos rompen la secuencia natural de un programa, para ello cambian el contenido 
del IP, y para saber si se debe o no saltar, el microprocesador consulta el registro de 
FLAGS(ver figura 1) el cual tiene los bits que se indican en la figura 2. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Figura 2. Bits bandera que pertenecen al Registro Flags (Banderas) 
6 Electrónica II – UTN FRRo-Federico Ferroggiaro, Luis Paradiso 
 
 
Las banderas Z y S son las que se utilizan mayormente en problemas habituales. 
 
Volvamos al problema que se encuentra en el párrafo recuadrado de la página anterior. 
 
DATOS 
[A000] = 01 
[A001] = 03 
[A002] = 05 
[A003] = 12 
 
PROGRAMA EN ASSEMBLY 
 
(1) MOV DX, [A000] 
(2) SUB CX, CX 
(3) MOV AX, [A001] 
(4) SUB AX, [A002] 
(5) CMP AX, CX Esta instrucción compara el contenido del 
registro AX con el contenido del registro de 
CX y posiciona la bandera S para poder tomar 
decisiones 
(6) JGE SUMAR Si el resultado de la comparación indica que 
el valor que se encuentra en AX es cero o 
positivo(mayor que cero), el programa 
continúa en SUMAR, pero si es negativo sigue 
la secuencia normal. 
(7) ADD AX,DX 
PEPE (8) HALT 
 SUMAR (9) SUB AX,DX 
 (10) JMP PEPE Salto incondicional a la posición indicada 
 simbólicamente como PEPE. 
 
 
El repertorio de instrucciones del microprocesador 8086 ofrece otras instrucciones 
además de las vistas. 
 
Direccionamiento inmediato 
 
Hay instrucciones que contienen el segundo dato de la operación dentro de la misma, 
éstas se llaman INSTRUCCIONES DE DIRECCIONAMIENTO INMEDIATO, por 
ejemplo si quiero poner en 0 el registro CX se genera la instrucción: 
 
 MOV CX, 0000 
 
Si se quiere sumar al registro AL un valor 0C se puede generar la instrucción: 
 
 ADD AL, 0C 
 
 
 
7 Electrónica II – UTN FRRo-Federico Ferroggiaro, Luis Paradiso 
 
Direccionamiento modo registro 
 
Son las instrucciones en las cuales ambos datos se encuentran en registros, por ejemplo 
 
ADD AX, BX 
 
Ya vimos que esto significa la suma del contenido AX con el contenido del registro BX 
y el resultado queda en el registro AX. 
 
(AX) = 3456 (en hexadecimal) y (BX) = 23B5 (en hexadecimal) antes de la ejecución 
de la instrucción, será: 
 
(AX) = 580B (en hexadecimal) y (BX) = 23B5 (en hexadecimal) después de la 
ejecución de la instrucción. 
 
INC SI 
 
Incrementa el contenido del registro SI en una unidad, por ejemplo: 
 
(SI) = 2345(hexadecimal) antes de la ejecución de la instrucción 
 
(SI) = 2346(hexadecimal) después de la ejecución de la instrucción 
 
Direccionamiento calculado o indirecto 
 
La memoria que puede direccionar un microprocesador se encuentra limitada por el 
tamaño de su IP, es decir del Puntero de Instrucción o Contador de Programa. En el 
caso del 8086 el IP es de 16 bits, consecuentemente tendrá una capacidad de 
direccionamiento de: 
 
 
 
 
 
 
 
 
En cada dirección se encuentra alojado 1 byte, es decir, 8 bits. 
 
Si se define como Tamaño Máximo de Memoria a: 
 
 
 
 
 
En nuestro caso: TMM = 2E16 x 8 bits 
 
Si lo queremos expresar en KBy: TMM = 2E16 x 8 bits 
 2E10 byte x 8 bits 
 KBy byte 
K = 2E16 (capacidad de direcccionamiento) 
Es decir que existe 2E16 combinaciones 
distintas de ceros y unos que significan 
direcciones de memoria principal distintas. 
 
TMM = K x lo que direcciona 
8 Electrónica II – UTN FRRo-Federico Ferroggiaro, Luis Paradiso 
 
 
 
 
 
Como esta capacidad de memoria es insuficiente, los diseñadores del Intel 8086 han 
trabajado de manera segmentada o paginada. 
 
Esto significa que imaginan a la memoria principal como consistente en varias páginas 
de 64 KBy. 
 
Para direccionar las instrucciones de un programa se utiliza el contenido del registro 
CS(segmento de Código), ver Figura 1. Además se toma en cuenta el contenido del IP. 
 
Supongamos que (CS) = 4D00 y el contenido de IP es B000, la instrucción que se está 
direccionando se calcula: 
 
 (CS) + (IP) Dirección buscada 
 4D00 + B000 58000 
 
Direccionamiento Directo 
 
En general podemos decir que los datos que debe procesar un microprocesador en 
cualquier programa, están localizados en memoria principal. 
 
Diremos que se está trabajando en modo directo cuando las instrucciones tienen en su 
campo fuente o campo destino la dirección donde se encuentra el dato o donde se debe 
asignar el resultado de una operación. 
 
Supongamos que queremos mover un dato que se encuentra en las posiciones de 
memoria principal 34FA y 34FB, en el INTEL 8086 los datos se ubican: 
 
Memoria contenido es el 
 
34FA 03 Byte menos significativo del dato 
34FB 00 Byte más significativo del dato 
 
Si se ejecuta la instrucción: 
 
MOV AX, [34FA] 
 
Después que ella se ejecuta, se copia 0003 en el registro AX. 
 
Es importante destacar el efecto que tiene en la sintaxis de la instrucción la presencia de 
los corchetes que encierran la dirección de memoria. Justamente estos corchetes indican 
el contenido de la dirección especificada. 
 
Si se tiene que ejecutar la instrucción: 
 
MOV [34AF], AX y (AX) = 235B 
 
 TMM = 64 KBy 
9 Electrónica II – UTN FRRo-Federico Ferroggiaro, Luis Paradiso 
 
En este caso se ordena transferir(copiar) el contenido del registro AX a la dirección 
34FA y la siguiente, recordemos que cada dirección es de un byte. 
 
Luego de la ejecución de la instrucción, la memoria principal queda con los siguientes 
contenidos que pueden verse en el mapa 
 
Memoria Contenido Significa 
34FA 5B Byte menos significativo del dato 
34FB 23 Byte más significativo del dato 
 
RESOLUCIÓN DE UN PROBLEMA 
 
Ejemplo nº 1 
Las computadoras han sido concebidas para resolver problemas mediante programas, 
los mismos son una secuencia ordenada lógicamente de instrucciones y datos. 
 
Cuando el programador debe resolver un problema primero tiene que definir el 
problema que se resolvera y cómo se quiere la solución del mismo, luego hace un 
diagrama de flujo, que es una manera gráfica de mostrar la secuencia de pasos que 
realiza la máquina para resolver un problema, luego se hace el programa en Assembly. 
 
Supongamos que queremos resolver la resta de dos números de 8 bits que se 
encuentran en memoria principal y el resultado lo deseamos colocar en la posición de 
memoria 34AF.- Supongamos que los datos se encuentran en 3456 y 3490.- 
 
Acabamos de resolver la parte de definir el problema. 
 
Ahora hay que hacer el DIAGRAMA DE FLUJO 
 
Cuando se programa en Assembly conviene hacer previamente al programa fuente, un 
diagrama que indica el flujo de datos dentro del microprocesador, es una manera 
simbólica y gráfica de ver la secuencia de las instrucciones en el programa. 
 
 
 
SímbolosSignificado 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Indica operación 
de la computadora 
Vincula bloques 
de operación 
Bloque de toma 
de decisiones 
10 Electrónica II – UTN FRRo-Federico Ferroggiaro, Luis Paradiso 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
En el problema que nos ocupa debemos primero colocar uno de los datos en un registro, 
debido a que el microprocesador trabaja con el concepto RM (registro-memoria). 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Nº 
Símbolo de unión 
de procesos 
Principio y fin de 
programa 
Símbolo de 
Impresión 
 Nº 
Conector de Página 
Conector de 
diagramas 
START 
 Colocar el Minuendo 
en el Registro AL 
Restar el sustraendo 
Colocar el resultado en la 
posición de memoria 34 AF 
1 
1 
Parar 
11 Electrónica II – UTN FRRo-Federico Ferroggiaro, Luis Paradiso 
 
 
Programa en Assembly: 
 
 Referencia Instrucción Comentarios 
 MOV AL, [3456] Se movió el minuendo al registro 
 SUB AL, [ 3490] Se realiza la resta 
 MOV [34AF], AL Se colocó el resultado en memoria 
 HLT Fin de programa 
 
 
Ejemplo nº 2 
 
Restar dos números que se encuentran en memoria principal, según el mapa de memoria 
que se adjunta. Si el resultado es positivo sumar 1 y parar. Si el resultado es negativo, 
sumar 2 y parar. Si el resultado es cero sumar 3 y parar. 
 
Mapa de memoria 
 
Posición de memoria contenido 
AA00 3(dato 1) 
AA01 x(dato 2) 
AA02 1 
AA03 2 
AA04 3 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Comenzar 
(M) (AH) 
(M1) (BH) 
((AH) - (BH)) (AH) 
 1 
12 Electrónica II – UTN FRRo-Federico Ferroggiaro, Luis Paradiso 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
¿Es menor a 
cero? 
 1 
Sumar 1 
PARAR 
Es igual a 
Cero? 
Sumar 2 
NO 
 1
 
 Sumar 3 
 1 
 1 
SI 
NO 
SI 
 
 
13 Electrónica II – UTN FRRo-Federico Ferroggiaro, Luis Paradiso 
 
Programa en Assembly: 
 
 Referencia Instrucción Comentarios 
 MOV AH, [AA00] Se movió el minuendo al registro 
 MOV BH, [AA01] Se movió el sustraendo a otro Reg. 
 SUB AH, BH Se realiza la resta 
 JLE NEG Salto por inferior o negativo 
 ADD AH, [AA02] Se suma 1 al resultado de la resta 
 PARAR HLT Fin de Programa 
 NEG JZ ZERO Salto por cero a ZERO 
 ADD AH, [AA03] Se suma 2 al resultado de la resta 
 JMP PARAR salto incondicional a PARAR 
 ZERO ADD AH, [AA04] Se suma 3 al resultado de la resta 
 JMP PARAR 
 
 
 
Ejemplo nº 3 
 
Dada una lista de datos(tabla) que comienza en la posición de memoria A000 y termina 
en la posición de memoria A003 inclusive, sumar los contenidos de la misma y colocar 
el resultado en la posición B000 y luego parar. 
 
Mapa de memoria 
 
Posición de memoria contenido 
AA00 01 
AA01 02 
AA02 03 
AA03 04 
AA04 AB 
 
Lo primeros que debemos hacer es el diagrama de flujo: 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
COMENZAR 
(AX) [A000] 
(AX) + [A001] (AX) 
 1 
1 
11
1 
(AX) + [A002] (AX) 
(AX) + [A003] (AX) 
[B000] (AX) 
STOP 
14 Electrónica II – UTN FRRo-Federico Ferroggiaro, Luis Paradiso 
 
 
Programa en Assembly: 
 
 Referencia Instrucción Comentarios 
 MOV AX, [A000] Se movió el PRIMER dato de la tabla al 
registro 
 ADD AX, [A001] SE SUMÓ EL SEGUNDO VALOR DE LA 
TABLA 
 ADD AX, [A002] SE SUMÓ EL TERCER VALOR DE LA 
TABLA 
 ADD AX, [A003] SE SUMÓ EL ÚLTIMO VALOR DE LA 
TABLA 
 MOV [B000], AX SE COLOCA EL RESULTADO EN 
MEMORIA PRINCIPAL 
 HLT Fin de Programa 
 
 
 
Este programa se puede generalizar mediante el uso del registro SI como registro 
puntero a la tabla y un contador para saber si hemos llegado al final de la tabla. 
 
Primeramente hagamos el diagrama de flujo: 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
START 
(SI)(Puntero) A000 
NOTA: SE COLOCA LA DIREC- 
CIÓN DEL PRIMER VALOR DE 
LA TABLA EN PUNTERO. 
(CX)(CONTADOR) 04 
NOTA: SE COLOCA EN EL 
CONTADOR LA CANTIDAD DE 
VALORES QUE TIENE LA 
TABLA 
(AX) 00 NOTA: SE COLOCA EN CERO 
EL REGISTRO QUE SERVIRÁ 
PARA GUARDAR LA SUMA 
(AX) (AX) + [Puntero] NOTA: SE SUMA EL REGISTRO 
CON EL CONTENIDO DE LA 
POSICIÓN DE MEMORIA QUE SE 
ENCUENTRA EN EL PUNTERO. 
 1 
1 
15 Electrónica II – UTN FRRo-Federico Ferroggiaro, Luis Paradiso 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Programa en Assembly: 
 Referencia Instrucción Comentarios 
 MOV SI, [A000] Se define el puntero 
 MOV AX, 0 Se limpia el lugar de la suma 
 MOV CX, 04 Se define el contador 
 SEGUIR ADD AX, [SI] Se suma un dato al total 
 INC SI Puntero a la siguiente posición 
 DEC CX Se baja en 1 el contenido de CX 
 JNZ SEGUIR Salto por no cero a SEGUIR 
 MOV [B000], AX Trasfiereresultado 
 HLT Fin de Programa 
 
 
1 
(PUNTERO) (PUNTERO) + 1 
NOTA: SE INCREMENTA EN 1 
LA DIRECCIÓN CONTENIDA 
EN EL PUNTERO, PASA A LA 
SIGUIENTE DIRECCIÓN DE 
LA TABLA 
(CONTADOR) (CONTADOR) - 1 
NOTA: SE DECREMENTA EL 
CONTADOR EN UNA UNIDAD 
CONTADOR 
= 0 ? 1 
NO 
[B000] (AX) 
STOP 
NOTA: SI NO SE LLEGÓ AL 
FINAL DE LA TABLA SE 
DEBERÁ SUMAR EL 
SIGUIENTE VALOR 
SI 
NOTA: SE DESPLAZA EL 
VALOR DE LA SUMA A LA 
MEMORIA PRINCIPAL. 
16 Electrónica II – UTN FRRo-Federico Ferroggiaro, Luis Paradiso 
 
En el ejemplo anterior se sabe la cantidad de valores que tiene la tabla, pero podría 
darse el caso de no saberse el mismo, se deberá colocar, entonces, algún valor que 
indique que la tabla terminó, por ejemplo, si todos los valores son positivos y distintos 
de cero colocar como "bandera" un valor negativo o un cero. 
 
Ejemplo nº 4 
 
Dada una lista de datos(tabla) todos positivos y distintos de cero, que comienza en la 
posición de memoria A000 y termina en un valor cero, sumar los contenidos de la 
misma y colocar el resultado en la posición B000 y luego parar.

Otros materiales