¿Entorno informático en lenguaje ensamblador...?
Asunto: Ejemplos y orientación práctica en lenguaje ensamblador
Editor: admin Hora: 2004-3-20 20:18 Lectura: 52369 Puntuación: 8 Imprimir
Prefacio:
Una breve introducción desde cómo crear archivos fuente hasta la depuración...
Contenido:
Desde cómo crear archivos fuente hasta Una breve introducción Se proporciona información sobre la depuración, junto con ejemplos. Debido a mi nivel limitado, indique si hay algún error o área que pueda modificarse aún más a continuación
Proceso de capacitación en lenguaje ensamblador:
1.
Sistema operativo MS-DOS (como: MSDOS6.22, MSDOS7.0, etc.)
Editor de texto (como: EDIT.COM, TURBO.EXE, TC. EXE, C. EXE, etc.)
Ensamblador (como: MASM.EXE, ASM.EXE, etc.)
Programa vinculador (como: LINK.EXE, etc.) .)
Depurador (como: DEBUG.EXE, etc.)
2. Proceso de creación del programa ensamblador:
a. ————→b. Compilar en el archivo de destino—↓┬ —→d. Conectar al archivo ejecutable
↑
│ c.
├—————— ————————————————┘ ↓
↑ Incorrecto, use herramientas de depuración para depurar y modificar de nuevo (error lógico) ↓
└————————————————————————————←eRun
↓Correcto
g .Completo
3 Ahora proporcione una descripción detallada de cada proceso con letras (PROCEDIMIENTO) en (2)
PROCEDIMIENTO a: Crear. un programa fuente ensamblador (es decir, crear un archivo con el nombre .asm)
Este proceso es equivalente a escribir código fuente en papel, excepto que el papel se convierte en una computadora. Este proceso también se denomina entrada de código fuente. . Hay muchas formas de ingresar el código fuente del programa en la computadora. Los métodos específicos se presentarán a continuación.
1. Ingrese a través del editor de texto EDIT.EXE que viene con MD-DOS. En el indicador de DOS, escriba: EDIT y presione Enter. En este momento, si se puede llamar en su sistema, el. Aparecerá la pantalla de operación EDITAR y podrá ingresar bajo las indicaciones. Cuando se complete la entrada, elija guardar y asigne un nombre al archivo que ingresó, en el formato: nombre de archivo.asm; es el nombre del archivo que proporcionó, que consta de 1 a 8 caracteres), se debe agregar asm para el reconocimiento del programa ensamblador y no se puede cambiar. Después de guardar, puede usar el comando DIR de DOS para verlo en DOS. Si ve que el archivo guardado existe, puede continuar con el proceso b.
2. Si no hay EDIT en su sistema, también puede usar un editor de texto con el que esté familiarizado para ingresar y editar. Por ejemplo, puede usar un editor de texto en lenguaje C y Pascal. edite y finalmente guarde el archivo como El formato de nombre de archivo.asm es suficiente.
PROCEDIMIENTO b: compilar el archivo de destino (es decir, compilar en un archivo .obj .lst .crf)
En este proceso, la computadora compilará el código fuente correcto que usted compiló en la máquina. lenguaje, archivos de objetos para listados de programas y tablas de referencias cruzadas. Si hay un error de declaración en su programa en este momento, el sistema informará un error y señalará qué línea y qué tipo de error se encuentra. Puede modificarlo uno por uno de acuerdo con las indicaciones. Ahora introduzca el proceso específico:
Escriba el nombre de archivo MASM en el indicador de DOS y presione Entrar
(Nota: el ensamblador en su sistema es MASM.EXE. Si el ensamblador en su sistema es ASM.EXE, cambie el comando a nombre de archivo ASM y presione Enter. Nombre de archivo es el nombre de archivo que acaba de crear en el PROCEDIMIENTO a)
En este momento, los archivos de salida del ensamblador pueden ser tres (respectivamente:. obj .lst .crf), aparecerán tres preguntas y podrá presionar Enter hasta aquí. La información que se muestra a continuación es la cantidad de errores en el programa fuente. Si es 0, significa que se aprobó con éxito y se puede llevar a cabo el proceso c. Pero si no es 0, significa que hay un error y se señala la línea donde ocurre el error. Puede realizar modificaciones de acuerdo con este mensaje. Pero si se muestran demasiados errores antes de que pueda verlos claramente, puede usar el siguiente formulario de comando para guardar la información del error en un archivo que especifique y luego usar un editor de texto para verlo. MASM nombre de archivo gt; filen (filen es un nombre de archivo no utilizado para almacenar información de error) Puede verificar filen más tarde para obtener la información de error.
PROCEDIMIENTO c: Falló la compilación, vuelva a modificar (tipo de error: la declaración del programa fuente es ilegal)
Después de ejecutar el PROCEDIMIENTO b, si hay un mensaje de error, debemos hacerlo nosotros mismos Presione el PROCEDIMIENTO c para hacerlo, pero no puede saltar al PROCEDIMIENTO d. Si ejecuta el PROCEDIMIENTO d a la fuerza, no habrá resultados efectivos.
¡Abre Cash ahora para encontrar errores! En primer lugar hay que tener claro que los errores detectados en el PROCEDIMIENTO b son errores de sintaxis o de uso de cada sentencia. No puede detectar errores en el diseño lógico del programa (posición de disposición de las sentencias), por lo que se debe recordar el número de línea de la sentencia. error. Después de registrar el número de línea, debe ejecutar el PROCEDIMIENTO a nuevamente. En este momento, la operación debe ser abrir el programa fuente compilado (tomando EDITAR como ejemplo: escriba en el indicador de DOS:
EDITAR nombre de archivo. asm Enter), modificar y guardar según el número de línea, y ensamblar nuevamente hasta pasar el PROCEDIMIENTO b. Puede continuar ejecutando el PROCEDIMIENTO d.
Los siguientes son algunos mensajes de error comunes para una fácil verificación:
1. Registro ya definido. Ocurre un error lógico dentro del ensamblado.
2. escriba el símbolo Hay algunas cosas que no se pueden reconocer en el tipo de declaración
3. El símbolo está multidefinido. Un símbolo se define repetidamente
4. El símbolo no está definido
5. La sintaxis de la declaración de error de sintaxis no coincide con ninguna sintaxis reconocida
6 El símbolo es una palabra reservada
Un intento de. utilizar ilegalmente una palabra reservada de un ensamblador (por ejemplo: definir agregar como una variable)
7. Los parámetros de SEGMENTO de tipo de alineación/combinación incorrectos son incorrectos
8. const Este es un uso ilegal de la instrucción de suma
9. Los operandos deben ser iguales o 1 abs. Este es un uso ilegal de la instrucción de resta
10. para repetir la dirección base
11. Tamaño ilegal para el elemento al que se hace referencia. La longitud es ilegal (como desplazamiento de palabra doble)
12. colocado en el campo "reg"
13. Debe ser AX o AL. Algunas instrucciones solo pueden usar AX o AL.
14. Uso inadecuado del registro de segmento. El uso de registros de segmento es ilegal. (como: mov ds, 0)
15. División por 0 o desbordamiento Da una expresión usando 0 como divisor.
16. qué se debe usar
17. Uso ilegal del registro CS Intentar usar el registro CS ilegalmente
18. El DUP es demasiado grande para el enlazador
El anidamiento de DUP es demasiado largo, por lo que no se pueden obtener los registros requeridos desde el vinculador
PROCEDIMIENTO d: Enlace al archivo ejecutable (es decir: conexión como un archivo .exe o .com)
Hay Generalmente no hay accidentes en este proceso. Si los hay, el nombre del archivo es incorrecto.
Formulario: en el indicador de DOS: ENLACE nombre de archivo Ingresar
PROCEDIMIENTO e: Ejecute el archivo ejecutable compilado
Cuando el PROCEDIMIENTO d pase, producirá un archivo ejecutable , luego simplemente ejecute el programa para ver si produce los resultados que imaginaba. Durante la ejecución de prueba, intente probar algunos estados críticos para ver si el programa se ejecuta de manera estable y los resultados son correctos. Si todo es normal, puedes ingresar al PROCEDIMIENTO g.
Pero lo más aterrador es que no está bien y el programa produce algunos resultados inexplicables (no creas que tu ordenador no está escuchando tus instrucciones. De hecho, está ejecutando el programa meticulosamente según (Siempre pensé que había algún problema con mi computadora). Si estás en la sala de examen, no entres en pánico, no mires la computadora y quédate en silencio por unos minutos. (tienes mucho tiempo de todos modos). En este momento, se utiliza el paso más crítico y comúnmente utilizado, que es realizar el PROCEDIMIENTO f.
PROCEDIMIENTO f: Usar herramientas de depuración para depurar y volver a modificar (error lógico)
Aquí presentaré el uso del depurador DEBUG.EXE que viene con DOS para depurar y inspección. Error.
En primer lugar, debemos comprender el uso básico de DEBUG:
1. Formato de entrada al depurar el programa:
DEBUG FILENAME. Ingrese
p>Donde FILENAME es el nombre del archivo principal y el nombre del archivo de extensión. Por ejemplo, hemos compilado un archivo antes y su nombre es: djx.exe. Indicador de DOS
Haga clic en: DEBUG djx.exe y presione Entrar, verá el mensaje '-'. Si no hay ningún mensaje, significa que es correcto y puede depurar.
2. Introducción al comando DEBUG utilizado en el proceso de depuración DEBUG:
(Nota: el contenido encerrado entre [] en el comando puede ser predeterminado)
1) D (Volcado) muestra el contenido de la unidad de memoria especificada (generalmente utilizada para ver el contenido de los números de datos, es decir, el segmento DS):
Formato: d[dirección] muestra 128 de la unidad de memoria especificada por [dirección] Bytes de contenido
[Dirección] De forma predeterminada, se muestra el contenido después del comando DUMP anterior
d El rango de direcciones muestra el contenido de la memoria dentro del rango especificado.
Ejemplo: -d100 muestra el contenido a partir del segmento DS 100H (se muestra en hexadecimal)
2) E (Enter) modifica el contenido de la unidad de almacenamiento (generalmente en el segmento DS )
Formato: dirección electrónica [datos] Utilice los [datos] proporcionados para reemplazar el contenido del rango especificado de unidades de almacenamiento
La dirección modifica el contenido de una unidad de memoria especificada
Ejemplo: -e ds: 200 'djx'FF00AA puede reemplazar el contenido del segmento DS del 200 al 205
al 64 6A 78 FF 00 AA
3)G (GO) ejecutar comando
Formato: -g [=dirección][dirección del punto de interrupción 1 [dirección del punto de interrupción 2...[dirección del punto de interrupción 10]]]
Desde especificado [Dirección] comienza a ejecutar el programa (si la dirección por defecto comienza desde el CS: IP actual), ejecútelo hasta [dirección de punto de interrupción 1] y deténgase, mostrando el contenido de todos los registros y bits de bandera y la siguiente instrucción, si hay una. punto de interrupción más tarde, puede escribir g y continuar con la ejecución.
Ejemplo: -g001a ejecuta las instrucciones desde el cs:ip actual a 001a
Nota: La configuración de la dirección debe comenzar desde el primer byte de la instrucción.
4)T(Trace) ejecuta una declaración
Formato: -t [=dirección] Ejecuta una declaración comenzando desde la [dirección] especificada y luego se detiene, mostrando todo el contenido del registro y marca el valor del bit y la siguiente instrucción. Si [dirección] es el valor predeterminado, la ejecución comienza desde el CS:IP actual
-t [=dirección][valor] Ejecute instrucciones de valor desde la dirección especificada y deténgase.
5)P(proceed) ejecuta un bucle; una interrupción suave o un subproceso de llamada
Formato: -p [=dirección][n]
Ejemplo: mov ah, 02h
mov dl, 41h
int 21h
En este momento, use: -p Después de presionar Enter, el sistema mostrará un carácter A Si en lugar de usar P, use T, entonces el sistema ingresará la llamada de interrupción de INT 21H y no podrá salir. En este momento, pensará erróneamente que su programa está incorrecto, ¡asegúrese de prestar atención! p>
6) R (registro) muestra y puede modificar el contenido del registro
Formato: -r muestra el contenido de todos los registros
-r El nombre del registro modifica el contenido del registro especificado (se puede cambiar: AX, BX, CX, DX, SP,
BP, SI, DI, CS, DS, ES, SS, PC, IP, F) p>
7)Desmontaje U (Desensamblar)
Formato: -u [dirección] desensambla 32 bytes de la [dirección] especificada. Si [dirección] es el valor predeterminado, ensamblará 32 bytes de la [dirección]. dirección actual.
-u rango de direcciones desensambla las unidades de almacenamiento dentro del rango especificado
Lo anterior es una explicación del comando DEBUG que se puede usar en el depurador. Hay otros comandos en DEBUG. No se utilizará en el programa de inspección y no se volverá a introducir.
PROCEDIMIENTO g: Una vez compilado el programa, ¡¡¡todo está bien !!! ¡¡¡Aprobó el examen!
El siguiente es un programa con oraciones incorrectas. Espero que todos puedan depurarlo, modificarlo y pasarlo conmigo:
Primero ejecute el PROCEDIMIENTO a para editar el programa fuente.
Para lograr la función: Mostrar en pantalla: Hola mundo
Mi nombre es DJX
Nombre de archivo: error.asm
Número de línea: Código fuente :
1 segmento de datos
2 out1 db 'Hola mundo'
3 ax db 'Mi nombre es DJX'
4 datos ens
5
6 segmento de código
7 supone cs: código; ds: datos
8 lea dx, out1
9 mov ah, 2
10 int 21h
11
12 mov dl, 0ah
13 mov ah, 2
14 int 21h
15 mov dl, 0dh
16 moo ah, 2
17 int 21h
18
p>19 lea dx, ax
20 mov ah,
21 int 21h
22 fin de código p>
edición Después de ejecutar el PROCEDIMIENTO b, use masm para compilar: error de masm Después de presionar Enter, la pantalla es la siguiente:
Microsoft (R) Macro Assembler Versión 5.00
Nombre de archivo del objeto [error.OBJ]:
Listado de fuentes [NUL.LST]:
Referencia cruzada [NUL.CRF]:
Fin del archivo encontrado en el archivo de entrada
error.ASM(23): advertencia A4085: Fin del archivo, sin FIN directiva
Segmentos abiertos: DATOS
error.ASM(3): advertencia A4016: Palabra reservada utilizada como símbolo: AX
error.ASM(4): error A2105: Esperado: instrucción o directiva
error.ASM(16): error A2105: Esperado: instrucción o directiva
error.ASM(19): error A2049: Uso ilegal de registrarse
Fin del archivo encontrado en el archivo de entrada
error.ASM(23): advertencia A4085: Fin del archivo, sin directiva END
51566 406450 Símbolo de bytes espacio libre
2
Errores de advertencia
4 errores graves
Indica que este programa tiene errores y hay errores en las líneas 3, 4, 16, 19 y 23.
Ejecutaremos el PROCEDIMIENTO c para verificar uno por uno
La tercera línea: 3 ax db 'Mi nombre es DJX'
El error es que AX no se puede usar como nombre de variable, corrección:
3 out2 db 'Mi nombre es DJX'
Tenga en cuenta que cuando definimos AX como una variable, usamos 'variable AX' en el siguiente programa en la línea 19 p>
19 lea dx, ax
El error de la línea 19 también se informa en el informe de errores porque la dirección efectiva de AX no se puede asignar a DX Corrección:
19. lea dx, out2
Esto resuelve dos errores a la vez
La cuarta línea: 4 data ens
Esta línea es el final de un párrafo, pero la declaración falta una letra, corrección:
p>4 datos terminan
Línea 16: 16 moo ah, 2
Esta línea también es un error tipográfico, corrección:
16 mov ah, 2
Línea 23:
Mensaje de error: error.ASM(23): advertencia A4085: Fin del archivo, sin directiva END p>
Significa que este programa no finaliza la pseudo operación:
Agregar: Agregar indicadores de dirección en las líneas séptima y octava: inicio:
Original 23 fin. inicio
Ejecutar PROCEDIMIENTO a Modificar el programa fuente de la siguiente manera:
segmento de datos
out1 db 'Hola mundo'
out2 db ' Mi nombre es DJX'
los datos terminan
segmento de código
asume cs: code; ds: data
inicio:
lea dx, out1
p>mov ah, 2
int 21h
mov dl, 0ah
mov ah , 2
int 21h
mov dl, 0dh
mov ah, 2
int 21h
lea dx, out2
mov ah, 9
int 21h
el código termina
fin de inicio
Continuar con PROCEDIMIENTO b nuevamente para compilar, la pantalla muestra:
Microsoft (R) Macro Assembler Versión 5.00
Copyright (C) Microsoft Corp 1981-1985, 1987. Todos los derechos reservados. p>
Nombre de archivo del objeto [error.OBJ]:
Listado de fuentes [NUL.LST]:
Referencia cruzada [NUL.CRF]:
51524 406492 Bytes de espacio libre para símbolos
0 errores de advertencia
0 errores graves
Este programa no tiene errores en las declaraciones.
Ejecute PROCEDIMIENTO d nuevamente para conectarse a un archivo ejecutable (error de enlace y presione Enter), la pantalla muestra:
Microsoft (R) Overlay Linker Versión 3.60
Copyright (C) Microsoft Corp 1983-1987. Todos los derechos reservados.
Ejecutar archivo [ERROR.EXE]:
Listar archivo [NUL.MAP]:
Bibliotecas [.LIB]:
ENLACE: advertencia L4021: no hay segmento de pila
En este momento, el archivo ejecutable error.exe ya existe. Puede ejecutar el PROCEDIMIENTO e para ejecutarlo. para ver si es correcto
Escriba: error y presione Enter en el mensaje DOS (¡¡¡tenga cuidado!!!)
La pantalla muestra: caracteres confusos y fallas. ¡Resetear Mi Computadora!
Significa que el programa tiene un error lógico y es grave.
Esto requiere usar el PROCEDIMIENTO f, depurar con herramientas de depuración y encontrar errores.
Escriba: debug error.exe en el indicador de DOS y presione Entrar
El indicador - aparece en la pantalla. En este momento, puede usar el comando DEBUG para encontrar el error.
Primero utilicé el comando d para ver el área de datos y el contenido. Las dos cadenas definidas por el desarrollo no estaban al principio del segmento de datos, sino en la posición 100h dentro del segmento de datos. Recuerdo que masm tiene una estipulación no escrita es que después de definir el segmento de datos, las variables definidas son todas unidades 100h hacia atrás. Necesitamos configurar el registro del segmento ds y agregar el siguiente comando después del inicio: del programa: (Ejecutar). PROCEDIMIENTO a) p>
mov ax, data
mov ds, ax
Ejecute PROCEDIMIENTO b, PROCEDIMIENTO d, PROCEDIMIENTO e para ejecutar el programa,
La pantalla muestra:
Salto de línea
Mi nombre es DJX y caracteres confusos, y la computadora falla. (¡Tiene que reiniciar nuevamente!)
Ejecuté el PROCEDIMIENTO y un programa de verificación nuevamente y encontré:
1. El lenguaje ensamblador estipula que cada cadena debe terminar con $
2. El número de subfunción AH en la declaración que genera la primera cadena debe ser 09H
Corrija los dos puntos anteriores.
Ejecute PROCEDIMIENTO b, PROCEDIMIENTO d, PROCEDIMIENTO e para ejecutar el programa.
La pantalla muestra:
Hola mundo
Mi nombre. DJX falla y no puede regresar a DOS
Análisis de causa, no hay instrucciones para regresar a DOS en el programa, corrección:
Use el PROCEDIMIENTO a para editar:
Usar La subfunción 4cH de la interrupción 21H de DOS puede volver a DOS Agregar:
mov ah, 4ch
int 21h
antes de que finalice el código. y luego ejecute el PROCEDIMIENTO b, PROCEDIMIENTO d, PROCEDIMIENTO e para ejecutar el programa,
La pantalla muestra:
Hola palabra
Mi nombre es DJX p>
y volver a DOS
¡Éxito!
De esta forma se completa y corrige la depuración de un programa.
El siguiente es el programa fuente correcto:
segmento de datos
out1 db 'Hola mundo$'
out2 db 'Mi nombre es DJX$'
los datos terminan
segmento de código
supongamos cs: código ds: datos
inicio:
mov ax, data
mov ds, ax
lea dx, out1
mov ah, 9
int 21h
p>mov dl, 0ah
mov ah, 2
int 21h
mov dl, 0dh
mov ah, 2
int 21h
lea dx, out2
mov ah, 9
int 21h
mov ah , 4ch
int 21h
código termina
fin inicio
El programa anterior es muy simple, solo para ilustrar el Implementación del lenguaje ensamblador, proceso de depuración y programación de computadoras, el lenguaje ensamblador requiere más práctica para dominar sus características para aprobar con éxito el examen.