15
 LABORATORIO DE MICROPROCESADORES PROF. CECILIA SANDOVAL RUIZ MANEJO DEL AMBIENTE DE DESARROLLO DEL LENGUAJE ENSAMBLADOR INTRODUCCIÓN Para la programación en lenguaje ensamblador se tiene un set de instrucciones sustentada en la arquitectura del procesador, para nuestro caso trabajaremos con las instrucciones de los microprocesadores Intel de la familia 80x86, para lo cuál se debe seleccionar una herramienta de trabajo para el ensamblador basado en el funcionamiento de los recursos internos del procesador. Pasos para ensamblar un programa a través de la herramienta DEBUG  Al abrir la herramienta DEBUG, se presenta un guión para introducir el comando que se desea ejecutar, comenzamos por revisar la ayuda que ofrece DEBUG (-?) descripción de los comandos y los argumentos que deben suministrársele para su uso. Esta ayuda puede consultarse para emplear los comandos soportados por la herramienta DEBUG. La arquitectura del computador se refiere a los atributos de un sistema que son visibles para el programador, aquellos que tienen un impacto directo en la ejecución de un programa [Stalling, Organización y Arquitectura de Computadores], como es el caso del conjunto de instrucciones, numero de bits usados para representar varios tipos de datos. La organización del computador

Manual Debug

Embed Size (px)

Citation preview

Page 1: Manual Debug

5/16/2018 Manual Debug - slidepdf.com

http://slidepdf.com/reader/full/manual-debug 1/15

 

LABORATORIO DE MICROPROCESADORES

PROF. CECILIA SANDOVAL RUIZ

MANEJO DEL AMBIENTE DE DESARROLLO DEL LENGUAJE ENSAMBLADOR

INTRODUCCIÓN 

Para la programación en lenguaje ensamblador se tiene un set de instrucciones sustentada en

la arquitectura del procesador, para nuestro caso trabajaremos con las instrucciones de losmicroprocesadores Intel de la familia 80x86, para lo cuál se debe seleccionar una herramientade trabajo para el ensamblador basado en el funcionamiento de los recursos internos delprocesador.

Pasos para ensamblar un programa a través de la herramienta DEBUG

 Al abrir la herramienta DEBUG, se presenta un guión para introducir el comando que se deseaejecutar, comenzamos por revisar la ayuda que ofrece DEBUG (-?) descripción de los comandosy los argumentos que deben suministrársele para su uso.

Esta ayuda puede consultarse para emplear los comandos soportados por la herramientaDEBUG.

La arquitectura del computador se refiere a los atributos de un sistema que son visibles para el

programador, aquellos que tienen un impacto directo en la ejecución de un programa [Stalling,Organización y Arquitectura de Computadores], como es el caso del conjunto de instrucciones,numero de bits usados para representar varios tipos de datos. La organización del computador

Page 2: Manual Debug

5/16/2018 Manual Debug - slidepdf.com

http://slidepdf.com/reader/full/manual-debug 2/15

 

LABORATORIO DE MICROPROCESADORES

PROF. CECILIA SANDOVAL RUIZ

se refiere a las unidades funcionales y sus interconexiones (detalles de hardware); En el casodel lenguaje ensamblador (lenguaje de bajo nivel) estos conceptos están presentes para eldiseño del programa, la herramienta seleccionada para programar en ASSEMBLER será DEBUGel cual permite ensamblar instrucciones y depurar los programas ensamblados ya que elprogramador puede accesar a las direcciones donde se almacenan las instrucciones delprograma; el contenido de los registros y el estado de las banderas del registro status; se

puede visualizar la ejecución pasos a paso, y constatar el estado de los registros durante lacorrida de un programa, recordemos el significado de estos registros

AX Acumulador

BX Registro base

CX Registro contador

DX Registro de datos

DS Registro del segmento de datos

ES Registro del segmento extra

SS Registro del segmento de pila

CS Registro del segmento de código

BP Registro de apuntadores baseSI Registro índice fuente

DI Registro índice destino

SP Registro del apuntador de la pila

IP Registro de apuntador de instrucción

F Registro de banderas

REGISTRO DE STATUS

Desbordamiento

  NV = no hay

  OV = sí lo hay

Dirección

  UP = hacia adelante;

  DN = hacia atrás;

Interrupción

  DI = desactivadas;

  EI = activadas

Signo

  PL = positivo;

  NG = negativo

Cero

  NZ = no es cero;

  ZR = si lo es

Acarreo auxiliar

  NA = no hay

  AC = si hay

Paridad

  PO = paridad non;

  PE = paridad par;

Acarreo

  NC = no hay acarreo;

  CY = si lo hay

EJEMPLO 1 Se desea realizar un programa que escriba un string en pantalla, espere un

caracter introducido por teclado, y luego escriba otro string (cadena de caracteres) en lapróxima línea, se le introduzca otro caracter, este programa podrá ser tomado como base para

Page 3: Manual Debug

5/16/2018 Manual Debug - slidepdf.com

http://slidepdf.com/reader/full/manual-debug 3/15

 

LABORATORIO DE MICROPROCESADORES

PROF. CECILIA SANDOVAL RUIZ

cualquier aplicación que requiera parámetros definidos por el usuario a través del teclado,manteniendo el orden de introducción de datos.

1. Definir cadena de caracteres, para ello emplearemos el comando  –E dir, el cual permiteintroducir información a partir de la dirección especificada E <dir>, ejemplo introduciremos unstring en la dirección 200

-E 200 'GRUPO#$'Para confirmar que la cadena de caracteres se encuentra allí podemos utilizar el comandodisplay  –D <dir1 dir2> definiendo el intervalo de direcciones que nos interesa visualizar-D 200 2060C7C:0200 47 52 55 50 4F 23 24 GRUPO#$Otra forma es introducir cada caracter hexadecimal byte por byte-E 2100C7C:0210 58.(El debug se posiciona en la dirección especificada y nos muestra el valor actual del byte 0210el cual contiene 58, seguidamente le introducimos el valor deseado, damos espacio y nosmuestra el siguiente byte, al terminar colocamos el caracter $ (24) y ya hemos definidonuestros datos:

-E 2100C7C:0210 58.0D 0A.0A 24.24Introducimos la próxima cadena de caracteres:-E 220 'SECCIÓN:$'

Mostrar desde la dirección 200

 Allí se encuentran los string que hemos introducido

¿Qué pasa si el string posee mas de 15 caracteres? Cada caracter ocupa un byte de la memoriapara el string1 se esta definiendo un espacio desde 200 hasta 20F (hexadecimal), si la cadenade caracteres es de mayor tamaño será cortada por el siguiente string. En caso de un string detamaño desconocido se recomienda dejar suficiente espacio para el próximo string a fin de nosobrescribir en cierta dirección y dañar la cadena de caracteres.

Para esta rutina requerimos mostrar información por pantalla y recibir datos por teclado, esto lopodemos realizar empleando una interrupción es una operación que invoca la ejecución deuna rutina específica que suspende la ejecución del programa que la llamó, de tal manera queel sistema toma control del computador colocando en el stack (pila) el contenido de los

registros CS e IP. El programa suspendido vuelve a activarse cuando termina la ejecución de lainterrupción y son restablecidos los registros salvados. Existen dos razones para ejecutar unainterrupción: (1) intencionalmente como petición para la entrada o salida de datos de undispositivo, y (2) un error serio y no intencional, como sobre-flujo o división por cero.

 Al definir el programa se colocará en el byte alto del registro acumulador  AH el numero deservicio del DOS, en el registro DX la dirección de inicio del string, el cual terminará al detectarel caracter $ (ASCII 24) y finalmente la interrupción 21, que maneja E/S. [Tabla deinterrupciones Barry B. Brey APENDICE A- Pág.693]

2. Ensamblar el programa a través del comando  –  A <dir> (con lo cual colocamos la

dirección de inicio del programa, cada vez que se inicia un programa el DEBUG ofrece ladirección 0100 por defecto); comenzamos a introducir las instrucciones del programa

Page 4: Manual Debug

5/16/2018 Manual Debug - slidepdf.com

http://slidepdf.com/reader/full/manual-debug 4/15

 

LABORATORIO DE MICROPROCESADORES

PROF. CECILIA SANDOVAL RUIZ

empleando los mnemónicos definidos por la sintaxis del lenguaje ensamblador, en cadadirección definimos la instrucción que será asignada a cada localidad del segmento de código,en cada línea se escribirá la instrucción y sus operando (según el tipo de instrucción), el DEBUGmanejara directamente las direcciones de memoria y se manejaran directamente las direccionesasignadas, es decir; no se emplearan etiquetas para saltos, sino directamente la dirección desalto en el programa, para la documentación del programa se puede colocar (;) después de la

instrucción y se comentan, estos comentarios no ocupan memoria de programa, y son omitidasal desensamblar el programa, se recomiendan en el diseño del programa para aclarar lasecuencia de instrucciones.

RUTINA MOSTRAR STRING Y CAPTURAR UN CARACTER -A 1000C7C:0100 MOV AH,09 ;solicitud 09H de las funciones del DOS mostrar cadena de caracteres 0C7C:0102 MOV DX,0200 ;dirección de la cadena de caracteres  ‘GRUPO#’  0C7C:0105 INT 21 ;interrupción para ejecutar la función DOS0C7C:0107 ;se ha mostrado el string, ahora introducimos una espera el numero de grupo0C7C:0107 MOV AH,01 ;solicitud 01H de las funciones del DOS leer el teclado 0C7C:0109 INT 21 ;interrupción para ejecutar la función DOS

0C7C:010B ;luego de pulsar la tecla, continua la ejecución del programa0C7C:010B MOV AH,09 ;solicitud 09H de las funciones del DOS mostrar cadena de caracteres 0C7C:010D MOV DX,210 ;dirección de la cadena de caracteres para saltar a la siguiente línea 0C7C:0110 INT 21 ;interrupción para ejecutar la función DOS0C7C:0112 ;este string contiene el caracter 0A LF (Line Feed) va al principio de la sig. línea0C7C:0112 MOV DX,220 ;dirección de la cadena de caracteres  ‘SECCIÓN:’  0C7C:0115 INT 21 ;interrupción para ejecutar la función DOS 0C7C:0117 MOV AH,01 ;solicitud 01H de las funciones del DOS leer el teclado 0C7C:0119 INT 21 ;interrupción para ejecutar la función DOS 0C7C:011B INT 20 ;interrupción para finalizar el programa 

3. Guardar Programa especificando nombre, tamaño y usando el comando escribir.

El programa lo llamaremos string con la extensión .com-N STRING.COM A través del comando  –R podemos consultar y asignar valores a los registros, de este modoasignaremos el tamaño del programa haciendo uso de los registros BX y CX, siendo BX=00 leasignamos al registro contador CX el tamaño del programa 011D-0100 H-H 011D 0100021D 001D (resultado de la resta)-R CXCX 0000:001DComando de escritura -wEscribiendo 0001D bytes

En este caso guardará el archivo ejecutable.com en C, si se desea guardar en un directorio,solo se especifica la ruta, si vamos a guardar en disco 3½-N a:\EJEMPLO1.COM (\  ALT 92 ) -WLuego podrá ser ejecutado directamente y para editarlo se cargara con el DEBUG  –L <dir>,después de especificar el nombre y la ruta se puede cargar y desensamblar para verlo ymodificarlo-N a:\EJEMPLO1.COM-L

4. Desensamblar el programa con el comando U <dir.inicio dir.fin> el devuelve el intervalode direcciones desplegando su contenido en hexadecimal y las instrucciones en ensamblador.-U 100 011D

Page 5: Manual Debug

5/16/2018 Manual Debug - slidepdf.com

http://slidepdf.com/reader/full/manual-debug 5/15

 

LABORATORIO DE MICROPROCESADORES

PROF. CECILIA SANDOVAL RUIZ

0CB2:0100 B409 MOV AH,090CB2:0102 BA0002 MOV DX,02000CB2:0105 CD21 INT 210CB2:0107 B401 MOV AH,010CB2:0109 CD21 INT 210CB2:010B B409 MOV AH,09

0CB2:010D BA1002 MOV DX,02100CB2:0110 CD21 INT 210CB2:0112 BA2002 MOV DX,02200CB2:0115 CD21 INT 210CB2:0117 B401 MOV AH,010CB2:0119 CD21 INT 210CB2:011B CD20 INT 20Luego podemos emplear el comando G para ejecutar el programa

Espera un caracter por teclado, colocamos el numero del grupo

Luego se detiene esperando el caracter de la sección, colocamos la letra

5. Ejecutar el programa por etapas se emplea el comando P, y para observar el contenido delos registros en cada instrucción ejecutada se dispone del comando T

EDITAR UN PROGRAMA EN DEBUG (una vez ensamblado un programa, cada una de las instrucciones que hemos programado tendrá asignada una dirección en el segmento de código,supongamos que se requiere cambiar o insertar una instrucción en un punto especifico del programa, por la naturaleza secuencial de las instrucciones debe insertarse en una dirección de 

memoria especifica, así que se deberá sobrescribir o mover el segmento de código posterior a la instrucción que se desea insertar y luego ensamblar las líneas de las instrucciones faltantes,de este modo se podrá manejar el contenido de la memoria de programa para realizar los cambios necesarios) 

6. Modificar líneas de instrucción, una vez finalizado un programa podemos ejecutarlo yconseguir un error en una de las instrucciones, en este caso podemos sobre-escribir elcontenido de la localidad de memoria, corrigiendo la instrucción, ensamblamos en la direccióndonde se encuentra la instrucción errónea y la modificamos-A 01120CB2:0112 ;instrucción corregida0CB2:0115

7. Mover un bloque de instrucciones, Copia desde la dirección1 hasta la dirección2 ymueve el bloque a la dirección nueva -M dir.desde,dir.hasta dir.nueva-M 0107 0110,0112

 Ahora al desensamblar se tendrá a partir de la dirección 0112 el contenido de las direccionesdesde 0107 hasta 0110

(a) Nótese que la instrucción iniciada en la dirección 0110 no ha sido movida completa, solo la parte de la instrucción que ocupa el Byte 0110, el contenido del Byte 0111 no esta incluido.(b) Una vez realizada la edición de un programa corrido y funcionando debe ser guardado, ya que se cargara la ultima versión guardada.Hasta ahora, el programa solo muestra la cadena de caracteres programada y permite

introducir un caracter por teclado mostrándolo por pantalla. A partir de este programa podemoscapturar dos operandos por pantalla, restarlos y mostrar resultado.

Page 6: Manual Debug

5/16/2018 Manual Debug - slidepdf.com

http://slidepdf.com/reader/full/manual-debug 6/15

 

LABORATORIO DE MICROPROCESADORES

PROF. CECILIA SANDOVAL RUIZ

***IMPORTANTE: el caracter introducido por teclado con la función 01H es guardado en elbyte bajo del registro acumulador AL, allí estará disponible para operarlo***

EJEMPLO 20C7C:0100 MOV AH,09 ;solicitud 09H de las funciones del DOS mostrar cadena de caracteres0C7C:0102 MOV DX,0200 ;dirección de la cadena de caracteres 

0C7C:0105 INT 21 ;interrupción para ejecutar la función DOS 0C7C:0107 MOV AH,01 ;solicitud 01H de las funciones del DOS leer el teclado 0C7C:0109 INT 21 ;interrupción para ejecutar la función DOS 0C7C:010B MOV BL,AL ; AL= caracter ASCII tecleado se mueve a BL para no perderlo 0C7C:010D MOV AH,09 ;solicitud 09H de las funciones del DOS mostrar cadena de caracteres 0C7C:010F MOV DX,0220 ;dirección de la cadena de caracteres 0C7C:0112 INT 21 ;interrupción para ejecutar la función DOS 0C7C:0114 MOV DX,0230 ;dirección de la cadena de caracteres 0C7C:0117 INT 21 ;interrupción para ejecutar la función DOS 0C7C:0119 MOV AH,01 ;solicitud 01H de las funciones del DOS leer el teclado 0C7C:011B INT 21 ;interrupción para ejecutar la función DOS 0C7C:011D MOV CL,AL ; AL= caracter ASCII tecleado se mueve a CL para no perderlo 

0C7C:011F SUB BL,CL ; resta aritmética del contenido de los registros BL=BL-CL 0C7C:0121 AAS ;prepara el numero para convertirlo luego a código ASCII (AAS DAS)0C7C:0122 ADD BL,30 ;convierte a caracter ASCII 0C7C:0125 MOV AH,09 ;solicitud 09H de las funciones del DOS mostrar cadena de caracteres 0C7C:0127 MOV DX,0220 ;dirección de la cadena de caracteres 0C7C:012A INT 21 ;interrupción para ejecutar la función DOS 0C7C:012C MOV DX,0250 ;dirección de la cadena de caracteres 0C7C:012F INT 21 ;interrupción para ejecutar la función DOS 0C7C:0131 MOV AH,02 ;mostrar caracter en pantalla0C7C:0133 MOV DX,BX ;mover caracter a DX, para poder mostrarlo 0C7C:0135 INT 21 ;interrupción para ejecutar la función DOS 0C7C:0137 INT 20 ;interrupción para terminar programa 

0C7C:0139

-E 200 'introduzca minuendo:$'-E 220 0D 0A '$'-E 230 'introduzca sustraendo:$'-E 250 'resultado:$'-gintroduzca minuendo:7introduzca sustraendo:3resultado:4El programa ha terminado de forma normalNótese que los string están expresados de forma genérica en las posiciones de memoria200,220,230,250; de manera que los podemos cambiar ingresando nuevos string, al ejecutar el

programa, este desplegará en pantalla los string actuales.

Otra función que podemos emplear además de los servicios del DOS corresponde a lasfunciones del BIOS de video, veamos un ejemplo de limpiar pantalla y cambiar le color deacuerdo a las coordenadas de la pantalla.

Page 7: Manual Debug

5/16/2018 Manual Debug - slidepdf.com

http://slidepdf.com/reader/full/manual-debug 7/15

 

LABORATORIO DE MICROPROCESADORES

PROF. CECILIA SANDOVAL RUIZ

FUNCION 06H: Limpiar la pantallaLa función 06H de la INT 10H maneja el borrado o recorrido de la pantalla, puede limpiar todoo una parte donde se debe indicar en el registro CX el inicio de cualquier localidad de la pantalla(fila y columna inicial) y terminar en otra localidad cargada en DX con número mayor (fila ycolumna final)

Requerimientos:

1.  mover al registro AH la función 06h2.  mover al registro AL el valor 00H para indicar pantalla completa3.  mover en BH el número de atributo4.  mover en CX la fila y columna de inicio5.  mover en DX la fila y columna finales

Ubicación enpantalla

Formato decimal Formato hexa

Fila columna Fila columna

Esquina superiorizquierda

00 00 00H 00H

Esquina superiorderecha

00 79 00H 4FH

Centro 12 39/40 0CH 27H/28H

Ubicación enpantalla

Formato decimal Formato hexa

Fila columna Fila columna

Esquina inferiorizquierda

24 00 18H 00H

Esquina inferiorderecha

24 79 18H 4FH

En otras palabras la pantalla esta distribuida en 25 filas desde 00H hasta 18H y en 80 columnasdesde 00 hasta 4FH, de manera que para realizar cualquier figura se pueden calcular lasposiciones de la pantalla especificar los atributos y representar el gráfico.

EL ATRIBUTO ES CARGADO EN EL REGISTRO BH

BH carga un byte donde el primer valor corresponde al fondo y el segundo al primer plano

Color valor en hexadecimal

Negro 0 Azul 1 Verde 2Cian 3Rojo 4Blanco 7Magenta DGris 8

 Amarillo E

EJEMPLO 3 ventana verde  -A 1000C7C:0100 MOV AX,0600 ;definimos función AH=06 y AL=00 borrar pantalla

Page 8: Manual Debug

5/16/2018 Manual Debug - slidepdf.com

http://slidepdf.com/reader/full/manual-debug 8/15

 

LABORATORIO DE MICROPROCESADORES

PROF. CECILIA SANDOVAL RUIZ

0C7C:0103 MOV BH,2D ;atributos ventana_verde=2, letras_magenta=D 0C7C:0105 MOV CX,0000 ;esquina superior izquierda0C7C:0108 MOV DX,184F ;esquina inferior derecha 0C7C:010B INT 10 ;llamada al servicio del BIOS dadas las entradas en los registros 0C7C:010D INT 20 ; terminar el programa 

 Al ejecutar obtenemos: La ventana de color verde con las letras magenta

EJEMPLO 4 Dibuja cuadros concéntricos -A 1000C7C:0100 MOV AX,0600 ;función limpiar pantalla 0C7C:0103 MOV BH,E0 ;atributos fondo Amarillo, letras negras0C7C:0105 MOV CX,0000 ;fila 00 columna 00 0C7C:0108 MOV DX,184F ;fila 18 columna 4F (esquina inferior derecha) 0C7C:010B INT 10 ;interrupción del BIOS 0C7C:010D MOV AH,01 ;introducir caracter (espera tecla ENTER para continuar)0C7C:010F INT 21 ;interrupción del DOS 0C7C:0111 MOV AX,0600 ;función limpiar pantalla 0C7C:0114 MOV BH,00 ;fondo negro 

0C7C:0116 MOV CX,0404 ;coordenadas de la esquina superior izquierda del cuadro interno0C7C:0119 MOV DX,144A ;coordenadas de la esquina inferior derecha del cuadro interno 0C7C:011C INT 10 ;interrupción del BIOS 0C7C:011E MOV AH,01 ;introducir caracter (espera tecla ENTER para continuar) 0C7C:0120 INT 21 ;interrupción del DOS 0C7C:0122 MOV AX,0600 ;función limpiar pantalla 0C7C:0125 MOV BH,E0 ;atributos fondo Amarillo, letras negras 0C7C:0127 MOV CX,0808 ;fila 08 columna 08 esquina sup.izq del cuadro central 0C7C:012A MOV DX,1047 ;fila 10 columna 47 esquina inf.der. del cuadro central 0C7C:012D INT 10 ;llamada al servicio del BIOS dadas las entradas en los registros 0C7C:012F INT 20 ;terminar el programa 

EJEMPLO 5 Barra de colores  -A0C7C:0100;primera barra amarillo 0C7C:0100 MOV AX,06000C7C:0103 MOV BH,E00C7C:0105 MOV CX,00000C7C:0108 MOV DX,18040C7C:010B INT 100C7C:010D;espera tecla 0C7C:010D MOV AH,010C7C:010F INT 210C7C:0111;prox. color 0C7C:0111 MOV AX,0600

0C7C:0114 SUB BH,100C7C:0117;prox. barra 0C7C:0117 ADD CX,00040C7C:011A ADD DX,00040C7C:011D INT 100C7C:011F CMP DX,184F ;compara si llego a la ultima fila0C7C:0122 JBE 010D ;salta a la dirección 010D para esperar tecla y seguir la secuencia 0C7C:0124 INT 20 ;terminar el programa ;cada vez que se pulse una tecla, realice una franja con el color

EJEMPLO 6Realizar un algoritmo que calcule el factorial de un numero introducido por teclado, definido através de una rutina n! = n*(n-1)!

Page 9: Manual Debug

5/16/2018 Manual Debug - slidepdf.com

http://slidepdf.com/reader/full/manual-debug 9/15

 

LABORATORIO DE MICROPROCESADORES

PROF. CECILIA SANDOVAL RUIZ

1) Algoritmo para el calculo de n!Esperar numero por teclado FACTORIAL (Probar n=0, calcular factorial de n)

Si n=0 n!=1Sino aux=(n-1)

n!=n*auxIr a Factorial

2) Diagrama de Flujo del programa Factorial

3) PROGRAMA EN ASSEMBLER factorial de un numero (0-8) introducido por teclado0CB2:0100 B401 MOV AH,01  ;leer teclado  0CB2:0102 CD21 INT 21  ;servicio del BIOS  0CB2:0104 B400 MOV AH,00  ;borra registro alto del acumulador  0CB2:0106 2C30 SUB AL,30  ;preparar número a formato binario  0CB2:0108 88C3 MOV BL,AL  ;guardar en un registro auxiliar  0CB2:010A 80FB00 CMP BL,00  ; si n = 0  0CB2:010D 740F JZ 011E  ;salta a factorial de cero  0CB2:010F 80FB01 CMP BL,01  ;mientras n>1  0CB2:0112 7606 JBE 011A  ;si es igual a uno se detiene  0CB2:0114 FECB DEC BL  ;aux=n-1  0CB2:0116 F7E3 MUL BX  ;AX=AX*BX  n!=n*(n-1)!  0CB2:0118 E2F5 LOOP 010F  ;llama la rutina factorial JUMP***0CB2:011A B100 MOV CL,00  ;limpia el registro contador (opcional)  0CB2:011C CD20 INT 20  ;terminar el programa fin  0CB2:011E B80100 MOV AX,0001  ; factorial de cero 0!=1  0CB2:0121 EBF9 JMP 011C  ;salta a fin  

4) EJECUCIÓN DEL PROGRAMA CON EL DEBUG(A través del comando -P se puede observar el contenido de los registros por pasos) 

BL = 0

DEC BL

MOV AH,00SUB AL,30MOV BL,AL

 AH=01INT 21

MUL BX

MOV AX,01

BL≤1 

FIN

FACTORIAL DE CERO

FACTORIAL DE N

Leer teclado

 Acondicionarnumero n

no

si

Page 10: Manual Debug

5/16/2018 Manual Debug - slidepdf.com

http://slidepdf.com/reader/full/manual-debug 10/15

 

LABORATORIO DE MICROPROCESADORES

PROF. CECILIA SANDOVAL RUIZ

-p (se coloca AH=01 para llamar la interrupción 21)  AX=0100 BX=0000 CX=0000 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000DS=0CB2 ES=0CB2 SS=0CB2 CS=0CB2 IP=0102 NV UP EI PL NZ NA PO NC0CB2:0102 CD21 INT 21

-p (espera el numero por teclado 7!) 

7 AX=0137 BX=0000 CX=0000 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000DS=0CB2 ES=0CB2 SS=0CB2 CS=0CB2 IP=0104 NV UP EI PL NZ NA PO NC0CB2:0104 B400 MOV AH,00

-p (el numero es recibido en AL como caracter ASCII 37)  AX=0037 BX=0000 CX=0000 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000DS=0CB2 ES=0CB2 SS=0CB2 CS=0CB2 IP=0106 NV UP EI PL NZ NA PO NC0CB2:0106 2C30 SUB AL,30

-p (lo hemos convertido en decimal -30)  AX=0007 BX=0000 CX=0000 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000

DS=0CB2 ES=0CB2 SS=0CB2 CS=0CB2 IP=0108 NV UP EI PL NZ NA PO NC0CB2:0108 88C3 MOV BL,AL

-p (se ha guardado en BL el contenido de AL) AX=0007 BX=0007 CX=0000 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000DS=0CB2 ES=0CB2 SS=0CB2 CS=0CB2 IP=010A NV UP EI PL NZ NA PO NC0CB2:010A 80FB00 CMP BL,00

-p (compara BL con cero) AX=0007 BX=0007 CX=0000 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000DS=0CB2 ES=0CB2 SS=0CB2 CS=0CB2 IP=010D NV UP EI PL NZ NA PO NC0CB2:010D 740F JZ 011E

-p (chequeo si el numero es cero) AX=0007 BX=0007 CX=0000 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000DS=0CB2 ES=0CB2 SS=0CB2 CS=0CB2 IP=010A NV UP EI PL NZ NA PO NC0CB2:010F 80FB01 CMP BL,01

-p (compara BL con uno)  AX=0007 BX=0007 CX=0000 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000DS=0CB2 ES=0CB2 SS=0CB2 CS=0CB2 IP=0112 NV UP EI PL NZ NA PE NC0CB2:0112 7606 JBE 011A

-p (mientras sea mayor realiza el procedimiento)  AX=0007 BX=0007 CX=0000 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000DS=0CB2 ES=0CB2 SS=0CB2 CS=0CB2 IP=010F NV UP EI PL NZ NA PE NC0CB2:0114 FECB DEC BL

-p (el registro BL ha sido decrementado)  AX=0007 BX=0006 CX=0000 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000DS=0CB2 ES=0CB2 SS=0CB2 CS=0CB2 IP=0111 NV UP EI PL NZ NA PE NC0CB2:0116 F7E3 MUL BX

-p (multiplica AX= AX*BX AX=07*06=2AH=42D)  AX=002A BX=0006 CX=0000 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000DS=0CB2 ES=0CB2 SS=0CB2 CS=0CB2 IP=0113 NV UP EI PL NZ NA PE NC0CB2:0118 E2F5 LOOP 010F

-p (por usar el comando p se ve el procedimiento lazo, repite mientras BX>1)  AX=13B0 BX=0001 CX=FFFA DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000DS=0CB2 ES=0CB2 SS=0CB2 CS=0CB2 IP=0115 NV UP EI PL ZR NA PE NC

Page 11: Manual Debug

5/16/2018 Manual Debug - slidepdf.com

http://slidepdf.com/reader/full/manual-debug 11/15

 

LABORATORIO DE MICROPROCESADORES

PROF. CECILIA SANDOVAL RUIZ

0CB2:011A B100 MOV CL,00

-p (multiplica por BX=01 la ultima vez AX=07*06*05*04*03*02*01=13B0H=5040D)  AX=13B0 BX=0001 CX=0000 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000DS=0CB2 ES=0CB2 SS=0CB2 CS=0CB2 IP=0117 NV UP EI PL ZR NA PE NC0CB2:011C CD20 INT 20

-pEl programa ha terminado de forma normal

Solo se han empleado de forma directa los registros AX y BX, el apuntador de la pila no ha sidomodificado

¿Por qué cambio el registro contador CX=0000 CX=FFFA, después de la ejecución del lazo?Porque este registro se emplea para contar las veces que el programa paso por el lazo comon=7, el paso por el lazo n-1=6 veces, por lo tanto CX=0006, acá se encuentra expresado enforma negativa, cada vez que pasa por el lazo se decrementa CX.

Observamos el registro IP apuntador de instrucciones, es el encargado de llevar la secuencia dela dirección de la instrucción para su ejecución

 A la hora de programar un código muy largo, se puede emplear un diseño modular, establecerlos procedimientos y usar las funciones de control de flujo del programa para manejar lasecuencia de instrucciones.

Page 12: Manual Debug

5/16/2018 Manual Debug - slidepdf.com

http://slidepdf.com/reader/full/manual-debug 12/15

 

LABORATORIO DE MICROPROCESADORES

PROF. CECILIA SANDOVAL RUIZ

Entre los saltos y manejo de subrutinas tenemos:JE ó JZ salta si es igual, se emplea para selección chequeamos un selector y el programarealizará una secuencia especifica

JBE salta si es menor o igual, es útil para comprobar condiciones

LOOP es la ejecución de un lazo o bucle, esta función decrementa automáticamente elcontador, el cual se debe iniciar con le numero de veces que se requiere repetir el lazo CX, alllegar a cero continua con la instrucción siguiente

XXXX:0XXX MOV CX, 07; numero de veces que se ejecutará el lazoXXXX:010A INST 1XXXX:0XXX INST 2XXXX:0XXX INST 3XXXX:0XXX INST 4XXXX:0XXX LOOP 010A XXXX:0XXX INST siguiente

CALL consiste en la llamada a un procedimiento, la dirección de la próxima instrucción en elprograma principal es guardado en la pila (STACK), una vez que culmina el procedimiento sedebe colocar la instrucción retornar RET, toma la dirección almacenada en el stack y retorna alcódigo que la invoco.

XXXX:0XXX INST 1XXXX:0XXX INST 2XXXX:0XXX INST 3XXXX:0XXX INST 4XXXX:0XXX CALL 015FXXXX:0111 INST siguiente

..

.

.

.

.XXXX:015F INST 1XXXX:0XXX INST 2XXXX:0XXX INST 3XXXX:0XXX INST 4XXXX:0XXX RET 

EJEMPLO 7 Realizar las subrutinas para una calculadora básica, el operador (+, -, *, / ) seráintroducido por teclado y recibido en AL, de acuerdo al valor de AL, se ejecutará un

DEC CX 

Page 13: Manual Debug

5/16/2018 Manual Debug - slidepdf.com

http://slidepdf.com/reader/full/manual-debug 13/15

 

LABORATORIO DE MICROPROCESADORES

PROF. CECILIA SANDOVAL RUIZ

procedimiento suma, resta, multiplicación, división con las instrucciones aritméticas de ASSEMBLER y las instrucciones de saltos. En pantalla se presentará la siguiente secuencia:

DIAGRAMA DE FLUJO DEL PROGRAMA CALCULADORA BÁSICA

NOTA: Cada subrutina la realizaremos de forma independiente los saltos estarán dados poretiquetas, en el ensamblado se debe considerar las respectivas direcciones de las etiquetasempleadas en al etapa de diseño, ya que DEBUG no maneja referencias cruzadas y se debeestablecer las direcciones del programa en ASSEMBLER, se debe cuidar el contenido de losregistros en cada rutina, a fin de no alterar la información de un registro que se requiera utilizar

en una próxima etapa, ejemplo AX. A partir del diagrama de flujo podemos diseñar cada subrutinas, para finalmente ensamblar elprograma completo de cálculos básicos:

INTRODUCIR OPERANDOS:23,18SELECCIONAR OPERACIÓN:-RESULTADO=05

RESTAR 

SOLICITAR OPERACION

CAPTURAR OPERANDO1

CAPTURAR OPERADOR 

CAPTURAR OPERANDO2

 AL = +

 AL = -

 AL = *

 AL = /

SUMAR 

PROD

DIV

MOSTRAR RESULTADO

FIN

ERROR 

Page 14: Manual Debug

5/16/2018 Manual Debug - slidepdf.com

http://slidepdf.com/reader/full/manual-debug 14/15

 

LABORATORIO DE MICROPROCESADORES

PROF. CECILIA SANDOVAL RUIZ

OPERACIONES ARITMETICAS

0C7C:0100 B409 MOV AH,09

0C7C:0102 BA0003 MOV DX,0300

0C7C:0105 CD21 INT 21

0C7C:0107 E87601 CALL 0280; CAPTURA OPERANDO 

0C7C:010A 50 PUSH AX0C7C:010B B401 MOV AH,01

0C7C:010D CD21 INT 21

0C7C:010F 88C2 MOV DL,AL; operador

0C7C:0111 E86C01 CALL 0280; 

0C7C:0114 89C3 MOV BX,AX

0C7C:0116 58 POP AX

0C7C:0117 80FA2B CMP DL,2B

0C7C:011A 7434 JZ 0150 ; SUMA 

0C7C:011C 80FA2A CMP DL,2A

0C7C:011F 744F JZ 0173 ;RESTA 

0C7C:0121 80FA2D CMP DL,2D

0C7C:0124 745A JZ 0190 ; MULT 

0C7C:0126 80FA2F CMP DL,2F

0C7C:0129 7474 JZ 01A7 ;DIV 

0C7C:012B B402 MOV AH,02

0C7C:012D B23D MOV DL,3D;igual

0C7C:012F CD21 INT 21

0C7C:0131 88CA MOV DL,CL; sign-carry

0C7C:0133 CD21 INT 21

0C7C:0135 88FA MOV DL,BH; result DMS

0C7C:0137 CD21 INT 210C7C:0139 88DA MOV DL,BL; result DLS 

0C7C:013B CD21 INT 21

0C7C:013D CD20 INT 20

EJERCICIOS PROPUESTOS

0C7C:0280 B401 MOV AH,01

0C7C:0282 CD21 INT 21

0C7C:0284 88C7 MOV BH,AL

0C7C:0286 CD21 INT 21

0C7C:0288 88FC MOV AH,BH

0C7C:028A 2D3030 SUB AX,3030

0C7C:028D C3 RET

0CB2:0150

0CB2:0152

0CB2:0154

0CB2:0156

0CB2:0158

0CB2:0159

0CB2:015B

0CB2:015D

0CB2:015F

0CB2:0161

0CB2:0163

0CB2:0164

0CB2:0166

0CB2:0168

0CB2:016C

0CB2:0170

B100

01D8

3C0A

7203

27

FEC4

88C3

88E0

3C0A

7203

27

B131

88C7

81E30F0F

81CB3030

EBB9

MOV CL,00

ADD AX,BX

CMP AL,0A

JB 015B

DAA

INC AH

MOV BL,AL

MOV AL,AH

CMP AL,0A

JB 0166

DAA

MOV CL,31

MOV BH,AL

AND BX,0F0F

OR BX,3030

JMP 012B

0CB2:0173

0CB2:0175

0CB2:0177

0CB2:0179

0CB2:017B

0CB2:017D

0CB2:017F

0CB2:0181

0CB2:0183

0CB2:01840CB2:0186

0CB2:018A

0CB2:018E

B100

39D8

7F04

87C3

B12D

29D8

3C0A

7201

2F

89C381E30F0F

81CB3030

EB9B

MOV CL,00

CMP AX,BX

JG 017D

XCHG AX,BX

MOV CL,2D

SUB AX,BX

CMP AL,0A

JB 0184

DAS

MOV BX,AXAND BX,0F0F

OR BX,3030

JMP 012B

0CB2:0190

0CB2:0192

0CB2:0194

0CB2:0196

0CB2:0198

0CB2:019C

0CB2:01A0

B100

F6E3

D40A

89C3

81E30F0F

81CB3030

EB89

MOV CL,00

MUL BL

AAM

MOV BX,AX

AND BX,0F0F

OR BX,3030

JMP 012B

0CB2:01A7

0CB2:01A9

0CB2:01AB

0CB2:01AD

0CB2:01AF0CB2:01B2

B100

D50A

F6F3

88C3

80CB30E976FF

MOV CL,00

AAD

DIV BL

MOV BL,AL

OR BL,30JMP 012B

Page 15: Manual Debug

5/16/2018 Manual Debug - slidepdf.com

http://slidepdf.com/reader/full/manual-debug 15/15

 

LABORATORIO DE MICROPROCESADORES

PROF. CECILIA SANDOVAL RUIZ

1) Emplear las funciones lógicas desplazamiento y rotación SHR, SHL, ROR, ROL de ASSEMBLER y muestre un caracter en pantalla representando la función lógica.

2) Diseñe un programa que presente por pantalla una gráfica, (para definir las posiciones de lapantalla, tenga presente la división de 25 filas-80 columnas que se expresa en formatohexadecimal), colocar la opción pulsar una tecla para desplazar la grafica (una animación de

franjas, marcos, triángulos, etc.)

3) Realizar un arreglo al ejemplo 2, para que muestre el símbolo negativo en el caso de que elminuendo sea menor que el sustraendo, chequeando la condición a través del registro status.

4) Diseñar un programa que realice el calculo de una operación donde el operador seaintroducido por teclado, el caracter (+, -, *, / ) será recibido en AL, de acuerdo al valor de AL,se ejecutará un procedimiento suma, resta, multiplicación, división con las instruccionesaritméticas de ASSEMBLER y las instrucciones de saltos [Barry B. Brey, ejemplo 6.35, pág. 229

 

]

5) Realizar un programa para ordenar elementos de un vector, empleando las funciones demanejo de pila PUSH, POP en ASSEMBLER [Barry B. Brey, ejemplo 6.36, pág. 233