Date post: | 18-Jul-2015 |
Category: |
Documents |
Upload: | alexis-jahen |
View: | 504 times |
Download: | 3 times |
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
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
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
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
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.
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.
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
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)!
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
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
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.
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
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
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
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
]