Programa fuente del programa en lenguaje ensamblador ch3_1

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.

Insertar descripción de la imagen aquí

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.

Insertar descripción de la imagen aquí

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

Insertar descripción de la imagen aquí

  • 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

Insertar descripción de la imagen aquí

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

Insertar descripción de la imagen aquí

2.2 Editar programa fuente

Insertar descripción de la imagen aquí

2.3 Compilación

Insertar descripción de la imagen aquí

  • 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.

Insertar descripción de la imagen aquí

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

Insertar descripción de la imagen aquí

2.5 Ejecutar programas ejecutables

Insertar descripción de la imagen aquí

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

Insertar descripción de la imagen aquí

3. Utilice Debug para rastrear la ejecución del programa.

Insertar descripción de la imagen aquí

3.1 Cargar el programa con Debug

Insertar descripción de la imagen aquí

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?

Insertar descripción de la imagen aquí

3.2 Utilice Depuración para realizar un solo paso en el programa

Insertar descripción de la imagen aquí

3.3 Otros métodos de ejecución

Insertar descripción de la imagen aquí

  • 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.

  1. Después de que se inicia DOS, la computadora es controlada por el "intérprete de comandos" (el programa command.com);
  1. 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.
  1. 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;
Insertar descripción de la imagen aquí

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.

Insertar descripción de la imagen aquí

Correspondencia de capítulos de libros

Insertar descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/chumingqian/article/details/132515807
Recomendado
Clasificación