Escolar Documentos
Profissional Documentos
Cultura Documentos
MICROPROCESADORES Y MICROCOMPUTADORAS
3. 4.
5.
3. LENGUAJE ENSAMBLADOR DEL MICROPROCESADOR LUIS URIETA PREZ Y PABLO FUENTES RAMOS
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. LENGUAJE ENSAMBLADOR DEL MICROPROCESADOR LUIS URIETA PREZ Y PABLO FUENTES RAMOS
3 -2
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
REGISTROS INTERNOS DEL MICROPROCESADOR La Unidad Central de Proceso (CPU, por sus siglas en ingls ) tiene 14 registros internos cada uno de 16 bits. Los primeros cuatro, AX, BX, CX y DX, son de uso general y se pueden usar tambin como registros de 8 bits. Es decir, AX se puede dividir en AH y AL (AH es el byte alto, high , y AL es el byte bajo, low) Lo mismo es aplicable a los otros tres ( BX en BH y BL, CX en CH y CL y DX en DH y DL) Estos son los nicos registros que pueden usarse de modo dual (en 8 o 16 bits) Los registros de la CPU son conocidos por sus nombres propios, que son:
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 e xtra) (registro del segmento de p ila) (registro del segmento de c digo) (registro de apuntadores base) (registro ndice fuente) (registro ndice destino) (registro del apuntador de pila) (registro del apuntador de siguiente instruccin) (registro de banderas)
El registro AX se usa para almacenar resultados, lectura o escritura desde o hacia los puertos. El BX sirve como apuntador base o ndice. El CX se utiliza en operaciones de iteracin, como un contador que automticamente se incrementa o decrementa de acuerdo con el tipo de instruccin usada. El DX se usa como puente para el acceso de datos. El DS es un registro de segmento cuya funcin es actuar como polica donde se encuentran los datos. Cualquier dato, ya sea una variable inicializada o no, debe estar dentro de este segmento. La nica excepcin es cuando tenemos programas del tipo *.com, ya que en stos slo puede existir un segmento. El registro ES tiene el propsito general de permitir operaciones sobre cadenas, pero tambin puede ser una exte nsin del DS. El SS tiene la tarea exclusiva de manejar la posicin de memoria donde se encuentra la pila (stack ) Esta es una estructura usada para almacenar datos en forma temporal, tanto de un programa como de las operaciones internas de la computadora personal (PC, por sus siglas en ingls ) En trminos de operacin interna, la CPU usa este segmento para almacenar las direcciones de retorno de las llamadas a rutinas. El registro de segmentos ms importante es el CS o segmento de cdigo. Es aqu donde se encuentra el cdigo ejecutable de cada programa, el cual est directamente ligado a los diferentes modelos de memoria. El registro BP (base pointer) se usa para manipular la pila sin afectar al registro de segmentos SS. Es til cuando se usa interfaz entre lenguajes de alto nivel y el en3. LENGUAJE ENSAMBLADOR DEL MICROPROCESADOR LUIS URIETA PREZ Y PABLO FUENTES RAMOS
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
Significado de los bits: 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
Estas 6 ltimas banderas representan el resultado de una operacin aritmtica o lgica . Permiten al programa alterar el curso de ejecucin basado en los valores lgicos que almacenan.
3. LENGUAJE ENSAMBLADOR DEL MICROPROCESADOR LUIS URIETA PREZ Y PABLO FUENTES RAMOS
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.
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. LENGUAJE ENSAMBLADOR DEL MICROPROCESADOR LUIS URIETA PREZ Y PABLO FUENTES RAMOS
3 -5
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
Control de Bucles (instrucciones simples) stas posibilitan el grupo de control ms elemental de nuestros programas. Un bucle es un bloque de cdigo que se ejecuta varias veces. Hay 4 tipos de bucles bsicos:
o o o o Bucles sin fin Bucles por conteo Bucles hasta Bucles mientras
incrementar decrementar realizar un bucle realizar un bucle si es cero realizar un bucle si no es cero salta si CX es cero
Instrucciones de Prueba, Comparacin y Saltos. Este grupo es una continuacin del anterior, incluye las siguientes instrucciones:
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)
Instrucciones de Llamado y Retorno de Subrutinas. Para que los programas resulten eficientes y legibles tanto en lenguaje ensamblador como en lenguaje de alto nivel, resultan indispensables las subrutinas:
CALL RET
3. LENGUAJE ENSAMBLADOR DEL MICROPROCESADOR LUIS URIETA PREZ Y PABLO FUENTES RAMOS
3 -6
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
Instrucciones Aritmticas. Estas instrucciones son las que realiza directamente el 8086/8088 a. Grupo de adicin:
b.
suma suma con acarreo ajuste ASCII para la suma ajuste decimal para la suma
Grupo de sustraccin:
c.
resta resta con acarreo negativo ajuste ASCII para la resta ajuste decimal para la resta
Grupo de multiplicacin:
MOVC MOVW CMPC CMPW SCAC SCAW LODC LODW STOC STOW
transferir carcter de una cadena transferir palabra de una cadena comparar carcter de una cadena comparar palabra de una cadena buscar carcter de una cadena buscar palabra de una cadena cargar carcter de una cadena cargar palabra de una cadena guardar carcter de una cadena guardar palabra de una cadena 3 -7
3. LENGUAJE ENSAMBLADOR DEL MICROPROCESADOR LUIS URIETA PREZ Y PABLO FUENTES RAMOS
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
Son operaciones bit a bit que trabajan sobre octetos o palabras completas:
Instrucciones de Desplazamiento, Rotacin y Adeudos. Bsicamente permiten multiplicar y dividir por potencias de 2
SHL, SAL SHR SAR ROL ROR RCL RCR CLC STC
desplazar a la izquierda (desplazamient o aritmtico) desplazar a la derecha desplazamiento aritmtico a la derecha rotacin a la izquierda rotacin a la derecha rotacin con acarreo a la izquierda rotacin con acarreo a la derecha borrar acarreo poner acarreo a 1
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):
Instrucciones de Control del microprocesador. Hay varias instrucciones para el control de la CPU, ya sea a ella sola, o en conjuncin con otros procesadores:
3. LENGUAJE ENSAMBLADOR DEL MICROPROCESADOR LUIS URIETA PREZ Y PABLO FUENTES RAMOS
3 -8
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
Instrucciones de Interrupcin.
poner a 1 el indicador de interrupcin borrar el indicador de interrupcin interrupcin interrupcin por capacidad excedida (desbordamiento) retorno de interrupcin
Las instrucciones de transferencia condicional del control del programa se pueden clasificar en 3 grupos:
1. Instrucciones usadas para comparar dos enteros sin signo:
a. JA o JNBE . Salta si est arriba o salta si no est abajo o si no es igual (jump if above o jump if not below or equal) El salto se efecta si la bandera ce CF = 0 o si la bandera de ZF = 0 b. JAE o JNB. Salta si est arriba o es igual o salta si no est abajo (jump if above or equal o jump if not below) El salto se efecta si CF = 0. c. JB o JNAE. Salta si est abajo o salta si no est arriba o si no es igual (jump if below or equal o jump if not above or equal) El salto se efecta si CF = 1. d. JBE o JNA . Salta si est abajo o si es igual o salta si no est arriba (jump if below or equal o jump if not above) El salto se efecta si CF = 1. e. JE o JZ . Salta si es igual o salta si es cero (jump equal o jump if zero) El salto se efecta si ZF = 1 (tambin se aplica a comparaciones de enteros con signo) f. JNE o JNZ . Salta si no es igual o salta si no es cero (jump if not equal o jump if not zero) El salto se efecta si ZF = 0 (tambin se aplica a comparaciones de enteros con signo)
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. LENGUAJE ENSAMBLADOR DEL MICROPROCESADOR LUIS URIETA PREZ Y PABLO FUENTES RAMOS
3 -10
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
FORMATO DE LAS INSTRUCCIONES Cada instruccin en lenguaje ensamblador del 8088 est compuesta de 4 campos:
etiqueta operacin operando comentario
No se puede utilizar un nombre que coincida con una palabra reservada o directiva del ensamblador. Si el nombre incluye un punto, entonces el punto debe ser el primer carcter. Campo operacin: Contiene el nemotcnico de la instruccin, que es de 2 a 6 caracteres. Campo operando: Contiene la posicin o posiciones donde estn los datos que van a ser manipulados por la instruccin. Campo comentario: Se utiliza para documentar el cdigo fuente del ensamblador. Debe separarse del ltimo campo por al menos un espacio e iniciar con ;. Cuando inicia un comentario en una lnea sta deber tener en la primera columna el carcter ;.
MODOS DE DIRECCIONAMIENTO Y GENERACIN DEL CDIGO OBJETO Generacin de la direccin de la instruccin. Todos los registros internos del 8086/8088 son de 16 bits. El bus de direccin es de 20 bits, por lo que se usa ms de un registro interno para generar la direccin de 20 bits. Los 2 registros usados para la direccin de la instruccin son el IP y el CS. Se combinan en una forma especial para generar la direccin de 20 bits.
direccin de 20 bits = 1610 * CS + IP
3. LENGUAJE ENSAMBLADOR DEL MICROPROCESADOR LUIS URIETA PREZ Y PABLO FUENTES RAMOS
3 -11
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
Esta es la direccin en memoria desde la cual la nueva instruccin debe buscarse. Al registro IP se le refiere como offset, el registro CS * 1610 apunta a la direccin de inicio o segmento en memoria desde el cual se calcula el offset . La Figura A muestra grficamente cmo se calcula la direccin de 20 bits.
CS*16
+
IP
Direccin de 20 bits
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. LENGUAJE ENSAMBLADOR DEL MICROPROCESADOR LUIS URIETA PREZ Y PABLO FUENTES RAMOS
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
El valor de COUNT es una constante. Es usada como el valor offset en el clculo de la direccin de 20 bits El 8086/8088 siempre usa un registro de segmento cuando calcula una direccin fsica. Cul registro se debe usar para esta instruccin? Respuesta: DS En la Figura B, se muestra el clculo de la direccin desde la cual se tomar el dato que se carga en CX.
DS*16 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 CX, ES: COUNT
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 CX, ES: COUNT
3. LENGUAJE ENSAMBLADOR DEL MICROPROCESADOR LUIS URIETA PREZ Y PABLO FUENTES RAMOS
3 -13
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
Direccionamiento de Registro Indirecto Con el modo de direccionamiento de registro ndice, la direccin offset de 16 bits est contenida en un registro base o registro ndice. Esto es, la direccin reside en el registro BX, BP, SI o DI. Ejemplo:
MOV 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 AX, COUNT [DI] COUNT = DI = 0378H 04FAH 0872H
Si:
Entonces, la direccin offset de 16 bits es 0872H Direccionamiento de Registro Indirecto con un Registro Base y un Registro ndice Este modo de direccionamiento usa la suma de dos registros internos para obtener la direccin offset de 16 bits a usarse en el clculo de la direccin de 20 bits. Ejemplos:
MOV MOV [BP] [DI], AX AX, [BX] [SI] ; el offset es BP + DI ; el offset es BX + SI
Direccionamiento de Registro ndice Indirecto con un Registro Base, un Registro ndice y un Registro Constante Este es el modo de direccionamiento ms complejo. Es idntico al modo de direccionamiento anterior, excepto que se suma una constante. Ejemplo: Suponga que tenemos los siguientes valores en los registros:
DI = BX = COUNT = 0367H 7890H 0012H 7C09H
3. LENGUAJE ENSAMBLADOR DEL MICROPROCESADOR LUIS URIETA PREZ Y PABLO FUENTES RAMOS
3 -14
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
Este modo de direccionamiento indica que el offset especificado por la suma de DI + BX + COUNT sea usado para mover el dato en memoria en el registro AX.
MOV AX, COUNT [BX] [DI]
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
Esto es, si el registro destino es de 16 bits o de 8 bits. Los siguientes 3 bits del primer byte, campo REG , determinan cul registro est involucrado. La Figura D, muestra el cdigo de seleccin del registro.
REG 000 001 010 011 100 101 110 REGISTRO DE REGISTRO 16 BITS DE 8 BITS AX AL CX CL DX DL BX BL SP AH BP CH SI DH 3 -15
3. LENGUAJE ENSAMBLADOR DEL MICROPROCESADOR LUIS URIETA PREZ Y PABLO FUENTES RAMOS
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
REG 111
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
Bit D, MOD y R/M En este ejemplo, moveremos datos desde memoria o moveremos un registro hacia o desde otro registro. Usaremos una instruccin como:
MOV 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 MOD REG R/M 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. LENGUAJE ENSAMBLADOR DEL MICROPROCESADOR LUIS URIETA PREZ Y PABLO FUENTES RAMOS
3 -16
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
Registros base e ndice especificados por R/M para operandos en memoria (MOD <> 11) R/M REGISTRO BASE REGISTRO NDICE 000 BX SI 001 BX DI 010 BP SI 011 BP DI 100 NINGUNO SI 101 NINGUNO DI 110 BP NINGUNO 111 BX NINGUNO MOD DESPLAZAMIENTO COMENTARIO 00 CERO 01 8 BITS contenido del prximo byte de La instruccin contiene un byte adicional la instruccin, signo extendido a 16 bits 10 16 bits contenidos en La instruccin contiene los prximos 2 bytes 2 bytes adicionales de la instruccin 11 Registro R/M Si MOD = 00 y R/M = 110, entonces 1. Lo expuesto arriba no se aplica 2. La instruccin contiene 2 bytes adicionales 3. La direccin offset es contenida en esos bytes FIGURA F. Definiciones para el cdigo objeto del 8086/8088 de los campos MOD y R/M
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
Cdigo Objeto para el uso de Registro Base y Registro ndice Examinemos un ltimo ejemplo para generar cdigo objeto para el 8086/8088. En ste vamos a calcular el cdigo objeto para la instruccin:
MOV CX, COUNT [BX] [SI]
Add LOW
3er. BYTE
Add HIGH
4o. BYTE
FIGURA G. Formato del cdigo objeto para una instruccin como: MOV CX, COUNT [BX] [SI]
3. LENGUAJE ENSAMBLADOR DEL MICROPROCESADOR LUIS URIETA PREZ Y PABLO FUENTES RAMOS
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]
Esto corresponde a R/M = 000, ver Figura F El segundo byte es 1000 1000 = 88 El tercer y cuarto byte corresponden al desplazamiento En este caso, el valor de COUNT = 0345H. Los ltimos 2 bytes son 4503H
Sumario del Cdigo Objeto Una pregunta que surge al programador Debo conformar los campos D, W, REG, MOD y R/M , en cada instruccin? NO, la computadora lo hace (el lenguaje ensamblador lo genera) Esta seccin se present para permitirle al programador un mejor entendimiento del trabajo interno del microprocesador 8086/8088 Interrupciones de los Servicios Bsicos de Entrada y Salida (BIOS, por sus siglas en ingls)
FUNCIN INT 21
(AH)=1 ENTRADA DESDE EL TECLADO
Esta funcin espera a que se digite un carcter en el teclado. Muestra el carcter en la pantalla (eco) y retorna el cdigo ASCII en el registro AL. (AL) = carcter ledo desde el teclado
Ejemplo:
MOV INT AH, 1 21h ;AL = dato ASCII ledo desde el teclado
(AH)=2
3. LENGUAJE ENSAMBLADOR DEL MICROPROCESADOR LUIS URIETA PREZ Y PABLO FUENTES RAMOS
3 -18
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
CURSOR
(AH)=8
;AL = carcter
(AH)=9
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. LENGUAJE ENSAMBLADOR DEL MICROPROCESADOR LUIS URIETA PREZ Y PABLO FUENTES RAMOS
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 END AH, 2H DL, 2AH 21H 20H
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. LENGUAJE ENSAMBLADOR DEL MICROPROCESADOR LUIS URIETA PREZ Y PABLO FUENTES RAMOS
3 -20
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
Con el fin de hacer ms legibles los programas, usaremos el tabulador para el espaciado. A las directivas del ensamblador se les llama tambin pseudo-operaciones. Se les conoce como directivas porque en lugar de generar instrucciones, proporcionan informacin y direcciones al ensamblador. La pseudo -operacin END marca el fin del archivo fuente.
Creacin de Archivos Fuente
El ensamblador puede usar archivos fuente que contengan caracteres ASCII estndar. Considere que no todos los procesadores de texto escriben archivos en disco usando solamente los caracteres ASCII estndar. Antes de ensamblar un programa verifique que est en cdigo ASCII . Puede ver caracteres extraos en el programa. Muchos procesadores de texto agregan informacin de formateo adicional en el archivo. El ensamblador los trata como errores. Utilice la versin no documento de su procesador de texto. Tambin se requiere una lnea en blanco despus de la instruccin END
Para ensamblar el programa:
A>MASM PROGRAMA; MICROSOFT MACRO ASSEMBLER VERSION 5.10 COPYRIGHT MICROSOFT CORP 1981, 1988. ALL RIGHTS RESERVED 49822 + 219323 BYTES SYMBOL SPACE FREE 0 WARNING ERRORS 0 SEVERE ERRORS A>
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
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
El ensamblador asigna direcciones a las instrucciones. Cada vez que hacemos un cambio al programa, debemos ensamblar nuevamente dicho programa. Considrese el siguiente programa:
3. LENGUAJE ENSAMBLADOR DEL MICROPROCESADOR LUIS URIETA PREZ Y PABLO FUENTES RAMOS
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 ENDP
; ; ; ;
WRITE _CHAR PROC MOV AH, 02 INT 21h RET WRITE _CHAR ENDP END PRINT _A_J
; activa el cdigo de la funcin para sacar CHAR ; imprime el carcter que est en DL : retorna de este procedimiento
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
; retorna al DOS
3. LENGUAJE ENSAMBLADOR DEL MICROPROCESADOR LUIS URIETA PREZ Y PABLO FUENTES RAMOS
3 -23
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
PUBLIC
WRITE_HEX
;este procedimiento convierte el byte en el registro DL a hex ;y escribe los dos dgitos hexadecimales en la posicin corriente ;del cursor ; DL byte a ser convertido a hexadecimal ;usa a: WRITE_HEX_DIGIT WRITE_HEX PUSH PUSH MOV MOV SHR CALL MOV AND CALL POP POP RET WRITE_HEX PUBLIC PROC CX DX DH, DL CX, 4 DL, CX WRITE_HEX_DIGIT DL, DH DL, 0Fh WRITE_HEX_DIGIT DX CX ENDP WRITE_HEX
; almacena registros usados en este procedimiento ; hacemos una copia del byte
;despliega el primer dgito hexadecimal ; vamos con el nibble bajo ; elimina el nibble alto ; despliega al segundo dgito hexadecimal
;este procedimiento convierte los 4 bit menos significativos de DL a un dgito hexadecimal ;y lo escribe en la pantalla ; DL los 4 bits menos significativos contienen el nmero a ser impreso ;usa a: WRITE_CHAR WRITE_HEX_DIGIT PROC PUSH DX CPM DL, 10 JAE HEX,_LETTER ADD DL, 0 JMP SHORT WRITE_DIGIT HEX_LETTER: ADD DL, A-10 WRITE_DIGIT: CALL WRITE_CHAR POP DX RET WRITE_HEX_DIGIT ENDP PUBLIC WRITE_CHAR
;este procedimiento imprime un carcter en la pantalla usando ;funcin del DOS ; DL byte a imprimir en la pantalla WRITE_CHAR PUSH MOV INT POP RET WRITE_CHAR PROC AX AH, 2 21h AX ENDP 3 -24
3. LENGUAJE ENSAMBLADOR DEL MICROPROCESADOR LUIS URIETA PREZ Y PABLO FUENTES RAMOS
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
Declara un segmento de datos que se usa para variables de memoria. El segmento creado por .DATA es _DATA .
Directiva: .MODEL SMALL
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
El agrupamiento de los segmentos STACK y DATA en un solo segmento es controlado por un mecanismo del ensamblador llamado GROUPS . El ensamblador crea un grupo llamado DGROUP que a su vez crea un solo segmento con .DATA y STACK.
STACK
3. LENGUAJE ENSAMBLADOR DEL MICROPROCESADOR LUIS URIETA PREZ Y PABLO FUENTES RAMOS
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 PUBLIC DATOSSUM DATOSSUM DB 01h, 02h, 03h, 04h, 05h DB 06h, 07h, 08h, 09h, OAh .CODE .SUMA
; asigna un STACK de 1K
PROC MOV MOV XOR XOR MOV AX, DGROUP DS, AX BX, BX DL, DL CX, OAh ; ndice de acceso al rea de datos ; acumulador de datos ; nmero de datos a procesar
ACUMULA: ADD DL, DATOSSUM [BX ] INC BX LOOP ACUMULA MOV INT MOV INT SUMA AH, 02h 21h AH, 4Ch 21h ENDP END ; ; ; ; ; DL contiene el resultado despliega el resultado AL = dato a desplegar salida al DOS
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. LENGUAJE ENSAMBLADOR DEL MICROPROCESADOR LUIS URIETA PREZ Y PABLO FUENTES RAMOS
3 -27
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
Ejecucin:
R T T T T E
EJERCICIO 2.
3. LENGUAJE ENSAMBLADOR DEL MICROPROCESADOR LUIS URIETA PREZ Y PABLO FUENTES RAMOS
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 201 202
Diagrama de flujo:
COMPARA
AL [200]
(1)
AL vs [201]
(2) NO
AL [201] SI
AL [201]
(3)
FIN
(5)
SII:
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
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.
EJERCICIO 4. Sumar 2 nmeros binarios de 24 bits y almacenar el resultado a partir de la localidad de memoria 0206h. Los bits menos significativos de los nmeros empiezan en las localidades 0200h y 0203h.
SOLUCIN Se puede ver grficamente el contenido de las localidades 0200h a 0208h para comprender mejor el enunciado:
200 201 202 203 204 205 206 207 208 N0 N1 N2 M0 M1 M2 N0 + M 0 N1 + M 1 + C N2 + M 2 + C _E 200 203 206 AA BB 00 65 AA BB 00 66 AA BB 00 66
_E _E
Para introducir los datos, usamos la instruccin E (examina y/o cambia el contenido de la localidad de memoria
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
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
La instruccin que usaremos ser RLC BX, 1, 8 veces. Para este tipo de repeticiones usaremos al registro CX como contador.
SOLUCIN Diagrama de flujo:
ROTA8
BX 43A6
CX 08
nmero inicial
RLC BX, 1
3. LENGUAJE ENSAMBLADOR DEL MICROPROCESADOR LUIS URIETA PREZ Y PABLO FUENTES RAMOS
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 .
NOTA: En 0108 saltamos hacia atrs 4 localidades de memoria, es decir: 0000 0100 Como el salto es hacia atrs, lo ponemos como negativo en notacin complemento a 2, es decir: C1 = C2 = 1111 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.
EJERCICIO 7. Calcular la suma verificacin de una serie de datos. La longitud de la serie de datos est en la localidad 201h y la serie comienza en la localidad 202h. Almacenar la suma verificacin en la localidad 200h. La suma verificacin se forma haciendo la suma O exclusiva entre todos los nmeros de la serie.
SUGERENCIA: Utilice CX como contador.
SOLUCIN
200 201 202 Suma verificacin longitud inicio
Diagrama de flujo:
SUMA VERIF
CH 0 CL [201]
BX 202 AL [BX]
Direccin de inicio
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
02
Retorno al DOS
Si utilizamos la tabla de instrucciones y sus respectivos cdigos de DEBUG, podemos capturar en lenguaje de mquina el programa. Estando en DOS teclear: C>DEBUG _E 100 _R IP,100 _T
Introducimos el programa. Para ejecutarlo, colocamos 100 en el registro IP: despus, para ejecutar el programa paso a paso usamos el comando T: etc. 3 -33
3. LENGUAJE ENSAMBLADOR DEL MICROPROCESADOR LUIS URIETA PREZ Y PABLO FUENTES RAMOS
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
EJERCICIO 8. Calcular la suma de una serie de nmeros de 16 bits. La longitud de la serie est en la localidad de memoria 0202 y la serie empieza en la localidad de memoria 0203. Almacenar la suma en las localidades de memoria 0200 y 0201 . Considere que la adicin puede estar contenida en 16 bits
SOLUCIN
200 201 202 8 bits menos significativos 8 bits ms significativos Longitud = 3
N0
02 (bits ms significativos) 01 (bits menos significativos)
N1
02 (bits ms significativos) 01 (bits menos significativos) 02 (bits ms significativos)
N2
Diagrama de flujo:
INICIO
CONTADOR
AX AX + [BX] + carry
BX BX + 2
CX CX - 1 NO CX = 0?
3. LENGUAJE ENSAMBLADOR DEL MICROPROCESADOR LUIS URIETA PREZ Y PABLO FUENTES RAMOS
3 -34
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
SI [200] AL
[201] AH
FIN
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
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 00 02 20
02
EJERCICIO 9. Determinar el nmero de elementos que sean positivos, negativos y cero. La longitud del bloque est en la localidad 0203, el bloque inicia en la localidad 0204. En la localidad 0200 deposite el nmero de elementos negativos, en la 0201 el nmero de elementos ceros y en la 0202 el nmero de elementos positivos.
SOLUCIN En forma grfica, se tiene:
200 201 202 203 204 Nmero de elementos NEGATIVOS Nmero de elementos CERO Nmero de elementos POSITIVOS LONGITUD INICIO
3. LENGUAJE ENSAMBLADOR DEL MICROPROCESADOR LUIS URIETA PREZ Y PABLO FUENTES RAMOS
3 -35
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
Diagrama de flujo:
INICIO
AL [BX] AL vs 00 SI AL 0 negativos [200] [200]+1 NO cero [201] [201]+1 NO Z=1 SI positivos [202] [202]+1
3. LENGUAJE ENSAMBLADOR DEL MICROPROCESADOR LUIS URIETA PREZ Y PABLO FUENTES RAMOS
3 -36
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
NO:
INC JMP
[202] SIGUE
EJERCICIO 10. Encontrar al elemento ms pequeo de un bloque de datos. La longitud del bloque est en la localidad 4001 y el bloque inicia en la localidad 4002. Almacene el resultado en la localidad 4000, considerando nmeros sin signo.
SOLUCIN Grficamente, se tiene:
4000 4001 4002 MENOR LONGITUD DATO 1 DATO 2
DATO n
Diagrama de flujo
MENOR
DI DI+1
<
AL vs [DI]
AL [DI] CX CX-1
3. LENGUAJE ENSAMBLADOR DEL MICROPROCESADOR LUIS URIETA PREZ Y PABLO FUENTES RAMOS
3 -37
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
X:
Y:
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 201 DATO # DE UNOS DE DATO
Diagrama de flujo
UNOS
X
Rotamos hacia la izquierda AL REG
C = SI [201] [201]+1
N O
CX CX-1
N O
CX = 0? SI FIN
3. LENGUAJE ENSAMBLADOR DEL MICROPROCESADOR LUIS URIETA PREZ Y PABLO FUENTES RAMOS
3 -38
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
X: Y:
EJERCICIO 12. Determinar la longitud de un mensaje ASCII. Los caracteres son de 7 bits, el octavo es 0. La cadena de caracteres en la cual viene incluido el mensaje inicia en la localidad 201. El mensaje inicia con STX (02h) y finaliza con ETX (03h) Colocar la longitud del mensaje en la localidad 200 (no contar STX ni ETX)
SOLUCIN Grficamente, se tiene:
200 201 202 203 LONGITUD DEL MENSAJE LONGITUD DEL MENSAJE INICIO 02h STX
Diagrama de flujo
LONG
[200] 00 DI 202
AL [DI] AL vs ETX
SI Z = 1? N O
FIN
3. LENGUAJE ENSAMBLADOR DEL MICROPROCESADOR LUIS URIETA PREZ Y PABLO FUENTES RAMOS
3 -39
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
FIN:
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 [200] SI FIN Si AL = SPACE No SI SI+1 SI SI-1
No AL vs SPACE
3. LENGUAJE ENSAMBLADOR DEL MICROPROCESADOR LUIS URIETA PREZ Y PABLO FUENTES RAMOS
3 -40
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
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. LENGUAJE ENSAMBLADOR DEL MICROPROCESADOR LUIS URIETA PREZ Y PABLO FUENTES RAMOS
3 -41
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
2E 20h 20h
PUNTO DECIMAL
Diagrama de flujo
PUNTO AH = BLANCO BX 201 CH 0 CL [200] AH 20
R2
BX BX+1 [BX] AH CX CX-1 SII NO
R1
AL [BX] AL vs 2E
Z=1 NO BX BX+1
CX = 0 SI FIN
CX CX-1
NO CX = 0 SI FIN
3. LENGUAJE ENSAMBLADOR DEL MICROPROCESADOR LUIS URIETA PREZ Y PABLO FUENTES RAMOS
3 -42
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
SII: R2:
EJERCICIO 15. Verificar la paridad par de caracteres ASCII. La longitud de la cadena est en la localidad 201h e inicia en la 202h. Si la paridad de todos los caracteres de la cadena es correcta, borrar el contenido de la localidad 200h; en caso contrario colocar FF
SOLUCIN Grficamente, se tiene:
200 00 si la paridad es correcta FF si la paridad es incorrecta Longitud de la cadena Inicia la cadena
201 202
Fin de la cadena
3. LENGUAJE ENSAMBLADOR DEL MICROPROCESADOR LUIS URIETA PREZ Y PABLO FUENTES RAMOS
3 -43
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
Diagrama de flujo
PARIDAD
S_PARIDAD
BX 202 CH 0 CL [201]
PILA CX CX 8 AH 0
X
AL [BX] S_PARIDAD BX BX+1 CX CX-1 AH AH+1 CX = 0 NO FIN C=0 SI AH (C) SI NO Verifica y marca con 00 o FF la localidad 200 AL (C)
R2
NO C=1 SI
CX CX-1
NO C=1 SI [200] FF
CX PILA
Retorno de subrutina
3. LENGUAJE ENSAMBLADOR DEL MICROPROCESADOR LUIS URIETA PREZ Y PABLO FUENTES RAMOS
3 -44
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
R2: SII:
NO:
MOV MOV RCR JNC ADD LOOPNZ RCR JNC MOV POP RET
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 00 si la cadena 1 es menor o igual a la cadena 2 FF si la cadena 1 es mayor que la cadena 2 Longitud de las cadenas Inicia la cadena 1
201 202
252
Inicia la cadena 2
NOTA: En lugar de utilizar los dos registros de ndice, vamos a utilizar un apuntador ms un desplazamiento.
3. LENGUAJE ENSAMBLADOR DEL MICROPROCESADOR LUIS URIETA PREZ Y PABLO FUENTES RAMOS
3 -45
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
Diagrama de flujo
COMPARA
AL [DI] AL vs [DI+10h]
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
;asumimos que cadena 1 es menor o igual a cadena 2 ;DI apunta al inicio de la cadena 1 ;CX igual a la longitud de las cadenas ;apunta a la otra cadena
EJERCICIO 17.
3. LENGUAJE ENSAMBLADOR DEL MICROPROCESADOR LUIS URIETA PREZ Y PABLO FUENTES RAMOS
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:
Cdigo GRAY
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
DEC
5000 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
AH
AL
DATO
3. LENGUAJE ENSAMBLADOR DEL MICROPROCESADOR LUIS URIETA PREZ Y PABLO FUENTES RAMOS
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
FIN
R:
MOV LSR LSR LSR LSR CMP JE INC JMP CONVIERTE: MOV AND END
3. LENGUAJE ENSAMBLADOR DEL MICROPROCESADOR LUIS URIETA PREZ Y PABLO FUENTES RAMOS
3 -48
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
Invertir el orden de sus operandos Utilizar las banderas en forma incorrecta Considerar la lgica en forma errnea Confundir direcciones y datos Manejar errneamente matrices y cadenas. El problema suele encontrarse en que se exceden los lmites Organizar el programa en forma inadecuada. Inicio de contadores, apuntadores, no almacenar resultados, etc. La mejor manera de acelerar los programas del microprocesador consiste en reducir el nmero de saltos .
Ejemplos de solucin de problemas utilizando software y hardware. Ejemplo 1. 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,
Calcular el valor promedio de los valores ledos e indicarlo en un exhibidor numrico. Obtener el valor mnimo y desplegarlo en un exhibidor numrico. Adquirir el valor mximo y presentarlo en un exhibidor numrico. Iniciar nuevamente el ciclo despus de una hora.
SOLUCIN
Se necesita una m emoria 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 m emoria de programable de slo l ectura (PROM ) para el programa.
3. LENGUAJE ENSAMBLADOR DEL MICROPROCESADOR LUIS URIETA PREZ Y PABLO FUENTES RAMOS
3 -49
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
8255
PA PB PC
8255
PA PB
A/D
NO USADOS PC
Localidades
8255 E/S
Direccin
40 41 42 43
Contenido
VMIN = PA VPROM = PB VMX = PC C A/D = CONTROL
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
Lee 100 valores del convertidor A/D cada segundo Obtiene el valor mnimo
V_MIN
3. LENGUAJE ENSAMBLADOR DEL MICROPROCESADOR LUIS URIETA PREZ Y PABLO FUENTES RAMOS
3 -50
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
V_MAX
V_PROM
DESPLIEGA
Pone en los exhibidores numricos los valores calculados Temporiza una hora y volvemos nuevamente a ejecutar el proceso
RETARDO_1H
Ejemplo 2.
Se tienen 2 mquinas herramientas que aceptan informacin en cdigo Gray y en cdigo Exceso-3. La mquina que les proporciona la informacin trabaja en cdigo binario y alimenta cada segundo un dato , consistente en 2 nibbles. Resuelva el problema de conversin de cdigo con un microprocesador.
SOLUCIN
3. LENGUAJE ENSAMBLADOR DEL MICROPROCESADOR LUIS URIETA PREZ Y PABLO FUENTES RAMOS
3 -51
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
Localidades
PROM
Las ltimas de 1K
8255 E/S
Direccin
40 41 42 43
Contenido
MAQ1 = PA MAQ2 = PB MAQ3 = PC CONTROL Entrada Salida Salida
Diagrama de flujo
CONV .ASM
INICIACION
Define puerto A como entrada y los puertos B y C como salida Lee dato binario de la mquina 1
CONV_GRAY
Se convierte dato a cdigo GRAY, usando tablas de conversin y se pone el resultado en la mquina 2 Se convierte dato a cdigo EXC3, usando tablas de conversin y se pone el resultado en la mquina 3 Temporizamos un segundo y volvemos a iniciar el proceso
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. LENGUAJE ENSAMBLADOR DEL MICROPROCESADOR LUIS URIETA PREZ Y PABLO FUENTES RAMOS
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 Bus de Direccin DB Bus de Datos DB PROM 2Kx8
AB
8255 PA En los 4 bits ms significativos cone ctamos los sensores de los procesos
PB
a1, a 0
PC No se usa
REGISTRO DE CONTROL
Vamos a ubicar la PROM en las ltimas localidades del espacio de direccionamiento y al 8255 en las primeras localidades del espacio de ENTRADA/SALIDA, como se indica en la siguiente tabla:
Direccin Puerto de E/S 0 A Entrada 1 B Salida 2 C No usado 3 Registro de control
3. LENGUAJE ENSAMBLADOR DEL MICROPROCESADOR LUIS URIETA PREZ Y PABLO FUENTES RAMOS
3 -53
COMPUTACIN V
MICROPROCESADORES Y MICROCOMPUTADORAS
Diagrama de estados:
1/verde INICIO A
1/verde B
1/verde C
1/verde D
0/rojo 0/rojo
0/rojo
0/rojo
Subrutinas requeridas:
INICIACIN ACTIVA_ROJO ACTIVA_VERDE UN_SEGUNDO
Diagrama de flujo
INICIACION
AL
[03] AL
RET
3. LENGUAJE ENSAMBLADOR DEL MICROPROCESADOR LUIS URIETA PREZ Y PABLO FUENTES RAMOS
3 -54