Mark, regresé a estudiar desde Hubei el 15 de agosto de 2023 y participé en una conferencia académica. Parece que los académicos requieren comunicación, especialmente para muchos intercambios en este campo, aún es necesario asistir a una conferencia académica al menos una vez al año. "No te defraudará
. Soy demasiado ignorante y estoy limitado a mi propio campo limitado. Quiero observar más el progreso actual en el mundo académico".
1. Programa fuente escrito en lenguaje ensamblador.
1.1 El proceso de trabajo de escribir programas en lenguaje ensamblador.
Ensamblador: Texto que contiene instrucciones y directivas de ensamblaje.
-
Las instrucciones de ensamblaje, correspondientes a instrucciones con código de máquina, pueden compilarse en instrucciones de máquina y finalmente
ejecutarse mediante la CPU. -
Las pseudoinstrucciones
son instrucciones que no tienen códigos de máquina correspondientes y, en última instancia, no son ejecutadas por la CPU.
:¿Quién ejecutará las pseudoinstrucciones?
Las pseudoinstrucciones son instrucciones ejecutadas por el compilador, y el compilador realiza el trabajo de compilación relacionado en función de las pseudoinstrucciones.
assume cs:codesg
codesg segment
mov ax,0123H
mov bx,0456H
add ax,bx
add ax,ax
mov ax,4c00h
int 21h
codesg ends
end
Retorno del programa (¡rutina!): Una vez que el programa termina de ejecutarse, el control de la CPU regresa al programa que permitió su ejecución (generalmente un sistema DOS)
1.2 Tres pseudoinstrucciones en el programa
- asumir
; El significado es asumir que un determinado segmento del registro
está asociado con un segmento en el programa definido con segment... termina - supongamos que cs:codesg significa que el registro CS está asociado con codesg, y los
codesg definidos se utilizan como el segmento de código del programa.
- definición de segmento
; Un ensamblador se compone de múltiples segmentos, que se utilizan para almacenar código, datos o como espacio de pila.
; Un ensamblador significativo debe tener al menos una sección, que se utiliza para almacenar código.
; Definir segmentos en el programa: cada segmento necesita un nombre de segmento
Nombre del segmento segmento: el comienzo del segmento
...
termina el nombre del segmento: el final del segmento
- final (no termina)
El marcador final para el ensamblador. Si no se agrega end al final del programa, el compilador no puede saber dónde termina el programa al compilarlo.
assume cs:codesg
codesg segment
mov ax,0123H
mov bx,0456H
add ax,bx
add ax,ax
mov ax,4c00h
int 21h
codesg ends
end
1.3 El programa fuente se convierte en código de máquina después de la compilación y la conexión.
1.4 Estructura del ensamblador
- Un programa ensamblador escrito escribiendo instrucciones directamente en Debug
; adecuado para programas cortos y concisos con funciones simples
; solo necesita incluir instrucciones ensambladoras
- Un programa que se escribe por separado en un archivo fuente y luego se compila en un archivo ejecutable
; adecuado para escribir programas grandes
; necesita incluir instrucciones de ensamblaje y pseudoinstrucciones para guiar el trabajo del compilador
; el programa fuente consta de algunos segmentos, que almacenan código y datos
, o utilizan un segmento como espacio de pila
assume cs:code,ds:data,ss:stack
data segment
dw 0123H,0456H,0789H,0abcH,0defH
data ends
stack segment
dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
stack ends
code segment
mov ax,stack
mov ss,ax
mov sp,20h ;设置栈段
mov ax,data
mov ds,ax ;设置数据段
mov bx,0
mov cx,8
s: push [bx]
add bx,2
loop s
....
code ends
end
; Punto y coma, usado para representar -- comentario
1.5 ¿Cómo escribir un programa?
Ejemplo: Programación para encontrar 2^3.
① Definir un segmento
② Implementar la tarea de procesamiento
③ Indicar dónde termina el programa
④ Asociar el segmento con el registro de segmento
⑤ Agregar el código devuelto por el programa
1.6 Posibles errores en el programa
Errores de sintaxis
; errores encontrados por el compilador cuando se compila el programa;
los errores en los siguientes programas son fáciles de encontrar
aume cs:abc
abc segment
mov ax,2
add ax,ax
add ax,sx
end
Errores lógicos
; errores que ocurren durante el tiempo de ejecución que no se pueden mostrar cuando se compila el programa
;
los errores en los siguientes programas no son fáciles de encontrar
assume cs:abc
abc segment
mov ax,2
add ax,ax
add ax,bx
mov ax,4c10H
int 21H
abc ends
end
求 2^
2. Del programa fuente a la ejecución del programa
2.1 El proceso desde escribir el programa fuente hasta ejecutar el archivo ejecutable
2.2 Editar programa fuente
2.3 Compilación
-
El archivo objeto (*.OBJ) es el resultado final que queremos obtener al compilar un programa fuente
. -
El archivo de lista (*.LST) es el resultado intermedio generado por el compilador cuando compila el programa fuente en un archivo objeto.
-
Los archivos de referencia cruzada (*.CRF), al igual que los archivos de lista, son resultados intermedios generados por el compilador al compilar programas fuente en archivos de destino.
-
La compilación del programa fuente se completa y las dos últimas líneas del resultado del compilador nos dicen que el programa fuente no tiene errores de advertencia ni errores que deban corregirse.
Dos tipos de errores
û Errores graves
û
No se puede encontrar el archivo de programa fuente proporcionado.
Agregue ; después del comando para simplificar el proceso.
2.4 Conexión
-
Un archivo ejecutable (.EXE) es el resultado final que obtenemos al conectar un programa.
-
El archivo de imagen (.MAP) es el resultado intermedio producido por el vinculador al vincular el archivo de destino en un archivo ejecutable.
-
El archivo de biblioteca (.LIB) contiene algunos subprogramas invocables. Si nuestro programa llama a un subprograma en un determinado archivo de biblioteca, debemos conectar este archivo de biblioteca a nuestro archivo de destino al conectarnos. Juntos, se genera un archivo ejecutable.
-
sin segmento de pila, un error de advertencia "sin segmento de pila", puede ignorar este error.
: Se pueden encontrar errores durante la conexión
: Ejemplo: objeto no encontrado - objeto no encontrado
2.5 Ejecutar programas ejecutables
Nuestro programa no envía ninguna información al monitor. El programa simplemente realiza algunas operaciones de enviar datos a registros y agregarlos, y no podemos
ver estas cosas en la pantalla.
:Una vez completada la ejecución del programa, regrese y el mensaje del sistema operativo aparecerá nuevamente en la pantalla.
2.6 Resumen
Archivo fuente
.asm
archivo objeto
.obj
archivo objeto
.obj
archivo ejecutable
.exe
3. Utilice Debug para rastrear la ejecución del programa.
3.1 Cargar el programa con Debug
resumen
Una vez cargado el programa, DS almacena la dirección del segmento del área de memoria donde se encuentra el programa. La dirección de desplazamiento de esta área de memoria es 0, por lo que la dirección del área de memoria donde se encuentra el programa es: DS:0.
这个内存区的前256 个字节存PSP,DOS用来和程序进行通信。
El espacio desde 256 bytes hacia atrás almacena el programa y el valor de CS es DS+10H.
; Después de cargar el programa, la longitud del código (bytes) se almacena en CX.
¿Dónde se carga el programa en la memoria?
3.2 Utilice Depuración para realizar un solo paso en el programa
3.3 Otros métodos de ejecución
-
Continuar comando P (Continuar):
similar al comando T, ejecuta las instrucciones una por una y muestra los resultados. Pero cuando encuentra una subrutina, interrupción, etc., se ejecuta directamente y luego se muestra el resultado. -
Ejecute el comando G (Ir): comience a ejecutar el programa desde la dirección especificada hasta que se encuentre un punto de interrupción o el programa finalice normalmente.
3.4 Diferentes formas de ejecución del programa
- Ejecutar en DOS
El estado "normal" de ejecución del programa.
- Después de que se inicia DOS, la computadora es controlada por el "intérprete de comandos" (el programa command.com);
- Cuando se ejecuta un programa ejecutable, el comando carga el programa en la memoria y configura el CS:IP de la CPU para que apunte a la primera instrucción del programa (es decir, el punto de entrada del programa), para que el programa pueda ejecutarse.
- Una vez que el programa termina de ejecutarse, regresa al "intérprete de comandos" y la CPU continúa ejecutando el comando.
- Ejecutar en depuración
La ejecución del programa se ejecuta en el ciclo de desarrollo;
Al ejecutar Debug, el programa de comando carga Debug.exe y debug carga el programa en la memoria. Una vez que el programa termina de ejecutarse, debe regresar
a Debug. Utilice el comando Q para salir de Debug y regresará al comando.