Вы находитесь на странице: 1из 10

INSTITUTO TECNOLÓGICO DE NUEVO LAREDO

ING. EN SISTEMAS COMPUTACIONALES

MATERIA: UNIDAD: PRÁCTICA:


Lenguajes de Interfaz 1 3

NOMBRE DE LA PRÁCTICA: Programación del Microprocesador 80XXX

OBJETIVO: Conocer la Arquitectura del Microprocesador 80XXX y aprender a programar con


este utilizando la Computadora Personal.
Objetivos Específicos:
1.- Identificar las unidades básicas del 80XXX.
2.- Conocer los formatos de las instrucciones del 80XXX.
3.- Aprender a programar con la Computadora Personal.
MATERIAL Y EQUIPO NECESARIO:
 Computadora personal IBM o compatible
 Con cualquiera de los siguientes sistemas operativos
o DOS
o Windows 3.11
o Windows 9x (95 ó 98)
o Windows 2000
o Windows XP ó en Windows 7 usar una maquina virtual en Modo XP
o Instalado el programa DEBUG.EXE

Introducción:
La identificación de las unidades básicas de la computadora personal permite
aprovechar al máximo los recursos con que cuenta.
Así mismo es conveniente familiarizarse de cómo se muestra la información
existente en la memoria e interpretarla a nivel unos y ceros.

Correlación con los temas y subtemas del programa de estudio


vigente:

1.- Introducción al Lenguaje Ensamblador.


1.1.- Importancia de la programación en lenguaje ensamblador
1.2.- El procesador y sus registros internos.
1.3.- La memoria principal (RAM).
1.4.- El concepto de interrupciones.
1.5.- Llamadas a servicios del sistema.

Página 1 Práctica No. 3 Programación del Microprocesador 80XXX


Teoría:

La información almacenada en la memoria de la computadora ya sea en el área


de datos o programas es invariablemente binaria, por lo cual es conveniente
entender como la computadora nos muestra la información almacenada al
usuario y como la debemos interpretar, para mostrar la mayor cantidad de datos
en la pantalla es que el DEBUG al utilizarlo nos muestra en hexadecimal lo
almacenado y así por ejemplo:

Codificación Resultados
D 100,101 El despliegue puede mostrar algo como esto:
0100:0101 75 60…(Un número Hexadecimal = 4 bits)
En este ejemplo, los dos bytes en la palabra del
estado del equipo contienen los valores
hexadecimales 75 y 60. Invierta los bytes (60
75) y conviértalos a binario.

Bit: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Binario: 0 1 1 0 0 0 0 0 0 1 1 1 0 1 0 1

El comando D ( Dump = Vaciar ) es un comando del DEBUG que nos permite


vaciar el contenido de la memoria a pantalla, donde le decimos desde donde y
hasta donde deseamos vaciar, el invertir la información almacenada en la
memoria es para acostumbrarnos a la lógica de memoria inversa que utiliza la
computadora al almacenar datos en la memoria a nivel palabra ( 16 bits ) donde
en la primera localidad de memoria almacena la parte baja ( 8 bits ) y en los
siguientes 8 bits la parte alta, siendo 8 bits el estándar de almacenamiento de
información en memoria, conocido como byte ó sea 1 byte = 8 bits.
En este ejemplo se muestra la información hexadecimal en pantalla pero
internamente esta almacenada en binario, recordando que la relación entre
hexadecimal y binario es directa, es decir cada dato hexadecimal equivale a
cuatro bits y a la inversa, esto facilita hacer las conversiones rápidamente.
Asimismo un dato binario representa una información decimal y podemos
convertir de hexadecimal o binario a decimal directamente, así por ejemplo:

607516 = 6 x 163 + 0 x 162 + 7 x 161 + 5 x 160 = 2462310


0110 0000 0111 01012 = 1x214 + 1x213 + 1x26 + 1x25 + 1x24 +1x 22 + 1x20
0110 0000 0111 01012 = 2462310

De la misma manera esta información binaria puede representar un dato Octal

Página 2 Práctica No. 3 Programación del Microprocesador 80XXX


0 110 000 001 110 1012 = 0601658
ó
0110 0000 0111 01012 = 6075 en BCD EMPACADO
ó
01100000 011101012 = `u en ASCII

por lo tanto la información binaria se interpretara en el contexto en el cual se


esté trabajando.

Metodología:

El alumno utilizara los comandos básicos del DEBUG para conocer internamente
la Computadora.

Sugerencias Didácticas:

Mostrar los pasos básicos para la utilización del DEBUG en el pizarrón.

01.- Para familiarizarnos con el programa DEBUG realice


lo siguiente:

Lo primero a analizar es la información que se recibe en el monitor y para eso


analizaremos esta.
Al vaciar hacia monitor y utilizando el comando D por primera vez por default nos
muestra a partir de la localidad 0100 el contenido de 128 localidades de
memoria incluyendo esta, en 8 grupos de 16 bytes con una marca intermedia
para localizar más fácilmente la información estando al lado izquierdo la
dirección de la parte alta ( DS Segmento de Datos ) y la parte baja en el lado
derecho ( IP Apuntador de Instrucciones ).

Página 3 Práctica No. 3 Programación del Microprocesador 80XXX


0B23:0100 0B23 = Segmento de Datos
0100 = Apuntador de Instrucciones
donde juntos forman una dirección de 20 bits utilizando segmentación.

Posteriormente aparece la información hexadecimal en grupos de 8 bits, los


cuales están representados en 2 números hexadecimales mostrando en cada
línea el contenido de 16 localidades de memoria, y en el lado derecho se
muestra su equivalente ASCII de cada byte si es un dato representable.

02.- Para identificar los registros con el DEBUG, realice lo


siguiente:

Utilizando el comando r ( Registros) nos muestra en contenido de los 14


Registros de 16 bits en hexadecimal ( 4 números hexadecimales ) incluyendo el
Registro Banderas o Registro de Status del Procesador en forma individual, el
cual nos indica el valor de cada bandera en la forma siguiente:

Nombre de la Bandera Bandera = 1 Bandera = 0


Sobreflujo OV NV
Dirección DN UP
Interrupciones EI DI
Signo NG PL
Cero ZR NZ
Aritmética AC NA
Paridad PE PO
Acarreo CY NC

Ahora se mostrara como podemos modificar el contenido de un registro, por


ejemplo el AX y BX.

Página 4 Práctica No. 3 Programación del Microprocesador 80XXX


Al ir realizando estos pasos en su computadora puede probar insertando
cualesquier valor hexadecimal en estos registros, invocando el registro,
insertando el nuevo valor y posteriormente con el comando r visualizar todos o
invocar nuevamente el registro deseado el cual mostrara el ultimo valor
insertado.

03.- Para escribir un programa con el comando “E”:


Teclee los siguientes números hexadecimales utilizando el comando E ( Enter )
para introducir los datos en memoria:
B2
1
B4
2
CD
21
CD
20

Estos números constituyen un programa, por medio de teclear cada número y


después la barra espaciadora, teclee el siguiente número y así sucesivamente,
después de haber tecleado los 8 números teclee ENTER para salirse del
comando y la pantalla se verá como sigue:

El comando E debe teclearse junto con la dirección de memoria donde


deseamos guardar el programa y el comando de ejecución de programas G (Go)
por default ejecuta lo que está a partir de la localidad 100, utilizamos esta
localidad de inicio tecleando el comando E seguido de la dirección.
En esta forma estamos capturando un programa a nivel Lenguaje Maquina ( 1’s
y 0’s ) y de otra manera lo podemos hacer a nivel Lenguaje Ensamblador
utilizando el comando A ( Assembler ), con el cual podemos capturar una serie
de símbolos nemónicos los cuales son más fáciles de recordar que los números
hexadecimales que ellos representan, ya que son de dos o tres caracteres
mismos que están establecidos para las instrucciones en Lenguaje
Ensamblador, y estas le dicen al Microprocesador que operación debe hacer, su
estructura normalmente va seguida por un espacio y un número que le indican
que operación debe realizar, existiendo más combinaciones al respecto.
Expresado el programa anterior con nemónicos se verá como sigue:

mov dl,1
mov ah,2
int 21
int 20
Página 5 Práctica No. 3 Programación del Microprocesador 80XXX
Esto se ve corto pero incomprensible, ahora veremos como el comando A, hace
lo apropiado para transferir de Lenguaje Ensamblador a Lenguaje Maquina, para
lo cual teclee la letra A seguida por la dirección de inicio, para lo cual los
programas escritos con DEBUG deberán siempre iniciar en la localidad 100 por
las características de los archivos al ejecutarse, por lo tanto teclee lo siguiente:

Comentando este programa en la primera línea ( localidades 100 y 101 con


respecto al Segmento de Código CS ) se llevo a cabo la instrucción mov ( mover
), donde inicialmente esta el destino de la información y después de la coma
esta la parte fuente, donde DL es la parte baja ( bits 0 al 7 ) del registro de
trabajo DX o sea es un registro de 8 bits el cual recibe un numero 1 ( dato 8 bits
= 0000 0001 ) el cual será el nuevo valor de este registro.
En la siguiente línea ( localidades 102 y 103 ) se ejecuto una operación similar a
la anterior con respecto al registro AH ( parte alta de AX ( bits 8 al 15 ) ) y un
dato hexadecimal de un 2.
Posteriormente ( localidades 104 y 105 ) se invoca una Interrupción del DOS la
número 21 ( en hexadecimal ), la cual ejecuta la opción seleccionada en el
registro AH, cuya opción 2 realiza un brinco a una subrutina ( como un CALL o
un GOSUB en BASIC ) que imprime un carácter en pantalla, la cual se encarga
de la información pertinente a las características del monitor y así nosotros como
programadores, simplemente la invocamos, respetando que la información a
imprimir es el ASCII guardado en el registro DL , lo cual se realizo anteriormente
y cuyo código 1 se mostrara como una carita feliz en pantalla.
Finalmente (localidades 106 y 107) equivale a un brinco a una subrutina que
finaliza la ejecución del programa y regresa el control a la localidad desde donde
se mando a ejecutar el programa.
Para correr el programa utilice el comando G (Go) como sigue:

Haciendo un vaciado de las localidades de memoria 100 a la 10F utilizando el


comando D.

Página 6 Práctica No. 3 Programación del Microprocesador 80XXX


El cual muestra que lo capturado con el comando E es igual al programa
capturado con el comando A, y ahora con el comando U (Unassembled) vamos
a mostrar como el programa capturado, el cual es guardado en 1’s y O’s puede
ser visualizado en ambos formatos o sea Lenguaje Maquina y Lenguaje
Ensamblador observándose la correspondencia entre ambos.
Para desensamblar teclee lo siguiente:

El comando A pasa de Lenguaje Ensamblador a Lenguaje Maquina y el


comando U es a la inversa.
Puede probar imprimiendo caracteres diferentes, por ejemplo una B (en ASCII
un 42 Hexadecimal o un 66 decimal), para realizar esto debemos cambiar el
contenido de la localidad 101 en donde se encuentra el 01 y poner ahí un 42 16
utilizando el comando E como se muestra a continuación.

Puede repetir para varios valores ASCII, cambiando de valores para imprimir lo
que desee.

4.- Guardar un programa desde el DEBUG


Una vez escrito su programa en ensamblador desde el DEBUG, realice lo
siguiente:
 Coloque el nombre deseado para el programa (la extensión debe
ser .COM). Ejemplo:
N TAREA1.COM
 Ya que sólo Ud. sabe dónde termina en realidad el programa,
indique a DEBUG el tamaño del programa en bytes por ejemplo:
Xxxx:0100 MOV DL,01
Xxxx:0102 MOV AH,02
Xxxx:0104 INT 21
Xxxx:0106 INT 20

Página 7 Práctica No. 3 Programación del Microprocesador 80XXX


 El tamaño de este programa es de 8 bytes (desde la localidad 100h
hasta la 107h inclusive).
 Teclee R BX para mostrar el contenido del registro BX ( parte alta
del tamaño del programa ) e ingrese un 0 para limpiarlo.
 Teclee R CX para mostrar el contenido del registro CX ( parte baja
del tamaño del programa ) e ingrese el tamaño del programa.
 Grabe el programa con el comando W.
 Para leerlo puede utilizar 2 procedimientos
Teclear:
- al inicio DEBUG TAREA1.COM o
- desde el prompt del DEBUG -N TAREA1.COM y
después el comando -L (Load)

Ahora practique la utilización de algunos comandos del DOS que


introduciéndolos en un macro, se convierten en los comandos TIME y
DATE del Sistema Operativo, lo cual se utiliza como sigue:

Obtener la hora del sistema

Codificación Resultados (hexadecimal)


MOV AH, 2C CH = horas (0-23)
INT 21 CL = minutos (0-59)
DH = segundos (0-59)
DL = centésimas (0-99)

En este ejemplo para mostrar el funcionamiento, se ejecuto a las 20:53 hrs. Lo


cual se muestra en CH = 1416 = 2010 y en CL = 3516 = 5310, los segundos y
decimas se muestran en DH y DL, para poder hacer esta demostración se
utilizaron los comandos T ( Trace ) para ejecutar instrucciones sencillas y
P ( Procedure ) para ejecutar las interrupciones como una sola instrucción.

Página 8 Práctica No. 3 Programación del Microprocesador 80XXX


Obtener la fecha del sistema

Codificación Resultados (hexadecimal)


MOV AH, 2A CX = año (1980-2099)
INT 21 DH = mes (1-12)
DL = día (1-31)
AL = día de la semana (0=domingo, 1=lunes,
….)

En este ejemplo para mostrar el funcionamiento, se ejecuto el lunes 26 de


agosto del 2013. Lo cual se muestra en CX = 07DD16 = 201310 , en DH = 0816 =
0810 = agosto, DL = 1A16 = 2610, AL = 0116 = lunes, para poder hacer esta
demostración se utilizaron los comandos T ( Trace ) para ejecutar instrucciones
sencillas y P ( Procedure ) para ejecutar las interrupciones como una sola
instrucción.
Así cómo podemos leer la hora y fecha, también se puede con otras
interrupciones ajustar estos datos, además cada bit o conjunto de bits, registro
de 8 o 16 bits pueden tener un significado diferente dependiendo de lo que se
esté ejecutando y en ese contexto debe leerse.

Procedimiento(Tareas) a realizar por los alumnos:


1.- Utilización de comandos del DEBUG:

a).- Con el comando D muestre el contenido de las localidades 108 a la 10F.


b).- Con el comando R modifique los Registros para que tengan los
siguientes valores, CX = 45AF y DX = B3C5.- Muestre los Registros con su
nuevo valor.
c).- Utilizando el comando A introduzca el programa que muestra un carácter en
pantalla, modificándolo para que muestre una X en al monitor, ejecútelo con
el comando G.
d).- Modifique el programa anterior con el comando E, cambie solamente el
byte necesario para que muestre una A en el monitor y ejecútelo.

Página 9 Práctica No. 3 Programación del Microprocesador 80XXX


e).- Guarde el programa anterior en memoria utilizando el comando N y W.
f).- Pruebe su ejecución desde DOS invocándolo directamente y luego cárguelo
desde el DEBUG con los comandos N y L, muestre el programa con el
comando U y ejecútelo.
.
2.- Utilización de Interrupciones del DOS:

Pruebe las interrupciones 2C y 2A del INT 21, utilizando los comandos T y P,


para ejecutarlos paso por paso, verifique que la información coincida con la
fecha y hora de la computadora.
Ahora utilice las interrupciones 2 y 4 del INT 1A, con los comandos T y P, para
ejecutarlos paso por paso, verifique que la información coincida con la fecha y
hora de la computadora, e indique en que registros se muestra la información así
como el formato, investigue en INTERNET su respuesta para comprobarlo,
indique el sitio WEB donde encontró su respuesta.

Reporte del alumno:


Mostrarle al maestro los resultados obtenidos en la Computadora y reportarlos
por escrito incluyendo conclusiones.

Bibliografía:

Assembly Language Primer


for the IBM PC & XT
Robert Lafore
Plume/Waite Book

Peter Abel.
Lenguaje Ensamblador y Programación para PC IBM y Compatibles.
Ed. Pearson Educación.

Página 10 Práctica No. 3 Programación del Microprocesador 80XXX

Вам также может понравиться