Red de conocimiento informático - Conocimiento sistemático - ¿Entorno informático en lenguaje ensamblador...?

¿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)

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

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

Copyright (C) Microsoft Corp 1981-1985, 1987. Todos los derechos reservados.

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

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

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.

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)

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

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.