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