Uso Del Debug En Microprocesadores
popeye_0018 de Agosto de 2011
8.043 Palabras (33 Páginas)1.068 Visitas
LABORATORIO DE MICROPROCESADORES
Temas:
- Conjunto de instrucciones.
- Uso del Debug
- Programación básica en lenguaje ensamblador.
- Programación en lenguaje ensamblador del 8086
1.- CONJUNTO DE INSTRUCCIONES.
El juego completo de instrucciones reconocidas por los procesadores Intel 8086 a 80286,mas adelante se darán a conocer mas instrucciones del 8086 en forma mas detallada, junto con los coprocesadores 8087 y 80287, se enlistan en el apéndice E. Como puede verse en dicho apéndice, la mayoría de las instrucciones requieren algunos operandos o expresiones para trabajar, y lo cual es válido también para las directivas. Los operandos representan valores, registros o localidades de memoria a ser accedidas de alguna manera. Las expresiones combinan operandos y operadores aritméticos y lógicos para calcular en valor o la dirección a acceder.
Los operandos permitidos se enlistan a continuación:
Constantes.- Pueden ser números, cadenas o expresiones que representan un valor fijo. Por ejemplo, para cargar un registro con valor constante usaríamos la instrucción MOV indicando el registro y el valor que cargaríamos dicho registro.
mov ax,9
mov al,´c´
mov bx,65535/3
mov cx,count
para el último ejemplo count sólo será válido si este fue declarado con la directiva EQU.
Directos.- Aquí se debe especificar la dirección de memoria a acceder en la forma segmento:offset.
mov ax,ss:0031h
mov al,data:0
mov bx,DGROUP:block
Relocalizables.- Por medio de un símbolo asociado a una dirección de memoria y que puede ser usado también para llamados.
mov ax, value
call main
mov al,OFFSET dgroup:tabla
mov bx, count
para el último ejemplo count sólo será válido si fue declarado con la directiva DW.
Contador de localización.- Usado para indicar la actual localización en el actual segmento durante el ensamblado. Representado con el símbolo $ y también conocido como centinela.
help DB ´OPCIONES´,13,10
F1 DB ´ F1 salva pantalla´,13,10
.
.
.
F10 DB ´ F10 exit´,13,10,´$
DISTANCIA = $-help
Registros.- Cuando se hace referencia a cualquiera de los registros de propósito general, apuntadores, índices, o de segmento.
Basados.- Un operador basado representa una dirección de memoria relativa a uno de los registros de base (BP o BX). Su sintaxis es:
desplazamiento[BP]
desplazamiento[BX]
[desplazamiento][BP]
[BP+desplazamiento]
[BP].desplazamiento
[BP]+desplazamiento
en cada caso la dirección efectiva es la suma del desplazamiento y el contenido del registro.
mov ax,[BP]
mov al,[bx]
mov bx,12[bx]
mov bx,fred[bp]
Indexado.- Un operador indexado representa una dirección de memoria relativa a uno de los registros índice (SI o DI). Su sintaxis es:
desplazamiento[DI]
desplazamiento[SI]
[desplazamiento][DI]
[DI+desplazamiento]
[DI].desplazamiento
[DI]+desplazamiento
en cada caso la dirección efectiva es la suma del desplazamiento y el contenido del registro.
mov ax,[si]
mov al,[di]
mov bx,12[di]
mov bx,fred[si]
Base-indexados.- Un operador base-indexado representa una dirección de memoria relativa a la combinación de los registros de base e índice. Su sintaxis es:
desplazamiento[BP][SI]
desplazamiento[BX][DI]
desplazamiento[BX][SI]
desplazamiento[BP][DI]
[desplazamiento][BP][DI]
[BP+DI+desplazamiento]
[BP+DI].desplazamiento
[DI]+desplazamiento+[BP]
en cada caso la dirección efectiva es la suma del desplazamiento y el contenido del registro.
mov ax,[BP][si]
mov al,[bx+di]
mov bx,12[bp+di]
mov bx,fred[bx][si]
Estructuras.- Su sintaxis es variable.campo. variable es el nombre con que se declaró la estructura, y campo es el nombre del campo dentro de la estructura.
date STRUC
mes DW ?
dia DW ?
aa DW ?
date ENDS
actual date ‹´ja´,´01´,´84´›
mov ax,actual.dia
mov actual.aa, ´85´
Operadores y expresiones.- Se cuenta con los siguientes operadores:
-aritméticos
expresión1 * expresión2
expresión1 / expresión2
expresión1 MOD expresión2
expresión1 + expresión2
expresión1 - expresión2
+ expresión
- expresión
-de corrimiento
expresión1 SHR contador
expresión1 SHL contador
-relacionales
expresión1 EQ expresión2
expresión1 NE expresión2
expresión1 LT expresión2
expresión1 LE expresión2
expresión1 GT expresión2
expresión1 GE expresión2
- de bit
NOT expresión
expresión1 AND expresión2
expresión1 OR expresión2
expresión1 XOR expresión2
-de índice
[expresión1] [expresión2]
ejemplos:
mov al, string[3]
mov string[last],al
mov cx,dgroup:[1] ; igual a mov cx,dgroup:1
-de apuntador
tipo PTR expresión
tipo puede ser BYTE ó 1, WORD ó 2, DWORD ó 4, QWORD ó 8, TBYTE ó 10, NEAR ó 0FFFFh, FAR ó 0FFFEh. Ejemplos:
call FAR PTR subrout3
mov BYTE ptr [array], 1
add al, BYTE ptr [full_word]
-de nombre de campo
estructura.campo
ejemplos:
inc month.day
mov time.min,0
mov [bx].dest
-de propósito especial.
OFFSET expresión.- Regresa el desplazamiento del operando
mov bx, OFFSET dgroup:array
mov bx, offset subrout3
SHORT etiqueta.- Para un salto de menos de 128 bytes
jmp SHORT loop
LENGTH variable.- Regresa el número de elementos de variable según su tipo
mov cx,length array
SIZE variable.- Regresa el tamaño en bytes alojados para variable
mov cx,size array
SEG expresión.- Regresa el valor del segmento para expresión
mov ax, SEG saludo
2.-DEBUG
Para comenzar a dar los primeros pasos en ensamblador, es aconsejable saber las interioridades del ordenador, en especial cómo funciona la CPU. Por ello se hace necesario aprender a utilizar una herramienta que ofrece el MS-DOS:
DEBUG es un programa que permite introducir o escribir pequeños programas en ensamblador o lenguaje máquina, pudiendo ejecutar instrucciones una a una (step by step o paso a paso). De esta manera se pueden localizar y corregir errores en los programas.
Un "bug" (chinche, bicho, microbio, etc.) se denomina en informática a un error de programa (se dice que los errores de un programa "chinchan"). El proceso de buscar, localizar y capturar "bugs" o errores, se denomina debugging (depuración), y de ahí el nombre de DEBUG.
El origen del término debugging se remonta a los primeros días de la informática, cuando, en la universidad de Harvard, un ordenador MARK I se paró.Tras una intensa búsqueda - y bastantes quebraderos de cabeza -, los técnicos encontraron la fuente de los problemas: una polilla atrapada en los contactos de un relé. Tras quitarla, anotaron en el libro de registro que habían "debugged" (quitado la polilla) del ordenador.
Pero nuestra misión no ser quitar chinches, ni polillas ni corregir errores en los programas, si no introducir instrucciones en lenguaje máquina e ir viendo cómo se van ejecutando, cómo se almacenan los resultados, dónde deben estar los datos y otros detalles y procesos que determinan el funcionamiento del ordenador. Todo esto nos ayudará a entender cómo funciona la máquina y, sobre todo, para entender cómo funcionan las órdenes y las operaciones antes de incluirlas definitivamente en un programa.
ENTRAR EN DEBUG
Para ejecutar DEBUG se pueden utilizar dos métodos desde el prompt del DOS:
1- DEBUG
Ejecuta DEBUG en una nueva sesión
2- DEBUG nombre_fichero_EXE_ó_COM
Ejecuta DEBUG cargando en memoria el fichero .EXE ó .COM que indiquemos como parámetro.
Al entrar en DEBUG, aparecerá un guión en la parte izquierda, y, a su derecha, un cursor. Este es
...