Red de conocimiento informático - Material del sitio web - ¿Cómo aprender a ensamblar?

¿Cómo aprender a ensamblar?

1. Aprenda a ensamblar

Condiciones que se deben cumplir: --Microcomputadora (microcomputadora 80X86) --Sistema operativo MSDOS o "modo MS-DOS" de Win95/98 - - Herramientas de programación: Editor de texto: como EDIT de MS-DOS

Ensamblador: como MASM.EXE versión 5.0

Enlazador: como LINK.EXE

Conversión binaria: Como EXE2BIN.EXE

Aprender lenguaje ensamblador es muy práctico. Sólo puedes dominarlo escribiendo mucho código. También es útil leer el programa fuente.

Dado que el lenguaje ensamblador está estrechamente relacionado con el chip de la CPU, es necesario comprender claramente la información de hardware del chip de la CPU y sus dispositivos periféricos para un modelo determinado.

Sólo así será cómodo escribir código. Por lo tanto, hay dos tipos de información que debe acumular: una es información de hardware y software del sistema, y ​​la otra es experiencia de algoritmos. Otras, como herramientas de montaje, etc., no hay mucho donde profundizar.

La primera categoría de información, como varias interrupciones del BIOS, llamadas a funciones de MS-DOS y bibliotecas API de Windows, se pueden clasificar como software del sistema

mientras que la estructura de la CPU y las definiciones de puertos; Las definiciones de interrupciones, los modos de bus, etc. se pueden clasificar como datos de hardware.

El segundo tipo de información, como algoritmos de clasificación, algoritmos de búsqueda de cadenas, etc. Algoritmos como los que utilizan los motores de búsqueda pueden encontrar información que cumpla las condiciones en el menor tiempo

y además son inteligentes. Esta solución de búsqueda contiene un algoritmo muy científico. Son todas cosas abstractas

.

En resumen, al aprender a ensamblar, debes tener un propósito claro, una máquina objetivo clara y un problema claro a resolver. Sólo así podremos apuntar y lograr algo al final.

2 Conceptos básicos del lenguaje ensamblador Instrucciones básicas

La máquina de destino que estamos aprendiendo es una PC y la CPU es Intel80x86, así que primero familiarícese con la estructura general de la CPU.

De hecho, a menudo se utilizan varios registros de la CPU. Otros, como pines, estructuras internas, etc., deben ignorarse al principio.

Dado que las nuevas versiones de las CPU Intel80x86 son compatibles con las antiguas, los programas diseñados en la CPU antigua pueden ejecutarse en la nueva CPU sin ninguna modificación.

Todos los registros de Intel 8086/8088 se conservan en las nuevas versiones posteriores de la CPU. También son los registros de CPU más básicos.

Así que estudio principalmente los registros de la CPU Intel 8086:

Sumador AX (AH/AL) multiplicación, división, E/S, operaciones aritméticas rápidas

Registro de dirección base BX (BH/ BL) Puntero base (segmento de datos)

Contador CX (CH/CL) Contador de ciclos, repeticiones o desplazamientos

Registro de datos DX (DH/DL) Multiplicación, división, E/S

Índice de origen Cadena de origen SI y puntero de índice

Índice de destino Cadena de destino DI y puntero de índice

Puntero de dirección base Puntero de dirección base de pila BP

p >

Puntero de pila SP, puntero de posición actual de la pila

Bandera Bandera de CPU

Puntero de instrucción Ubicación de memoria IP de la instrucción actual

Segmento de código Programa CS code Valor del segmento

Segmento de datos DS Valor del segmento de datos del programa

Segmento de pila SS Valor del segmento para operación de pila

Segmento adicional ES Valor del segmento para segmento de datos adicional del programa

p>

El significado de cada bit en el registro de bandera de la CPU es el siguiente:

FLAG: (El significado cuando el BIT correspondiente es 1)

El CF El bit de acarreo transporta o toma prestado el bit del operando objetivo

Bit de paridad PF El resultado de la verificación de byte bajo es paridad par

Indicador de acarreo auxiliar AF bajo Indicador de acarreo o préstamo de 4 bits

El resultado del indicador cero de ZF es cero

El resultado del indicador negativo de SF es negativo

El indicador de un solo paso (CPU) de TF cambia al estado de un solo paso

Indicador de interrupción IF respuesta de interrupción Abierto (cerrado cuando se borra)

La operación de cadena de dirección DF está predeterminada hacia abajo (abajo en lugar de arriba)

El resultado de desbordamiento OF es demasiado grande o demasiado pequeño (para el destino ) Instrucciones principales en lenguaje ensamblador Es la operación de cada uno de los registros anteriores. El siguiente código es el código de un archivo de programa ejecutable de tipo COM completo. Después de la compilación, conexión y conversión, se puede ejecutar directamente. El resultado es que algunos caracteres se muestran sobre un fondo de color.

Solo hay 204 Bytes después de la compilación.

(Debe copiar este código por completo y guardarlo como un archivo con una extensión ASM, como mypro1.asm.

Luego compílelo, vincúlelo y conviértalo en un archivo ejecutable. Se genera el nombre mypro1.COM. Puede ver los resultados de su ejecución escribiendo mypro1 en la línea de comando de DOS. Hablaremos sobre cómo compilarlo y vincularlo más adelante. Primero puede descargar la herramienta simple en . la página de inicio de ensamblador

estudio y utilice el proceso por lotes TOCOM.BAT [nombre de archivo] para generar archivos COM con éxito.

)

En este ejemplo se utilizan varios tipos de instrucciones:

registro mov, tipo de transferencia de datos

memoria mov, tipo de transferencia de datos<; /p>

empujar registro; operación de pila: empujar hacia la pila

registro pop; operación de pila: salir de la pila

int 10H; )

int 21H; Interrupción No. 21H (llamada a función)

Además de estas instrucciones, también puede ver:

suponer

>

desplazamiento; Buscar desplazamiento

ORG; Ubicación de la dirección

byte ptr; p>En un programa fuente completo en ensamblador generalmente incluyen los dos tipos de contenido anteriores, que son instrucciones y pseudooperaciones en ensamblador.

Son componentes esenciales del programa fuente. Hay muchos detalles en el uso de estas instrucciones y pseudooperaciones de ensamblaje, que deben dominarse paso a paso mediante ejemplos de programas específicos.

;Entorno operativo: MS-DOS o modo MS-DOS de Windows98

;Condiciones de hardware: VGA o un adaptador de pantalla más nuevo instalado

;Esto está en formato de archivo de comandos (COM) Estructura del programa ,

segmento stackseg pila

stackseg termina

segmento codeseg

suponga ss: codeseg

suponga cs: codeseg

ORG 100H

Entrada: mov ah, 0fH; obtiene el modo de visualización actual

int 10

mov byte ptr cs: vMode, al

mov byte ptr cs: vPage, b

mov ah, 00

mov al, 03

int 10H; Establecer el modo de visualización: 3

mov ah, 05

mov al, 00

int 10H ; Establecer la página de visualización actual: 0

mov ah, 06H

mov ch, 00

mov cl, 00

mov dh, 24

mov dl, 79

p>

mov bh, 63

mov al, 00

int 10H; operación de limpieza de pantalla (usada para especificar el color)

mov ah, 06H

mov ch, 10

mov cl, 20

mov dh, 15

mov dl, 50

mov bh, 00

mov al, 00

int 10H; borra el área de pantalla especificada (para especificar el color) mov ah, 06H

mov ch , 09

mov cl, 22

mov dh, 14

mov dl, 52

mov bh, 79

mov al, 00

int 10H; borra el área de pantalla especificada (para especificar el color)

mov ah, 02

mov dh, 11

mov dl, 30

mov bh, 00

int 10H; posición del cursor: 11, 30

mov ah, 09< / p>

mov dx, offset cs: string1

push cs

pop ds

int 21H; muestra una cadena de caracteres

mov ah, 02

mov dh, 13

mov dl, 30

mov bh, 00

int 10H; coloque el cursor: 13, 30

mov ah, 09

mov dx, offset cs: string2

int 21H; muestra una cadena de caracteres

mov ah, 02

mov dh, 25

mov dl, 00

<

p> mov bh, 00

int 10H; posicionar el cursor: 25, 00 (es decir, ocultar el cursor)

mov ah, 00

int 16H; espere la entrada del teclado

mov ah, 00

mov al, byte ptr cs: vMode

int 10H;

mov ah, 05

mov al, byte ptr cs: vPage

int 10H; restaurar la página mostrada actualmente

mov ah, 02

mov dh, 24

mov dl, 00

mov bh, 00

int 10H; restaurar cursor: 24, 00

mov ah, 06H

mov ch, 00

mov cl, 00

mov dh, 24

mov dl , 79

mov bh, 07

mov al, 00

int 10H; borrar pantalla mov ax, 4c00H

int 21H; finalice el programa y regrese al mensaje de MS-DOS

String1 db '¿Puedes verlo?$'

String2 db 'Cualquier tecla para salir$'

vMode db ?

vPage db ?

codeseg termina

entrada final ------------------- -------- ------------------------------------------ -------- ----------