You are on page 1of 11

85

MDULO III PROGRAMACIN DEL MICROPROCESADOR


El mdulo III est conformado por las unidades 7 y 8. El estudio de estas unidades, permite desarrollar en el estudiante las competencias necesarias en la solucin de problemas, haciendo uso de los microprocesadores. El desarrollo de la solucin implicar, la codificacin de algoritmos en el lenguaje ensamblador del microprocesador Intel 80286 y la implementacin del programa codificado en un microprocesador de este tipo. El programa as codificado, se ejecutar en un software simulador, el cual proporciona un modelo real de un microprocesador Intel 80286. Objetivo del Mdulo III: Implementar con sentido lgico y creativo, programas especficos, haciendo uso de los microprocesadores. El mdulo III est estructurado en dos unidades: Unidad 7: Unidad 8: Programacin en Lenguaje Ensamblador Implementacin de Programas en el Microprocesador

86

UNIDAD 7
Programacin en Lenguaje Ensamblador Los programas que convierten un programa de usuario escrito en algn lenguaje, a otro lenguaje, se llaman traductores. El leguaje en el que est escrito el programa original se llama lenguaje fuente, y el lenguaje a que se convierte se llama lenguaje objeto o lenguaje de mquina. El lenguaje fuente es en lo esencial una representacin simblica (lenguaje mnemotcnico) de un lenguaje de mquina numrico, el traductor se llama lenguaje ensamblador. Las computadoras siguen utilizando el lenguaje de mquina para procesar los datos, pero los programas ensambladores traducen antes los smbolos de cdigo de operacin especificados a sus equivalentes en lenguaje de mquina. Este proceso es al que se le denomina ensamblado de cdigo. Para facilitar la elaboracin de programas a este nivel, se desarrollaron los Ensambladores y el Lenguaje Ensamblador. En la unidad 5 se presenta el uso del lenguaje ensamblador, especficamente el correspondiente al microprocesador 80286. El estudio de esta unidad afianzar en el estudiante los conocimientos obtenidos en el curso, especialmente en lo que respecta a la programacin Objetivo de la Unidad 7: Codificar algoritmos, utilizando un lenguaje ensamblador y las tcnicas apropiadas, para la resolucin de un problema especfico. Contenido de la Unidad 7: El contenido de la unidad contempla el estudio de los siguientes temas: Lenguaje ensamblador, Lenguaje de mquina Mnemnicos, Conjunto de instrucciones de un microprocesador especfico Programacin modular Codificacin de algoritmos en un lenguaje ensamblador especfico

87 Actividades recomendadas para el estudio del contenido de la unidad 7. 1.- Lea el captulo 7 del texto Los Microprocesadores Intel, B. B. Brey. 2.- Lea los siguientes contenidos tericos: Lenguaje de Mquina Es el sistema de cdigos directamente interpretable por un circuito microprogramable, como el microprocesador de un ordenador o el microcontrolador de un autmata (un PIC). Este lenguaje est compuesto por un conjunto de instrucciones que determinan acciones a ser tomadas por la mquina. Un programa de computadora consiste en una cadena de estas instrucciones de lenguaje de mquina (ms los datos). Estas instrucciones son normalmente ejecutadas en secuencia, con eventuales cambios de flujo causados por el propio programa o eventos externos. El lenguaje de mquina es especfico de cada mquina o arquitectura de la mquina, aunque el conjunto de instrucciones disponibles pueda ser similar entre ellas. http://es.wikipedia.org/wiki/Lenguaje_m%C3%A1quina

Mnemnico En Informtica un Mnemnico es una palabra que sustituye a un cdigo de operacin (Lenguaje de mquina), con lo cual resulta ms fcil la programacin, es de aqu de donde resulta el concepto de lenguaje ensamblador. Un ejemplo comn de mnemnico es la instruccin MOV, que le indica al microprocesador que debe de mover datos de un lugar a otro. El microprocesador no entiende palabras, sino que nmeros binarios, por lo que es necesario la traduccin del mnemnico a cdigo objeto. http://es.wikipedia.org/wiki/Mnem%C3%B3nico

Lenguaje Ensamblador. Una CPU puede interpretar y ejecutar instrucciones de mquina. Estas instrucciones son, simplemente, nmeros binarios almacenados en el computador. Sin un programador quisiera programar directamente en lenguaje de mquina, necesitara introducir los programas como datos binarios. Considere la sencilla sentencia BASIC: N=I+J+K Suponga que queremos programar esta sentencia en un lenguaje de mquina y dar a I, J y K los valores iniciales 2,3, y 4, respectivamente. La forma de hacer esto se muestra en la figura 7.1a. El programa empieza en la posicin 101

88 (hexadecimal). Se reserva memoria parea las cuatro variables a partir de la posicin 201. El programa consta de cuatro instrucciones: 1. 2. 3. 4. Cargar el contenido de la posicin 201 en el acumulador (AC). Sumar a AC el contenido de la posicin 202. Suma a AC el contenido de la posicin 203. Memorizar el contenido de AC en la posicin 204.

Esto es claramente un proceso tedioso y muy susceptible de errores. Una ligera mejora consiste en redactar el programa en hexadecimal, e lugar de en binario, ver figura 7.1b. Para que la mejora sea ms significativa, podemos hacer uso de nombres simblicos o mnemotcnicos de las instrucciones. El resultado es el programa simblico mostrado en la figura 7.1c. Cada lnea sigue representando una posicin de memoria, y consta de tres campos separados por espacios. El primer campo contiene la direccin de una posicin. El segundo campo contiene el smbolo de tres letras que representa su cdigo de operacin. Si se trata de una instruccin que hace referencia a memoria, un tercer campo contiene la direccin. Para memorizar un dato concreto en una posicin dada, nos inventamos una pseudoinstruccin con el smbolo DAT. Esta es meramente un indicador de que el tercer campo de la lnea contiene un nmero en hexadecimal a memorizar en la posicin que especifica el primer campo. El uso de programas simblicos hace la vida mucho ms fcil, pero es aun engorroso. En particular hay, hay que dar una direccin absoluta para cada palabra. Un procedimiento mejor, es emplear direcciones simblicas. Esto se ilustra en la figura 7.1d. Cada lnea sigue teniendo tres campos. El primero sigue siendo para la direccin, pero se utiliza un smbolo en lugar de una direccin numrica absoluta. Algunas lneas carecen de direccin, indicando que la direccin de dicha lnea es uno ms que la direccin precedente. Para las instrucciones que hacen referencia a memoria, el tercer campo contiene tambin una direccin simblica. Con este ltimo refinamiento, hemos inventado un lenguaje ensamblador. Los programas escritos en lenguaje ensamblador (programas en ensamblador) se traducen a lenguaje de mquina mediante un ensamblador. El desarrollo de los lenguajes ensambladores fue un logro importante en la evolucin de la tecnologa de computadores. Fue el primer paso hacia los lenguajes de alto nivel de hoy en da.

89

Direccin 101 102 103 104

0010 0001 0001 0011

Contenido 0010 0000 0010 0000 0010 0000 0010 0000

0001 0010 0011 0100

101 102 103 104

LDA ADD ADD STA

201 202 203 204

201 202 203 204

0000 0000 0000 0000

0000 0000 0000 0000

0000 0000 0000 0000

0010 0011 0100 0000

201 202 203 204

DAT DAT DAT DAT

2 3 4 0

(a) Programa en binario


Direccin 101 102 103 104 Contenido 2201 1202 1203 3204 Etiqueta FORMUL

(c) Programa simblico


Operacin LDA ADD ADD STA Operando I J K N

201 202 203 204

0002 0003 0004 0000

I J K N

DATA DATA DATA DATA

2 3 4 0

(a) Programa en hexadecimal

(c) Programa en ensamblador

Figura 7.1. Clculo de la frmula N = I + J + K. Stallings, 2000.pp. 346.

Conjunto de instrucciones Un conjunto de instrucciones repertorio de instrucciones ISA (del ingls instruction set architecture -arquitectura del conjunto de instrucciones-) es una especificacin que detalla las instrucciones que una CPU de un ordenador puede entender y ejecutar, o el conjunto de todos los comandos implementados por un diseo particular de una CPU. El trmino describe los aspectos del procesador generalmente visibles a un programador, incluyendo los tipos de datos nativos, las instrucciones, los registros, la arquitectura de memoria y las interrupciones, entre otros aspectos. La arquitectura del conjunto de instrucciones (ISA) se emplea a veces para distinguir este conjunto de caractersticas de la microarquitectura, que son los elementos y tcnicas que se emplean para implementar el conjunto de instrucciones. Entre estos elementos se encuentras las microinstrucciones y los sistemas de cach. Procesadores con diferentes diseos internos pueden compartir un conjunto de instrucciones; por ejemplo el Intel Pentium y AMD Athlon implementan

90 versiones casi idnticas del conjunto de instrucciones x86, pero tiene diseos internos completamente opuestos. http://es.wikipedia.org/wiki/Conjunto_de_instrucciones

Diseo del repertorio de instrucciones Uno de los aspectos ms interesantes y ms analizado del diseo de un computador, es el diseo del repertorio de instrucciones del lenguaje de mquina. El diseo de un repertorio de instrucciones es muy complejo, ya que afecta a muchos aspectos del computador. El repertorio de instrucciones define muchas de las funciones realizadas por la CPU y tiene, por tanto, un efecto significativo sobre la implementacin de la misma. El repertorio de instrucciones es el medio que tiene el programador para controlar la CPU. Algunos de los aspectos ms bsicos relativos al diseo son los siguientes: Repertorio de operaciones: Cuntas y qu operaciones considerar, y cun complejas deben ser. Tipos de datos: Los distintos tipos de datos con los que se efectan las operaciones. Formato de instrucciones: Longitud de la instruccin (bits), nmero de direcciones, tamao de los distintos campos, etc. Registros: Nmero de registros de la CPU que pueden ser referenciados por instrucciones, y su uso. Direccionamiento: El modo o modos de direccionamiento mediante los cuales puede especificarse la direccin del operando. Stallings, 2000. pp. 318.

El microprocesador Intel 80286 El Intel 80286 (llamado oficialmente iAPX 286, tambin conocido como i286 o 286) es un microprocesador de 16 bits de la familia x86, que fue lanzado al mercado por Intel el 1 de febrero de 1982. Las versiones iniciales del i286 funcionaban a 6 y 8 MHz, pero acab alcanzando una velocidad de hasta 20 MHz. El i286 fue el microprocesador ms empleado en los IBM PC y compatibles entre mediados y finales de los aos 80. El i286 funciona el doble de rpido por ciclo de reloj que su predecesor (el Intel 8086) y puede direccionar hasta 16 Mbytes de memoria RAM, en contraposicin a 1 Mbyte del i8086. En mquinas DOS, esta memoria adicional solo poda ser accedida a travs de emulacin de memoria extendida. De todos modos, pocos ordenadores basados en el i286 tuvieron ms de 1 Mbyte de memoria. El i286 fue diseado para ejecutar aplicaciones multitarea, incluyendo comunicaciones (como centralitas automatizadas), control de procesos en tiempo real y sistemas multiusuario. Para ello se le aadi un modo protegido,

91 en el cual existan cuatro anillos de ejecucin y divisin de memoria mediante tablas de segmentos. En este modo trabajaban las versiones de 16 bits del sistema operativo OS/2. A pesar de su gran popularidad, hoy en da quedan pocos ordenadores con el i286 funcionando. El sucesor del i286 fue el Intel 80386, de 32 bits. http://es.wikipedia.org/wiki/Intel_80286 3.- En el ejemplo 7.1, se muestra un programa fuente que permite desplegar un mensaje en pantalla mediante llamadas al DOS. Ejemplo 7.1: Programa fuente que imprime un mensaje en la pantalla.

Aqu se tratar todo lo concerniente con el lenguaje ensamblador y el conjunto de directivas del Microsoft Macro Assembler v4.0. Si bien esto puede resultar bastante extenso y complejo, aqu slo se describirn las instrucciones y directivas bsicas. Para comenzar se presenta un pequeo ejemplo que ilustra el formato del programa fuente. Este ejemplo est completamente desarrollado en lenguaje ensamblador que usa servicios o funciones de MS-DOS (system calls) para imprimir el mensaje Hola mundo en pantalla. ; HOLA.ASM ; Programa clasico de ejemplo. Despliega una leyenda en pantalla. STACK SEGMENT STACK ; Segmento de pila DW 64 DUP (?) ; Define espacio en la pila STACK ENDS DATA SEGMENT ; Segmento de datos SALUDO DB "Hola mundo",13,10,"$" ; Cadena DATA ENDS CODE SEGMENT ; Segmento de Cdigo ASSUME CS:CODE, DS:DATA, SS:STACK

INICIO: MOV AX,DATA MOV DS,AX MOV DX,OFFSET SALUDO MOV AH,09H INT 21H MOV AH,4CH INT 21H CODE ENDS END INICIO

; Punto de entrada al programa ; Pone direccin en AX ; Pone la direccion en los registros ; Obtiene direccion del mensaje ; Funcin: Visualizar cadena ; Servicio: Funciones alto nivel DOS ; Funcin: Terminar

; Marca fin y define INICIO

92 La descripcin del programa es como sigue: Las declaraciones SEGMENT y ENDS definen los segmentos a usar. La variable SALUDO en el segmento DATA, define la cadena a ser desplegada. El signo de dlares al final de la cadena (denominado centinela) es requerido por la funcin de visualizacin de la cadena de MS-DOS. La cadena incluye los cdigos para carriage-return y line-feed. La etiqueta INICIO en el segmento de cdigo marca el inicio de las instrucciones del programa. La declaracin DW en el segmento de pila define el espacio para ser usado por el stack del programa. La declaracin ASSUME indica que registros de segmento se asociarn con las etiquetas declaradas en las definiciones de segmentos. Las primeras dos instrucciones cargan la direccin del segmento de datos en el registro DS. Estas instrucciones no son necesarias para los segmentos de cdigo y stack puesto que la direccin del segmento de cdigo siempre es cargada en el registro CS y la direccin de la declaracin del stack segment es automticamente cargada en el registro SS. Las ltimas dos instrucciones del segmento CODE usa la funcin 4CH de MS-DOS para regresar el control al sistema operativo. Existen muchas otras formas de hacer esto, pero sta es la ms recomendada. La directiva END indica el final del cdigo fuente y especifica a START como punto de arranque.

5.- El ejemplo 7.2 muestra la importancia del uso de las directivas PUBLIC y EXTRN en la programacin modular. Ejemplo 7.2: Uso de directivas PUBLIC y EXTRN.

A continuacin se presentan dos mdulos de programa: MAIN y TASK, el primer mdulo corresponde al mdulo principal, mientras que el segundo al mdulo que contiene una rutina. Ambos mdulos son archivos que se editan por separado, se ensamblan por separado, pero se ligan juntos.

93 MODULO PRINCIPAL: MAIN.ASM NAME MAIN PUBLIC EXIT EXTRN PRINT:NEAR STACK SEGMENT WORD STACK 'STACK' DW 64 DUP(?) STACK ENDS DATA DATA CODE START: MOV AX, DATA MOV DS, AX JMP PRINT EXIT: MOV AH, 4CH INT 21H CODE ENDS END START ; carga localizacin del segmento ; en el registro DS ; va a PRINT en el otro modulo SEGMENT WORD PUBLIC 'DATA' ENDS SEGMENT BYTE PUBLIC 'CODE' ASSUME CS:CODE, DS:DATA

SUBMODULO: TASK.ASM NAME TASK PUBLIC PRINT EXTRN EXIT:NEAR DATA SEGMENT WORD PUBLIC 'DATA' ENTRADA DB "Entrando a un submodulo....",13,10,"$" SALIDA DB ".......saliendo del submodulo.",01,07,13,10,"$" DATA ENDS CODE PRINT: MOVE AH,06H ; Funcin para borrar pantalla MOV AL,0 ; todas las lneas MOV CX,0 ; de 0,0 MOV DH,24D MOV DL,79D MOV BH,0 ; atributo en lneas vacas INT 10H ; Ser vicio de e/s vdeo MOV DX, OFFSET ENTRADA MOV AH,09H INT 21H MOV DX, OFFSET SALIDA INT 21H SEGMENT BYTE PUBLIC 'CODE' ASSUME CS:CODE, DS:DATA

94 JMP ENDS END EXIT ; Regresa al otro modulo

CODE

Ejercicios propuestos

1.- Codifique una rutina en el lenguaje ensamblador del 80286 que permita el ingreso de caracteres, verificando si se ha oprimido una tecla pero sin esperar que ocurra. Si esto ha ocurrido entonces devuelve su codificacin ASCII en un registro; en caso contrario devuelve cero. 2.- Considere una cadena como una secuencia de caracteres terminada por un byte cero, y se requiere calcular su longitud. Con base a lo antes planteado, codifique en el lenguaje ensamblador 80286 un algoritmo que permita calcular la longitud de la cadena de caracteres.

Consulta en otros libros

[Stallings 2000] Incluye el repertorio de instrucciones de dos familias de computadores: el Pentium II de Intel y el Power PC. [Englander 2002] Incluye la descripcin del conjunto de instrucciones de la familia x86.

 Consulta en la Web
http://proton.ucting.udg.mx/dpto/maestros/mateos/novedades/ensamblador/68H C11.html:Contiene informacin interesante relacionada con el lenguaje ensamblador. http://www.alpertron.com.ar/80286.HTM: Describe el microprocesador 80286 y las instrucciones adicionales que controlan el sistema de memoria virtual.

Ejercicios de Autoevaluacin

1.- Desarrolle un procedimiento llamado SUMS, que permita sumar el valor del contenido de los registros BX, CX y DX con el contenido de AX. Utilice la definicin de procedimiento cercano (NEAR).

95 2.-Codifique un programa que despliegue OK en la pantalla del monitor, utilizando para ello el procedimiento DISP mostrado a continuacin: DISP PROC MOV INT RET ENDP NEAR AH, 2 21H

DISP

Respuesta a los Ejercicios de Autoevaluacin

1.- El procedimiento es el siguiente: SUMS PROC NEAR ADD AX, BX ADD AX, CX ADD AC, DX RET ENDP

SUMS

2.- A continuacin se muestra el programa: .MODEL .CODE STARTUP TINY

MOV MOV CALL MOV CALL .EXIT END

BX, OFFSET DISP DL, O BX0 DL, K BX

You might also like