Contactos

Comandos del ensamblador. Información básica sobre el lenguaje del ensamblador. Por disciplina "Programa de programación del sistema en el lenguaje del ensamblador

Universidad Nacional de Uzbekistán nombrada después de Mirzo Ulugbek

Facultad de la tecnología informática.

Sobre el tema: Análisis semántico del archivo EXE.

Realizado:

Tashkent 2003.

Prefacio.

Idioma del ensamblador y estructura del equipo.

Estructura exe -file (análisis semántico).

La estructura del archivo COM.

El principio de acción y propagación del virus.

Desmontaje.

Programas.

Prefacio

La profesión del programador es increíble y única. Hoy en día, la ciencia y la vida no pueden presentarse sin la tecnología más nueva. Todo lo que está asociado con la actividad humana no lo hace sin tecnología de computación. Y esto contribuye a su alto desarrollo y perfección. Deje que el desarrollo de computadoras personales comience hace tanto tiempo, pero durante este tiempo hubo pasos colosales en los productos de software y durante mucho tiempo estos productos serán ampliamente utilizados. El área asociada con el conocimiento de las computadoras ha sufrido una explosión, así como la tecnología correspondiente. Si no toma una fiesta comercial en consideración, entonces podemos decir que no hay actividades profesionales en esta área de actividad profesional. Muchos están desarrollando programas no por el bien de los beneficios o las ganancias, pero según su propia voluntad, por pasión. Por supuesto, esto no debería afectar la calidad del programa, y \u200b\u200ben este asunto, por lo tanto, hablar "negocio", existe una competencia y demanda de la calidad de ejecución, en el trabajo estable y cumple con todos los requisitos de la modernidad. Aquí también vale la pena señalar la apariencia de los microprocesadores en los años 60, que vinieron a reemplazar la gran cantidad de lámparas. Hay algunas variedades de microprocesadores que son muy diferentes entre sí. Estos microprocesadores son diferentes entre sí de la descarga y los equipos de sistema incorporados. Los más comunes, tales como: Intel, IBM, Celeron, AMD, etc. Todos estos procesadores están relacionados con la arquitectura desarrollada de los procesadores Intel. La propagación de los microcomputadores fue la razón para revisar la actitud hacia el lenguaje del ensamblador por dos razones principales. Primero, los programas escritos en el lenguaje del ensamblaje requieren un tiempo de recuerdo y ejecución significativamente menos. En segundo lugar, el conocimiento del lenguaje del ensamblador y el código de máquina resultante brinda una comprensión de la arquitectura de la máquina, que es poco probable que se proporcione al trabajar en un lenguaje de alto nivel. Aunque la mayoría de los especialistas en software se están desarrollando en idiomas de alto nivel, como Pascal, C o Delphi, lo que es más fácil al escribir programas, el software más potente y eficiente está completamente escrito o parcialmente escrito en el lenguaje del ensamblador. Los idiomas de alto nivel fueron diseñados para evitar características técnicas especiales de computadoras específicas. Y el lenguaje del ensamblador, a su vez, está diseñado para específicos específicos de procesadores. En consecuencia, para escribir un programa en el lenguaje del ensamblaje para una computadora en particular, debe conocer su arquitectura. En la actualidad, el tipo de software principal es el archivo EXE. Dados los aspectos positivos de esto, el autor del programa puede confiar en su integridad. Pero a menudo a veces no es así. También hay un desmontaje. Con la ayuda de un desasmador, puede aprender interrupciones y códigos de programas. Una persona que desmontada en el ensamblador no será difícil rehacer el programa completo a su gusto. Tal vez, por ahí el problema más no resuelto, el virus. ¿Por qué la gente escribe un virus? Algunos hacen esta pregunta con sorpresa, algunas con las personas conojadas, pero sin embargo, las personas continúan existiendo, que están interesadas en esta tarea, no desde el punto de vista de causar cierto daño, sino como interés para la programación sistémica. Recoge la escritura por varias razones. Uno como los desafíos del sistema, otros mejoran su conocimiento en el ensamblador. Intentaré salir todo esto en el trabajo de mi curso. También dijo que no solo acerca de la estructura del archivo EXE, sino también sobre el lenguaje del ensamblador.

^ Idioma del ensamblador.

Es interesante rastrear, a partir del momento de la aparición de las primeras computadoras y finalizar con el día de hoy, para la transformación de las ideas sobre el lenguaje del ensamblador de los programadores.

Una vez que el ensamblador fue lengua, sin conocimiento de lo que era imposible hacer una computadora para hacer algo útil. Gradualmente, la situación cambió. Apareció más medios para comunicarse con una computadora. Pero, a diferencia de otros idiomas, el ensamblador no murió, por lo que no podía hacerlo en principio. ¿Por qué? En busca de la respuesta, trataremos de entender qué tipo de lenguaje del ensamblador es en general.

Si es brevemente, el lenguaje del ensamblador es una presentación simbólica del lenguaje de la máquina. Todos los procesos en la máquina al nivel más bajo y de hardware son impulsados \u200b\u200búnicamente por los comandos (instrucciones) del lenguaje de la máquina. Está claro que, a pesar del nombre general, el lenguaje del ensamblador para cada tipo de computadora. Esto se aplica a la aparición de programas escritos en el ensamblador, e ideas, la reflexión de la cual es este idioma.

Para resolver verdaderamente los problemas asociados con el equipo (o incluso, además, dependiendo del equipo, como, por ejemplo, mejorando la velocidad del programa), es imposible sin el conocimiento del ensamblador.

Un programador o cualquier otro usuario puede usar cualquier herramienta de alto nivel, hasta los programas para construir mundos virtuales y, quizás, ni siquiera sospeche que la computadora realmente no realice los comandos de idioma en los que se escribe su programa y su presentación transformada En forma de secuencias de comunicación aburridas y tristes de un lenguaje completamente diferente: la máquina. Y ahora imaginaremos que un usuario de este tipo tiene un problema no estándar o simplemente no sostenía algo. Por ejemplo, su programa debe trabajar con algún dispositivo inusual o realizar otras acciones que requieren conocimiento de los principios de los equipos informáticos. No importa cuán inteligente sea un programador, sin importar la buena lengua en la que escribió su maravilloso programa, sin conocer el ensamblador, no pudo hacerlo. Y no es casual que casi todos los compiladores de idiomas de alto nivel contienen los medios de comunicación de sus módulos con módulos en el ensamblador o admiten el acceso al nivel de programación del ensamblador.

Por supuesto, la época de la computadora universal ya ha pasado. Como dicen, es imposible discutir lo inmenso. Pero hay algo en común, un tipo de fundamento en el que se está construyendo cualquier educación informática grave. Este conocimiento de los principios de la computadora, su arquitectura y el lenguaje del ensamblador como reflexión y encarnación de estos conocimientos.

Una computadora típica moderna (basada en I486 o Pentium) consiste en los siguientes componentes (Fig. 1).

Higo. 1. Computadora y dispositivos periféricos.

Higo. 2. Esquema estructural de una computadora personal.

De la figura (Fig. 1) se puede ver que la computadora está formada por varios dispositivos físicos, cada uno de los cuales está conectado a un bloque llamado el sistema. Si discute lógicamente, está claro que desempeña el papel de un determinado dispositivo de coordinación. Veamos dentro de la unidad del sistema (no necesita intentar penetrar dentro del monitor: no hay nada interesante, además de que es peligroso): abra la caja y vea algunas tablas, bloques, conectando cables. Para entender su propósito funcional, veamos el esquema estructural de una computadora típica (Fig. 2). No afirma la precisión incondicional y está destinada a mostrar el propósito, la relación y la composición típica de los elementos de la computadora personal moderna.

Vamos a discutir el esquema en la FIG. 2 en varios estilo no convencional.
Es típico, reunirse con algo nuevo, busque algunas asociaciones que puedan ayudarlo a saber lo desconocido. ¿Qué asociaciones es una computadora? Por ejemplo, tengo, la computadora a menudo se asocia con la persona misma. ¿Por qué?

Hombre creando una computadora en algún lugar en las profundidades de sí misma pensó que él crearía algo como él. La computadora tiene la percepción de la información del mundo exterior: es un teclado, un mouse, dispositivos de almacenamiento en discos magnéticos. En la Fig. 2 Estos órganos se encuentran a la derecha de los neumáticos del sistema. La computadora tiene los órganos "digestivos", la información recibida es un procesador central y RAM. Y, finalmente, la computadora tiene órganos de habla que destacan los resultados del procesamiento. Estos son también algunos de los dispositivos a la derecha.

Computadoras modernas, por supuesto, lejos de una persona. Pueden compararse con las criaturas que interactúan con el mundo exterior a nivel de un conjunto grande, pero limitado de reflejos incondicionales.
Este conjunto de reflejos forma un sistema de comandos de máquinas. En cualquier alto nivel, no se comunique con la computadora, en última instancia, todo se reduce a la secuencia aburrida y monótona de los comandos de la máquina.
Cada equipo de máquina es un tipo de irritante para excitar uno u otro reflejo incondicional. La reacción a este estímulo es siempre inequívoca y "cosida" en el bloque de microcomáticos en forma de firmware. Este firmware implementa acciones para implementar el comando de la máquina, pero ya en el nivel de señal enviado a ciertos circuitos lógicos de la computadora, conduciendo así varios subsistemas informáticos. Este es el llamado principio de gestión de firmware.

Continuando con la analogía con una persona, notamos: Para que la computadora coma correctamente, se inventan muchos sistemas operativos, compiladores de cientos de lenguajes de programación, etc. Pero todos ellos son, de hecho, solo un plato, en qué comida (Programas) se entrega por reglas definitivas del estómago (computadora). Solo el estómago de la computadora ama la alimentación dietética y monótona, le da información estructurada, en forma de secuencias estrictamente organizadas de ceros y unidades cuyas combinaciones y conforman el lenguaje de la máquina.

Así, externamente, siendo un políglota, la computadora entiende solo un idioma: el idioma de los comandos de la máquina. Por supuesto, para comunicarse y trabajar con una computadora, no es necesario conocer este idioma, pero casi cualquier programador profesional tarde o temprano enfrenta la necesidad de estudiar. Afortunadamente, el programador no necesita intentar comprender el valor de varias combinaciones de números binarios, ya que en los años 50, los programadores comenzaron a utilizar el análogo simbólico del lenguaje de la máquina para la programación, que se llamaba el lenguaje del ensamblador. Este idioma refleja con precisión todas las características del lenguaje del motor. Es por eso que, en contraste con los idiomas de alto nivel, el lenguaje del ensamblador para cada tipo de computadora es suyo.

De todo lo anterior, podemos concluir que, dado que el lenguaje del ensamblador para la computadora "nativo", entonces el programa más efectivo solo se puede escribir en él (siempre que escriba un programador calificado). Hay una pequeña "pero": es muy laboriosa, que requiere mucha atención y experiencia práctica en el proceso. Por lo tanto, de hecho, el ensamblador está escrito en el programa principal que debe garantizar un trabajo eficiente con el hardware. A veces, el ensamblador está escrito por el tiempo de ejecución o memoria de gasto. Posteriormente, se elaboran en forma de subrutinas y se combinan con el código en el lenguaje de alto nivel.

Para estudiar el lenguaje del ensamblador de cualquier computadora tenga sentido comenzar solo después de descubrir qué parte de la computadora se deja visible y accesible para programar en este idioma. Este es el llamado modelo de software de computadora, parte del cual es un modelo de software de microprocesador que contiene 32 registros de una forma u otra disponible para su uso por el programador.

Estos registros se pueden dividir en dos grupos grandes:

^ 16 registros de usuarios;

16 Registros del sistema.

En los programas en el lenguaje del ensamblador, los registros se utilizan muy intensamente. La mayoría de los registros tienen un propósito funcional definitivo.

A medida que sigue el nombre, se llaman los registros de usuarios porque el programador puede usarlos al escribir sus programas. Estos registros incluyen (Fig. 3):

Ocho registros de 32 bits que pueden ser utilizados por programadores para almacenar datos y direcciones (también se llaman registros de propósito general (RON)):

seis registros de segmentos: CS, DS, SS, ES, FS, GS;

registros de estado y gestión:

Registro de banderas de Eflags / banderas;

Registro de puntero de puntero EIP / IP.

Higo. 3. Registros de usuarios de microprocesadores I486 y Pentium.

¿Por qué muchos de estos registros se muestran con una característica de separación inclinada? No, estos no son registros diferentes son partes de un registro grande de 32 bits. Se pueden utilizar en el programa como objetos individuales. Esto se hace para garantizar el rendimiento de los programas escritos para los modelos más jóvenes de 16 bits de microprocesadores Intel, comenzando con I8086. Los microprocesadores I486 y Pentium tienen principalmente registros de 32 bits. Su número, con la excepción de los registros de segmentos, los mismos que en I8086, pero la dimensión es más grande, que se refleja en sus designaciones, tienen
prefijo E (extendido).

^ Registros generales
Todos los registros de este grupo le permiten contactar a nuestras partes "más jóvenes" (ver Fig. 3). Teniendo en cuenta este dibujo, observe que es posible usar para autonedora solo las partes menores de 16 y 8 bits de estos registros. Los 16 bits anteriores de estos registros como objetos independientes no están disponibles. Esto se hace como señalamos anteriormente, para la compatibilidad con los modelos más jóvenes de 16 bits de microprocesadores Intel.

Enumeramos los registros pertenecientes al Grupo de Registros de Propósito General. Dado que estos registros están ubicados físicamente en un microprocesador dentro de un dispositivo aritmético y lógico (ALLU), también se les llama Registros por Allu:

eAX / AX / AH / AL (Registro de Acumulador) - Batería.
Se utiliza para almacenar datos intermedios. En algunos equipos, se requiere el uso de este registro;

eBX / BX / BH / BL (registro base) - Registro Básico.
Se utiliza para almacenar la dirección básica de algún objeto en la memoria;

eCX / CX / CH / CL (Conteo Register) es un medidor de registro.
Se utiliza en los comandos que producen algunas acciones repetibles. Su uso a menudo es implícitamente y oculto en el algoritmo del equipo relevante.
Por ejemplo, la organización del ciclo de bucle, además de transmitir la administración del comando, ubicada en alguna dirección, analiza y reduce el valor del registro ECX / CX;

eDX / DX / DH / DL (Registro de datos) - Registro de datos.
Al igual que el registro EAX / AX / AH / AL, almacena datos intermedios. En algunos equipos, su uso es obligatorio; Para algunos comandos, esto es implícitamente.

Los siguientes dos registros se utilizan para respaldar las llamadas operaciones de la cadena, es decir, las operaciones que producen el procesamiento secuencial de cadenas de los elementos, cada uno de los cuales puede tener una longitud de 32, 16 u 8 bits:

eSI / SI (Registro de índice de origen) - Índice de origen.
Este registro en las operaciones de la cadena contiene la dirección actual del elemento en la cadena de origen;

eDI / DI (Registro de índice de destino) - Índice del receptor (destinatario).
Este registro en las operaciones de la cadena contiene la dirección actual en la cadena del receptor.

En la arquitectura del microprocesador, dicha estructura de datos se admite en el nivel de software y hardware como la pila. Para trabajar con una pila en el sistema de comandos de microprocesador, hay comandos especiales, y en el modelo de software de microprocesador hay registros especiales:

eSP / SP (Registro de puntero de la pila) - Registro de puntero de la pila.
Contiene el vértice de pila en el segmento de pila actual.

eBP / BP (registro de puntero base) - Registro de puntero de la base del marco de la pila.
Diseñado para organizar el acceso arbitrario a los datos dentro de la pila.

La pila se llama el área del programa para el almacenamiento temporal de datos arbitrarios. Por supuesto, los datos también se pueden guardar en el segmento de datos, pero en este caso es necesario iniciar una celda de memoria con nombre separada durante este tiempo, lo que aumenta el tamaño del programa y el número de nombres utilizados. La conveniencia de la pila es que su área se usa repetidamente y ahorrándolos desde allí utilizando comandos eficientes de empuje y pop sin especificar ningún nombre.
La pila se usa tradicionalmente, por ejemplo, para guardar los contenidos de los registros utilizados por el programa, antes de llamar a la subrutina, que, a su vez, utilizará los registros del procesador "para sus propósitos personales". El contenido inicial de los registros se proyecta desde la pila después de regresar de la subrutina. Otra recepción común es la transferencia del subprograma de los parámetros requeridos por ella a través de la pila. La subrutina, sabiendo, en qué orden se coloca en la pila de parámetros, puede elegirlos desde allí y usarlo cuando lo realice. Una característica distintiva de la pila es el orden peculiar de la muestra de los datos contenidos en ella: solo el elemento superior está disponible en la pila en cualquier momento, es decir, El elemento cargado en la pila del último. La descarga desde la pila del elemento superior hace que el siguiente elemento esté disponible. Los elementos de la pila están ubicados en el área de memoria asignados debajo de la pila, a partir de la parte inferior de la pila (es decir, desde su dirección máxima) en las direcciones disminuyendo constantemente. La dirección del elemento superior, disponible se almacena en el registro indicador de pila SP. Al igual que cualquier otra área de la memoria del programa, la pila debe ingresar algún segmento o formar un segmento separado. En cualquier caso, la dirección del segmento de este segmento se coloca en el registro de segmentos de pila SS. Por lo tanto, un par de registros SS: SP Describa la dirección de una célula de pila asequible: la dirección del segmento de la pila se almacena en SS, y en SP: el desplazamiento de este último almacenado en la pila de esto (Fig. 4, A ). Tenga en cuenta que en el estado inicial, el puntero de la pila SP indica una celda debajo de la parte inferior de la pila y no se incluye en ella.

Figura 4. Organización de pila: A - Estado inicial, B - Después de cargar un elemento (en este ejemplo, el contenido del Registro AH), IN - después de cargar el segundo elemento (el contenido del registro DS), G, después de la descarga Un elemento, D - después de descargar dos elementos y volver a su estado original.

Cargar la pila se realiza mediante un comando especial de trabajar con pila PULS (PUSH). Este comando primero reduce los contenidos del puntero de la pila a 2, y luego coloca el operando en la dirección en SP. Si, por ejemplo, queremos guardar temporalmente los contenidos del registro AH en la pila, debe ejecutar el comando

La pila va al estado que se muestra en la FIG. 1.10, b. Se puede ver que el puntero de la pila se desplaza a dos bytes hacia arriba (hacia las direcciones más pequeñas) y esta dirección registra el comando de empuje del operando. Siguiente comando de descarga en la pila, por ejemplo,

será la pila en el estado mostrada en la FIG. 1.10, c. La pila ahora almacenará dos elementos, y solo la parte superior será asequible, lo que indica el puntero de la pila SP. Si, después de algún tiempo, necesitábamos restaurar los contenidos originales guardados en la pila de registros, debemos ejecutar comandos de descarga de la pila POP (Push Out):

pop Ds.
hacha pop.

¿De qué tamaño debe ser la pila? Depende de la intensiva que se utilice en el programa. Si, por ejemplo, está previsto almacenar una matriz de 10,000 bytes en la pila, entonces la pila no debe ser inferior a este tamaño. Al mismo tiempo, debe tenerse en cuenta que, en algunos casos, la pila es utilizada automáticamente por el sistema, en particular, al ejecutar el comando INT 21H Interrupción. Según este comando, el procesador primero coloca la dirección de retorno en la pila, y luego DOS envía el mismo contenidos de registro y otra información relacionada con el programa interrumpido. Por lo tanto, incluso si el programa no usa la pila en absoluto, aún debería estar presente en el programa y no tener menos de varias decenas de palabras. En nuestro primer ejemplo, tomamos bajo la pila de 128 palabras, lo cual es definitivamente suficiente.

^ Estructura del programa en el ensamblador

El programa del ensamblador es un conjunto de bloques de memoria llamados segmentos de memoria. El programa puede consistir en uno o más segmentos de bloques de este tipo. Cada segmento contiene un conjunto de sugerencias de idioma, cada una de las cuales ocupa una línea separada del código del programa.

Las ofertas del ensamblador son cuatro tipos:

comandos o instrucciones que son análogos simbólicos de los comandos de la máquina. En el proceso de transmisión, las instrucciones del ensamblador se transforman en los comandos correspondientes del sistema de comandos del microprocesador;

macrocomands: la propuesta definitiva de las propuestas de texto del programa que se reemplazan durante la transmisión por otras propuestas;

directivas que son una indicación de un traductor de ensamblador para realizar ciertas acciones. Las directivas no tienen análogos en la representación de la máquina;

filas de comentarios que contienen cualquier carácter, incluidas las letras del alfabeto ruso. Los comentarios son ignorados por el traductor.

^ Sintaxis del ensamblador

Las propuestas que conforman el programa pueden ser un diseño sintáctico, un equipo correspondiente, macrokomand, directiva o un comentario. Para que el traductor del ensamblador los reconozca, deben estar formados por ciertas reglas sintácticas. Para hacer esto, es mejor usar una descripción formal de la sintaxis del idioma como las reglas de la gramática. Las formas más comunes de tal descripción del lenguaje de programación son gráficos sintácticos y formas extendidas de Bakusa Naur. Para uso práctico, los diagramas sintácticos son más convenientes. Por ejemplo, la sintaxis de sugerencias de ensamblador se puede describir utilizando diagramas sintácticos que se muestran en las siguientes figuras.

Higo. 5. Formato de oferta del ensamblador

Higo. 6. Directiva de formato

Higo. 7. Formato de comando y macros

En estos dibujos:

el nombre de la etiqueta es el identificador, cuyo valor es la dirección del primer byte de la propuesta del texto de origen del programa, que denota;

el nombre es un identificador que distingue esta directiva de otras directivas del mismo nombre. Como resultado del ensamblador de procesamiento, se puede asignar una directiva específica a ciertas características;

el Código de Operación (CPC) y la Directiva son las denominaciones mnemónicas del equipo de máquinas relevantes, las macros o las directivas de traductores;

operands: partes del equipo, comandantes macro o directivas de ensamblador que denotan objetos sobre los cuales se realizan acciones. Los operandos del ensamblador se describen mediante expresiones con constantes numéricos y de texto, marcas e identificadores de variables utilizando operaciones y algunas palabras reservadas.

^ ¿Cómo utilizar los gráficos sintácticos? Es muy simple: para esto, solo necesita encontrar y luego pasar por el camino desde el inicio de sesión de la tabla (izquierda) a su salida (derecha). Si existe este camino, la oferta o diseño es sintácticamente correcta. Si no hay tal camino, significa que el compilador no aceptará este diseño. Cuando se trabaja con las gráficas sintácticas, prestamos atención a la dirección del bypass, indicado por las flechas, ya que entre los caminos puede haber aquellos para los que puede ir a la derecha a la derecha. En esencia, las gráficas sintácticas reflejan la lógica del traductor cuando se aíslan las propuestas de entrada del programa.

Símbolos permisibles al escribir textos de texto son:

Todas las letras latinas: A-Z, A-Z. En este caso, las letras mayúsculas y minúsculas se consideran equivalentes;

Números de 0 a 9;

¿Señales?, @, $, _, &;

Divisores ,. ()< > { } + / * % ! " " ? \ = # ^.

Las sugerencias del ensamblador se forman a partir del Lexema, que son secuencias sintácticamente inseparables de símbolos permisibles del lenguaje que tienen sentido para el traductor.

Lexes son:

identificadores: secuencias de caracteres permisibles utilizados para referirse a tales objetos de objetos, tales como códigos de operación, nombres de variables y nombre de etiqueta. La regla de grabación del identificador es la siguiente: el identificador puede consistir en uno o más caracteres. Como caracteres, puede usar las letras del alfabeto latino, los números y algunas señales especiales: _,?, $, @. El identificador no puede iniciar el símbolo del dígito. La longitud del identificador puede ser de hasta 255 caracteres, aunque el traductor percibe solo los primeros 32, y el resto ignora. Puede ajustar la longitud de los posibles identificadores utilizando la opción de solicitud de sistema MV. Además, existe la oportunidad de especificar el traductor para distinguir entre las letras mayúsculas y minúsculas o ignoró su diferencia (que se realiza de forma predeterminada).

^ Comandos de ensamblador.

Los comandos del ensamblador revelan la capacidad de transferir sus requisitos a la computadora, el mecanismo de gestión en el programa (ciclos y transiciones) para comparaciones lógicas y organización de software. Sin embargo, las tareas programables rara vez son tan fáciles. La mayoría de los programas contienen una serie de ciclos en los que se repiten varios comandos hasta que se realicen cierto requisito para lograr, y se deben realizar diversos controles que determinan cuál de las varias acciones se debe realizar. Algunos comandos pueden transmitir el control cambiando la secuencia normal de pasos Modifique directamente el valor de offset en el puntero de comandos. Como se mencionó anteriormente, hay varios equipos para varios procesadores, consideraremos una serie de algunos comandos para los procesadores 80186, 80286 y 80386.

Para describir el estado de las banderas después de realizar algún equipo, usaremos la muestra de la tabla que refleja la estructura de la bandera de EFLAGS:

En la línea de fondo de esta tabla, los valores de las banderas se administran después de ejecutar el comando. Al mismo tiempo, se utiliza la siguiente notación:

1 - Después de ejecutar el comando, la bandera está configurada (igual a 1);

0 - Después de ejecutar el comando, la bandera se restablece (igual a 0);

r - El valor de la bandera depende del resultado del trabajo del equipo;

Después de ejecutar el comando, la bandera no está definida;

espacio - Después de ejecutar el comando, la bandera no cambia;

Para representar operandos en diagramas sintácticos, se utiliza la siguiente notación:

r8, R16, R32 - Operando en uno de los registros de tamaño byte, palabra o doble palabra;

m8, M16, M32, M48 - Operando en tamaño de bytes de memoria, palabra, palabra doble o 48 bits;

i8, I16, I32 - Tamaño de bytes de operandos directos, palabra o palabra doble;

a8, A16, A32 - Dirección relativa (offset) en el segmento de código.

EQUIPOS (orden alfabético):

* Estos comandos se describen en detalle.

Agregar.
(Adición)

Adición

^ Diagrama del equipo:

añadir el receptor, fuente

Propósito: Adición de dos operandos fuente y byte receptor, palabra o doble palabra.

Algoritmo de trabajo:

doblar la fuente de los operandos y el receptor;

registrar el resultado de agregar al receptor;

instalar banderas.

Estado de la bandera después de ejecutar el comando:

Solicitud:
El comando Agregar se usa para agregar dos operandos de enteros. El resultado de la adición se coloca a la dirección del primer operando. Si el resultado de la adición está sobre la frontera del receptor del operando (desbordamiento), considere esta situación al analizar la bandera del CF y la posterior aplicación posible del comando ADC. Por ejemplo, laica los valores en el registro AX y el área de memoria CH. Al agregar, debe considerar la posibilidad de desbordamiento.

Registrar más registro o memoria:

| 000000DW | MODREGR / RM |

Registrarse AX (AL) Plus Valor directo:

| 0000010W | --data-- | Datos, si w \u003d 1 |

Registro o Memoria Plus Valor directo:

| 100000sw | mod000r / m | --data-- | Datos, si BW \u003d 01 |

Llamada
(Llamada)

Procedimiento de llamada o tarea

^ Diagrama del equipo:

Propósito:

transferencia del control de un procedimiento cercano o a largo plazo con memorización en la pila de direcciones de punto de retorno;

tareas de conmutación.

Algoritmo de trabajo:
determinado por el tipo de operando:

Etiqueta Messenger: los contenidos del puntero de comandos EIP / IP se ingresan en la pila y el nuevo valor de dirección se carga en el mismo registro, la dirección correspondiente a la etiqueta;

Etiqueta de la etiqueta: los contenidos del puntero de comandos EIP / IP y CS se ingresan en la pila. Luego, los mismos registros están cargados con nuevos valores de direcciones correspondientes a la etiqueta larga;

R16, 32 o M16, 32: determine el registro o la celda de memoria que contiene compensaciones en el segmento de comando actual donde se transmite el control. Al controlar el control, se ingresa los contenidos del puntero de comandos EIP / IP;

Puntero de memoria: define una celda de memoria que contiene un puntero de 4 o 6 bytes al procedimiento llamado. La estructura de tal puntero 2 + 2 o 2 + 4 bytes. La interpretación de dicho puntero depende del modo de funcionamiento del microprocesador:

^ Statla de la bandera después de ejecutar el comando (excepto la tarea de conmutación):

la ejecución del equipo no afecta a las banderas.

Cuando cambia la tarea, los valores de la bandera se cambian de acuerdo con la información del registro de EFLAGS en el segmento de estado de TSS de la tarea a la que cambia.
Solicitud:
El comando de llamada le permite organizar un control flexible y multivariado a la subrutina mientras se guarda la dirección del punto de retorno.

Acerca de D (cuatro formatos):

Dirección directa en el segmento:

| 11101000 | DISP-MAY | DIEP-ALTO |

Dirección indirecta en el segmento:

| 11111111 | MOD010R / M |

Dirección indirecta entre los segmentos:

| 11111111 | MOD011R / M |

Dirección directa entre los segmentos:

| 10011010 | offset-low | offset-high | seg-low | seg-altura |

Cmp
(Comparar operandos)

Comparación de operandos

^ Diagrama del equipo:

cMP OPERAND1, OPERAND2

Propósito: Comparación de dos operandos.

Algoritmo de trabajo:

realizar la resta (Operand1 Operand2);

dependiendo del resultado, instale banderas, operand1 y operand2 para no cambiar (es decir, el resultado no se memoriza).

Solicitud:
Este comando se usa para comparar los dos operandos restando, mientras que los operandos no cambian. Según los resultados del comando, las banderas están instaladas. El comando CMP se aplica a los comandos de transición condicional y el comando de instalación de BYTE mediante el valor SETCC.

Acerca de K O D (Tres formatos):

Registrarse o registrar la memoria:

| 001110DW | MODREGR / M |

Valor directo con registro AX (AL):

| 0011110W | --data-- | Datos, si w \u003d 1 |

Valor directo con registro o memoria:

| 100000sw | mod111r / m | --data-- | Datos, si SW \u003d 0 |

DIC
(Disminución del operando por 1)

Reduciendo el operando por unidad.

^ Diagrama del equipo:

operando de diciembre

PROPÓSITO: Reducir el valor del operando en la memoria o registrarse por 1.

Algoritmo de trabajo:
el comando deduce 1 del operando. Estado de la bandera después de ejecutar el comando:

Solicitud:
El comando DE DEC se usa para reducir el valor de los bytes, las palabras, las palabras dobles en la memoria o el registro por unidad. Al mismo tiempo, observe que el comando no afecta la bandera del CF.

Registrarse: | 01001reg |

^ Registro o Memoria: | 1111111W | MOD001R / M |

Div
(Divida sin firmar)

Decisión insaltable

Diagrama del equipo:

diviver divisora

Propósito: realizar el funcionamiento de dividir dos valores no firmados binarios.

^ Algoritmo de trabajo:
Para el comando, es necesario especificar dos operandos, división y divisor. El dividendo se define implícitamente y su tamaño depende del tamaño del divisor, que se especifica en el comando:

si un divisor en los bytes, entonces el dividendo debe estar ubicado en el Registro Axe. Después de la operación, el privado se coloca en AL y el residuo en ah;

si el divisor es el tamaño de la palabra, entonces el dividendo debe estar ubicado en el par de registros DX: AX, y la parte más joven del dividendo está en AX. Después de la operación, el privado se coloca en el hacha, y el residuo en DX;

si un divisor de doble palabra, el divisible debe estar ubicado en el par de registros EDX: EAX, y la parte más joven de la división está en EAX. Después de la operación, el privado se coloca en EAX, y el residuo está en EDX.

^ Statla de la bandera después de ejecutar el comando:

Solicitud:
El equipo realiza una división entera de operandos con la emisión del resultado de dividir en forma de un privado y residuo de la división. Al realizar una operación de división, puede ocurrir una situación excepcional: 0 - Error de división. Esta situación ocurre en uno de los dos casos: el divisor es 0 o privado demasiado grande para su ubicación en el registro EAX / AX / AL.

Oh k acerca de D:

| 1111011w | MOD110R / M |

En t.
INTERRUMPIR)

Llamar al subprograma de servicio de interrupción

^ Diagrama del equipo:

iNT NUMERO_NAME

Propósito: Llamar a una subrutina de servicio de interrupción con un número de interrupción especificado por el comando operando.

^ Algoritmo de trabajo:

escriba en las banderas de Eflags / Flags y la dirección de retorno. Al recuperar la dirección de retorno, los contenidos del registro de segmentos CS se registran por primera vez, luego los contenidos del puntero de comandos EIP / IP;

restablecer si y tf en banderas cero;

transferir el control al programa de procesamiento de interrupciones con el número especificado. El mecanismo de control depende del modo de funcionamiento del microprocesador.

^ Statla de la bandera después de ejecutar el comando:

Solicitud:
Como se puede ver en la sintaxis, hay dos formas de este comando:

iNT 3: tiene su propio código individual de la operación de 0cch y toma un byte. Esta circunstancia lo hace muy conveniente para su uso en varios depuradores de software para instalar puntos de interrupción reemplazando el primer byte de cualquier comando. El microprocesador, encontrado en el comando de secuencia de comandos con el código de operación de 0cch, provoca un programa de procesamiento de interrupciones con un vector número 3, que sirve para comunicarse con el depurador del programa.

La segunda forma del comando ocupa dos bytes, tiene un código de operación 0CDH y le permite iniciar una llamada de la rutina de procesamiento de interrupciones con un número de vector en el rango de 0-255. Las características de la gestión de la gerencia, como se señalan, dependen del modo de operación del microprocesador.

Sobre los (dos formatos):

Registrarse: | 01000reg |

^ Registro o memoria: | 1111111W | MOD000R / M |

JCC.
JCXZ / JECXZ.
(Saltar si la condición)

(Salte si cx \u003d cero / salte si ECX \u003d cero)

Transición si se cumple una condición

Transición si CX / ECX es cero

^ Diagrama del equipo:

etiqueta jcc
etiqueta JCXZ
etiqueta jecxz

Propósito: la transición dentro del segmento de comando actual dependiendo de alguna condición.

^ Algoritmo de comandos (excepto JCXZ / JECXZ):
Comprobación del estado de las banderas dependiendo del código de la operación (refleja la condición verificable):

si la condición de prueba es verdaderamente cierta, continúe con la celda designada por el operando;

si la condición válida es falsa, entonces transfiera el siguiente comando.

JCXZ / JECXZ Equipo de trabajo Algoritmo:
Verifique las condiciones de igualdad cero los contenidos del registro ECX / CX:

si la condición verificable

Tema 1.4 Ensambler Mnemonic. Estructura y formatos de comandos. Tipos de direccionamiento. Sistema de equipo de microprocesador

Plan:

1 lenguaje del ensamblador. Conceptos básicos

2 Símbolos de los símbolos del lenguaje del ensamblador.

3 tipos de operadores de ensambladores

4 directivas de ensamblador

5 Sistema de Comando Procesador

1 J.ensamblador zyk. Conceptos básicos

Lenguaje del ensamblador - Esta es una presentación simbólica del lenguaje de la máquina. Todos los procesos en la máquina al nivel más bajo y de hardware son impulsados \u200b\u200búnicamente por los comandos (instrucciones) del lenguaje de la máquina. Está claro que, a pesar del nombre general, el lenguaje del ensamblador para cada tipo de computadora.

El programa del ensamblador es una combinación de bloques de memoria, llamados segmentos de memoria.El programa puede consistir en uno o más segmentos de bloques de este tipo. Cada segmento contiene un conjunto de sugerencias de idioma, cada una de las cuales ocupa una línea separada del código del programa.

Las ofertas del ensamblador son cuatro tipos:

1) comandos o instrucciones, Presentando análogos simbólicos de los comandos de la máquina. En el proceso de transmisión, las instrucciones del ensamblador se transforman en los comandos correspondientes del sistema de comandos del microprocesador;

2) macrocomands -decorada de cierta manera de las propuestas de texto del programa, reemplazadas durante la transmisión por otras propuestas;

3) directivasuna indicación del traductor del ensamblador para realizar ciertas acciones. Las directivas no tienen análogos en la representación de la máquina;

4) filas de comentario que contiene cualquier carácter, incluidas las letras del alfabeto ruso. Los comentarios son ignorados por el traductor.

­ Estructura del programa en el ensamblador. Sintaxis del ensamblador.

Las propuestas que conforman el programa pueden ser un diseño sintáctico, un equipo correspondiente, macrokomand, directiva o un comentario. Para que el traductor del ensamblador los reconozca, deben estar formados por ciertas reglas sintácticas. Para hacer esto, es mejor usar una descripción formal de la sintaxis del idioma como las reglas de la gramática. Las formas más comunes de tal descripción del lenguaje de programación. - Gráficos sintácticos y formas extendidas de Naur de Bakusa. Para uso práctico más conveniente. gráficos sintácticos.Por ejemplo, la sintaxis de sugerencias de ensamblador se puede describir utilizando diagramas sintácticos que se muestran en las siguientes Figuras 10, 11, 12.

Figura 10 - Formato de oferta del ensamblador


­ Figura 11 - Directivas de formato

­ Figura 12 - Formato de equipo y macros.

En estos dibujos:

­ etiquetas de nombres - el identificador, cuyo valor es la dirección del primer byte de esa propuesta del texto de origen del programa, que denota;

­ nombre - El identificador que distingue la presente Directiva de otras directivas de los mismos nombres. Como resultado del ensamblador de procesamiento, se puede asignar una directiva específica a ciertas características;

­ código de Operación (CPA) y Directiva - Estas son las designaciones mnemónicas del equipo de máquinas relevantes, las macros o las directivas del traductor;

­ operandos - Partes del equipo, Macro Comandantes o Directivas de ensamblador que denotan objetos sobre los cuales se realizan acciones. Los operandos del ensamblador se describen mediante expresiones con constantes numéricos y de texto, marcas e identificadores de variables utilizando operaciones y algunas palabras reservadas.

Los diagramas sintácticos ayudan encuentre y luego pase por el camino desde el inicio de sesión de la tabla (izquierda) a su salida (derecha). Si existe este camino, la propuesta o el diseño es sintácticamente correcta. Si no hay tal camino, significa que el compilador no aceptará este diseño.

­ 2 símbolos de lenguaje del ensamblador

Símbolos permisibles al escribir textos de texto son:

1) todas las letras latinas: ARIZONA., ARIZONA.. En este caso, las letras mayúsculas y minúsculas se consideran equivalentes;

2) números de 0 antes de 9 ;

3) signos ? , @ , $ , _ , & ;

4) divisores , . () < > { } + / * % ! " " ? = # ^ .

Las ofertas de ensamblos están formadas a partir de lexemaRepresentando las secuencias sintácticamente inseparables de los símbolos permisibles del lenguaje que tienen sentido para el traductor.

Lexemes están:

1) identificadores - Secuencias de caracteres permisibles utilizados para designar objetos de objetos, como códigos de operación, nombres de variables y nombre de etiqueta. La regla de grabación del identificador es la siguiente: el identificador puede consistir en uno o más caracteres;

2) cadenas de símbolos - secuencias de símbolos encerrados en comillas simples o dobles;

3) BULWA entera de uno de los siguientes sistemas de recargo : binario, decimal, hexadecimal. La identificación de números al registrarlos en los programas del ensamblador se realiza de acuerdo con ciertas reglas:

4) Los números decimales no requieren caracteres adicionales para identificar caracteres adicionales, por ejemplo, 25 o 139. Para identificar en el texto de origen del programa numeros binarios Es necesario después de grabar ceros y unidades incluidas en su composición, ponga latín " b.", Por ejemplo 10010101 b..

5) los números hexadecimales tienen más convenciones en su registro:

Primero, consisten en números. 0...9 , minúsculas y letras mayúsculas del alfabeto latino. uNA., B., c., D., MI., F. o UNA., B., C., D., MI., F..

En segundo lugar, el traductor puede tener dificultades con el reconocimiento de los números hexadecimales debido al hecho de que pueden consistir en algunos números 0 ... 9 (por ejemplo, 190845), así que comienza con la letra del alfabeto latino (por ejemplo, eF15). Para "explicar" el traductor que este lexema no es un número o un identificador decimal, el programador debe asignar especialmente un número hexadecimal. Para hacer esto, al final de la secuencia de números hexadecimales, que conforman un número hexadecimal, escribe la letra latina " h.". Este es un requisito previo. Si el número hexadecimal comienza con la letra, el cero líder se registra ante él: 0 eF15 h.

Casi todas las propuestas contienen una descripción del objeto sobre el cual o con el que se realiza cierta acción. Estos objetos se llaman operanda. Pueden ser identificados así: operandos. Estos son objetos (algunos valores, registros o células de memoria) a las que operan instrucciones o directivas, o estos objetos que definen o especifican el funcionamiento de las instrucciones o las directivas.

Es posible realizar la siguiente clasificación de los operandos:

­ operandos constantes o directos;

­ operandos de dirección;

­ operandos transferidos;

medidor de dirección;

­ registrarse operando;

­ operandos básicos e índice;

­ operandos estructurales;

Entradas.

Los operandos son componentes elementales a partir de los cuales se forma parte del comando de la máquina, denotando objetos sobre los cuales se realiza la operación. En un caso más general, los operandos pueden incluir como parte de la educación más compleja, llamada expresiones.

Expresiones hay combinaciones de operandos y operadores considerados en su conjunto. El resultado del cálculo de la expresión puede ser la dirección de una cifra de memoria determinada o algún valor constante (absoluto).

­ 3 tipos de operadores de ensambladores

Listamos los tipos posibles. operadores de ensambladores y reglas sintácticas para la formación de expresiones de ensamblador:

­ operadores aritméticos;

­ operadores de turnos;

­ operadores de comparación;

­ operadores logicos;

­ operador de índice;

­ tipo de operador de redefinición;

­ redefinición del operador del segmento;

­ nombramiento de operador tipo de estructura;

­ operador de obtención del componente del segmento de la dirección de la expresión;

­ operador para obtener un desplazamiento de expresión.

1 Directivas del ensamblador

­ Las directivas del ensamblador son:

1) Directivas de segmentación. Durante la discusión anterior, encontramos todas las reglas básicas para registrar equipos y operandos en el programa del ensamblador. La pregunta siguió siendo la cuestión de cómo crear una secuencia de comandos correctamente, de modo que el traductor pueda procesarlos, y el microprocesador es ejecutar.

Al considerar la arquitectura del microprocesador, aprendimos que tiene seis registros de segmentos, a través de los cuales puede funcionar simultáneamente:

­ con un segmento de código;

­ con un segmento de pila;

­ con un segmento de datos;

­ con tres segmentos de datos adicionales.

Un segmento físico es un área de memoria, ocupada por comandos y (o) datos, cuyas direcciones se calculan en relación con el valor en el registro correspondiente del segmento. La descripción sintáctica del segmento en el ensamblador es un diseño que se muestra en la Figura 13:


­ Figura 13 - Sintaxis Descripción del segmento en el ensamblador

Es importante tener en cuenta que el propósito funcional del segmento es algo más ancho que la simple rotura del programa en bloques de código, datos y pila. La segmentación es parte de un mecanismo más general asociado con concepto de programación modular. Implica la unificación del diseño de los módulos de objetos creados por el compilador, incluso de diferentes lenguajes de programación. Esto le permite combinar programas escritos en diferentes idiomas. Se destina a la implementación de diversas opciones para dicha asociación y operandos en la Directiva del segmento.

2) Listado de directivas de gestión. Las directivas de administración de la lista se dividen en los siguientes grupos:

­ directivas de gestión de listado general;

­ directivas de salida en la lista de archivos incluidos;

­ directivas de bloqueo de montaje condicional;

­ directivas de salida en el listado de Macrocomand;

­ información de listado sobre la lista de referencias cruzadas;

­ listado de directivas de cambio de formato.

2 Sistema de comandos del procesador

El sistema de comandos del procesador se presenta en la Figura 14.

Considere los principales grupos de equipos.

­ Figura 14 - Clasificación de los comandos del ensamblador

Los equipos son:

1 Comandos de transferencia de datos. Estos comandos ocupan un lugar muy importante en el sistema de los comandos de cualquier procesador. Realizan las siguientes funciones principales:

­ ahorrar en memoria del contenido de los registros de procesadores internos;

­ copiar contenido de un área de memoria a otra;

­ escribiendo a dispositivos de E / S y lea de dispositivos de E / S.

En algunos procesadores, todas estas funciones son realizadas por un solo equipo.Mov. (para envíos de bytes -Movb. ) pero con varios métodos para abordar los operandos.

En otros procesadores, además del equipo.Mov. Hay varios comandos más para realizar funciones enumeradas. Además, los comandos de transferencia de datos incluyen comandos de intercambio de información (su designación se basa en una palabraIntercambio ). Puede haber un intercambio de información entre los registros internos, entre dos medias de un registro (Intercambio ) o entre el registro y la celda de memoria.

2 equipos aritméticos. Los equipos aritméticos consideran los códigos de operandos como códigos binarios numéricos o binarios decimales. Estos comandos se pueden dividir en cinco grupos principales:

­ semicolonos fijos (adición, resta, multiplicación, división);

­ seméjuelos flotantes (adición, resta, multiplicación, división);

­ comandos de limpieza;

­ comandos de incremento y decremento;

­ comparar comando.

3 Los comandos de operación de semicolones fijos funcionan con códigos en registros de procesadores o en la memoria como códigos binarios convencionales. Comunicaciones de operaciones de comunión flotante (punto) Utilice el formato de representación de números con Orden y Mantissa (generalmente estos números ocupan dos celdas de memoria consecutivas). En los potentes procesadores modernos, un conjunto de semiconos semiconos flotantes no se limita a cuatro aritmos, y contiene muchos otros comandos más complejos, por ejemplo, el cálculo de las funciones trigonométricas, las funciones logarítmicas, así como las funciones complejas necesarias al procesar sonido e imágenes.

4 Los comandos de limpieza están diseñados para escribir un código cero en un registro o una celda de memoria. Estos comandos pueden reemplazarse por comandos de envío de código cero, pero los comandos de limpieza especiales suelen ser más rápidos que los comandos de envío.

5 equipos de incremento (aumento por unidad) y decremento

(Reducir por unidad) también son muy cómodos. En principio, pueden estar en principio para reemplazar los comandos de suma con una unidad o resta de una unidad, pero el incremento y la disminución son más rápidos que la suma y la resta. Estos comandos requieren un operando de entrada, que es tanto el operando de salida.

6 El comando de comparación está diseñado para comparar dos operandos de entrada. En esencia, calcula la diferencia de estos dos operandos, pero el operando de salida no se forma, sino que solo cambia los bits en el registro del estado del procesador de acuerdo con el resultado de esta resta. El siguiente comando al comando de comparación (generalmente este es un comando de transición) analizará los bits en el registro de estado del procesador y realizará acciones dependiendo de sus valores. Algunos procesadores proporcionan comandos de comparación de la cadena de dos secuencias de operandos en la memoria.

7 comandos lógicos. Los comandos lógicos se realizan en las operaciones lógicas de operandas (bitwise), es decir, consideran que los códigos de operandos no son como un solo número, sino como un conjunto de bits individuales. Difieren de los equipos aritméticos. Los comandos lógicos realizan las siguientes operaciones básicas:

­ lógico y lógico o, adición del módulo 2 (excluyendo o);

­ cambios lógicos, aritméticos y cíclicos;

­ revisar bits y operandos;

­ instalación y limpieza de bits (banderas) de un registro de estado de procesador (PSW).

Los comandos de la operación lógica le permiten calcular bridly las funciones de lógica básicas de dos operandos de entrada. Además, la operación y se utiliza para la limpieza forzada de los bits especificados (como uno de los operandos, se usa el código de máscara, en el que las descargas que requieren la limpieza se establecen en cero). Operación o aplicada a la instalación forzada de bits especificados (como uno de los operandos, se usa el código de máscara en el que las descargas que requieren la instalación por unidad son iguales a una). Operación "ExcelleGing o" se usa para invertir los bits especificados (como uno de los operandos, se usa el código de máscara, en el que los bits que están sujetos a inversiones se establecen por unidad). Los comandos requieren dos operandos de entrada y forme un operando de salida.

8 Los comandos de turnos le permiten combinar el código del operando a la derecha (hacia las descargas más jóvenes) o hacia la izquierda (en la dirección de las descargas superiores). El tipo de cambio (lógico, aritmético o cíclico) determina que será el nuevo valor de la broca más antigua (cuando el cambio a la derecha) o el bit más joven (durante el turno a la izquierda), y también determina si el valor más antiguo de El bit más antiguo (cuando el cambio hacia la izquierda) se guarda en algún lugar o un bit más joven (cuando se cambia a la derecha). Los turnos cíclicos le permiten mover los bits del código del operando en un círculo (en el sentido de las agujas del reloj cuando el turno es correcto o hacia la izquierda, cuando salga el turno). Al mismo tiempo, el anillo de cambios puede ingresar o no ingresar al indicador de transferencia. En la broca de la bandera de transmisión (si se usa), el valor del bit más viejo se registra durante el cambio cíclico a la izquierda y el bit más joven durante el cambio cíclico a la derecha. Por consiguiente, el valor de la broca de la bandera de transferencia corresponderá a la descarga más baja durante el cambio cíclico a la izquierda y en la descarga superior durante el cambio cíclico hacia la derecha.

9 comandos de transiciones. Los equipos de Comblaus están diseñados para organizar todo tipo de ciclos, ramas, llamadas a las subrutinas, etc., es decir, violan el progreso de la serie. Estos comandos se registran en el comando Registre un nuevo significado y, por lo tanto, llame a la transición del procesador, no al siguiente comando, sino a cualquier otro comando en la memoria de los programas. Algunos comandos de las transiciones proporcionan más regreso al punto desde el cual se realizó la transición, otros no proporcionan esto. Si se proporciona el reembolso, entonces los parámetros de procesador actuales se almacenan en la pila. Si no se proporciona el reembolso, entonces los parámetros de procesador actuales no se guardan.

Comparar comandos sin reembolso se dividen en dos grupos:

­ transiciones incondicionales;

­ equipos de cruce comunes.

En las designaciones de estos comandos se usan palabras.Rama (ramificación) y saltar (saltar).

Los comandos de transiciones incondicionales causan la transición a una nueva dirección, independientemente de cualquier cosa. Pueden llamar a la transición al valor de desplazamiento especificado (hacia adelante o hacia atrás) o a la dirección de memoria especificada. El valor de desplazamiento o el nuevo valor de dirección se indica como un operando de entrada.

Comandos de transición condicionales Causa La transición no siempre es, sino solo cuando realiza las condiciones especificadas. Como tales condiciones, los valores de bandera en el registro del Estado del procesador generalmente están actuando.PSW. ). Es decir, la condición de transición es el resultado de la operación anterior que cambia los valores de las banderas. Las condiciones totales de transición pueden ser de 4 a 16. Varios ejemplos de equipos de transición condicionales:

­ transición, si cero;

­ transición, si no cero;

­ transición si hay un desbordamiento;

­ transición si no hay desbordamiento;

­ transición si es más cero;

­ transición, si es menor o igual a cero.

Si se ejecuta la condición de transición, se descarga en el nuevo Registro de comandos de valor. Si no se ejecuta la condición de transición, el medidor de comandos simplemente está aumentando, y el procesador selecciona y realiza el siguiente comando en orden.

Especialmente para verificar las condiciones de transición, se aplica el comando de comparación (SMR) que precede al comando de transición condicional (o incluso varios equipos de transición convencionales). Pero las banderas se pueden instalar y cualquier otro comando, como un comando de transferencia de datos, cualquier comando aritmético o lógico. Cabe señalar que los comandos de transición de la bandera a sí mismos no cambian de que hace posible colocar varios comandos de transición uno tras otro.

Un lugar especial entre los equipos de transición está ocupado por comandos de interrupción. Estos comandos como operando de entrada requieren un número de interrupción (dirección vectorial).

Producción:

El lenguaje del ensamblador es una presentación simbólica del lenguaje de la máquina. Idioma del ensamblador para cada tipo de computadora. El programa del ensamblador es un conjunto de bloques de memoria llamados segmentos de memoria. Cada segmento contiene un conjunto de sugerencias de idioma, cada una de las cuales ocupa una línea separada del código del programa. Las sugerencias del ensamblador son cuatro tipos: equipos o instrucciones, macros, directivas, líneas de comentarios.

Todas las letras latinas están permitidas al escribir el texto de los programas: ARIZONA., ARIZONA.. En este caso, las letras mayúsculas y minúsculas se consideran equivalentes; Figuras ot 0 antes de 9 ; señales ? , @ , $ , _ , & ; divisores , . () < > { } + / * % ! " " ? = # ^ .

Se utilizan los siguientes tipos de operadores de ensambladores y reglas sintácticas para la formación de expresiones de ensamblador. Operadores aritméticos, declaraciones de cambio, operadores de comparación, operadores lógicos, operador de índice, operador de redefinición tipo, operador de redefinición de segmento, operador de nombres de tipo de estructura, operador de obtención de un componente de segmento de una dirección de expresión, un operador de desplazamiento de expresión.

El sistema de comando se divide en 8 grupos principales.

­ Preguntas de control:

1 ¿Qué es un lenguaje de ensamblador?

2 ¿Qué caracteres se pueden usar para grabar comandos en el ensamblador?

3 ¿Cuáles son las etiquetas y su cita?

4 Calcule la estructura de los comandos del ensamblador.

5 Lista 4 tipos de sugerencias de ensamblos.

Estructuras en el lenguaje del ensamblador.

Consideramos sobre las matrices anteriores son una combinación del mismo tipo de elementos. Pero a menudo en las aplicaciones existe la necesidad de considerar algún conjunto de datos de tipo diferente como un tipo único.

Esto es muy relevante, por ejemplo, para los programas de base de datos, donde es necesario unir un conjunto de datos de un tipo diferente con un objeto.

Por ejemplo, anteriormente revisamos la listado 4, en el que se realizó el trabajo con una matriz de elementos de tres colas. Cada elemento, a su vez, fue dos elementos de diferentes tipos: un campo de contador de un solo byte y un campo de doble lateral, que podría llevar alguna otra información necesaria para el almacenamiento y el procesamiento. Si el lector está familiarizado con uno de los idiomas de alto nivel, entonces sabe que un objeto de este tipo generalmente se describe usando un tipo de datos especial. estructuras.

Para aumentar la facilidad de uso del lenguaje del ensamblador, también introdujo este tipo de datos.

Priorato estructura - Este es un tipo de datos que consiste en un número fijo de elementos de diferentes tipos.

Para usar estructuras en el programa, debe realizar tres acciones:

    Colocar estructura de plantillas .

    En significado, esto significa la definición de un nuevo tipo de datos, que se puede usar para determinar las variables de este tipo.

    Determinar instancia de la estructura .

    Esta etapa implica la inicialización de una variable específica antes de una estructura de estructura (usando una plantilla).

    Organizar apelar a los elementos de la estructura. .

Es muy importante que entiendas desde el principio, ¿cuál es la diferencia entre descripción Estructuras en el programa y su definición.

Describir La estructura en el programa significa solo especificar su esquema o patrón; La memoria no se destaca.

Este patrón se puede considerar solo como información para el traductor sobre la ubicación de los campos y su valor predeterminado.

Determinar La estructura significa especificar el traductor para resaltar la memoria y asignar un nombre simbólico a esta área.

Puede describir la estructura en el programa solo una vez, y determinar, cualquier número de veces.

Descripción de la estructura de la plantilla

Descripción de la plantilla de la estructura tiene la siguiente sintaxis:

struc._name

termina Nombre de la estructura

Aquí Representa la secuencia de directivas de descripción de datos. dB, DW, DD, DQ y dt..

Sus operandos determinan el tamaño de los campos y, si es necesario, los valores iniciales. Estos valores serán inicializados por los campos correspondientes al determinar la estructura.

Como ya hemos señalado al describir la plantilla, la memoria no se asigna, ya que es solo la información para el traductor.

Localización La plantilla en el programa puede ser permisada, pero luego de la lógica de la operación del traductor de una sola pasada, debe colocarse antes de la ubicación donde se determine la variable con el tipo de esta estructura. Es decir, cuando se describe en el segmento de datos de una variable con un tipo de estructura, su plantilla debe colocarse al comienzo del segmento de datos o delante de ella.

Considere el trabajo con estructuras en el ejemplo de modelar la base de datos en los empleados de algún departamento.

Para la simplicidad, para alejarse de los problemas de la transformación de la información al ingresar, estamos de acuerdo en que todos los campos son simbólicos.

Definimos la estructura de la grabación de esta base de datos con la siguiente plantilla:

Definición de datos con tipo de estructura.

Para usar la estructura descrita con una plantilla en el programa, es necesario determinar la variable con el tipo de esta estructura. Esto utiliza el siguiente diseño de sintaxis:

Nombre de la estructura [Nombre de la variable]

    nombre de la variable - Identificador de la variable de este tipo estructural.

    La tarea del nombre de la variable es opcional. Si no lo especifica, el área de memoria en la cantidad de las longitudes de todos los elementos de la estructura se asignará simplemente.

    lista de valores - Una lista de valores iniciales de los elementos de la estructura separados por comas encerrados en soportes angulares.

    Su tarea también es opcional.

    Si la lista no está en la lista en su totalidad, entonces todos los campos de la estructura para esta variable se inician por los valores de la plantilla, si se especifican.

    Se permite inicializar los campos individuales, pero en este caso los campos perdidos deben estar separados por comas. Los campos perdidos se inicializarán con los valores de la plantilla de la estructura. Si, al determinar una nueva variable con el tipo de esta estructura, estamos de acuerdo con todos los valores de los campos en su plantilla (es decir, el conjunto predeterminado), entonces solo necesita escribir corchetes.

    Por ejemplo: trabajador de Victor..

Por ejemplo, definimos varias variables con el tipo descrito anteriormente.

Métodos de trabajo con estructura.

La idea de introducir un tipo estructural a cualquier lenguaje de programación consiste en combinar diferentes variables de tipo en un objeto.

En el idioma, debe haber un medio para acceder a estas variables dentro de una instancia específica de la estructura. Para referirse al equipo en el campo de alguna estructura, se utiliza un operador especial. símbolo ". " (punto). Se utiliza en el siguiente diseño sintáctico:

    direccion_morce- identificador de una variable de algún tipo estructural o expresión entre paréntesis de acuerdo con las reglas sintácticas especificadas a continuación (FIG. 1);

    nOMBRE PLA_TRAVE - El nombre del campo de la plantilla de la estructura.

    Esto, de hecho, también aborda, o más bien, el desplazamiento del campo desde el principio de la estructura.

Así, el operador " . "(punto) calcula la expresión

Higo. cinco. La sintaxis de la expresión de dirección en el operador que maneja la estructura de la estructura.

Demostraremos el ejemplo de la estructura que definimos. obrero. Algunas técnicas de trabajo con estructuras.

Por ejemplo, eliminar en hACHA. Los valores del campo con la edad. Desde que es poco probable que la edad de una persona acólida sea más de 99 años, luego, después de colocar los contenidos de este campo simbólico en el registro hACHA. Será conveniente convertir a una representación binaria por parte del equipo. aad..

Tenga cuidado porque debido al principio de almacenamiento de datos "Byte junior para la dirección más joven" El número mayor de edad se colocará en alabama, y el más joven - en ah..

Para ajustarlo es suficiente para usar el comando. xchg al, ah:

mOV AX, WORD PTR SOTR1.AGE; EN AL AGE SOTR1

y usted puede y así:

El trabajo adicional con la matriz de estructuras se realiza de la misma manera que con una matriz unidimensional. Hay algunas preguntas aquí:

¿Qué estar con el tamaño y cómo organizar la indexación de los elementos de la matriz?

Similar a otros identificadores definidos en el programa, el traductor asigna el nombre del tipo de estructura y el nombre de la variable con el tipo de estructura de atributos de tipo. El valor de este atributo es el tamaño en bytes involucrados en los campos de esta estructura. Puede eliminar este valor utilizando el operador tipo.

Una vez que se conoce el tamaño de la estructura de la estructura, la indexación en la matriz de estructuras no representa una complejidad especial.

Por ejemplo:

¿Cómo copiar el campo de una estructura al campo correspondiente de otra estructura? ¿O cómo realizar copiando toda la estructura? Realicemos una copia de campo nam Tercer empleado en el campo nam Quinto empleado:

mas_sotr trabajador 10 dup ()

mov bx, offset mas_sotr

mOV SI, (Tipo Obrero) * 2; SI \u003d 77 * 2

mOV DI, (Tipo de Trabajador) * 4; SI \u003d 77 * 4

Me parece que la artesanía del programador, tarde o temprano, hace que una persona se vea como una buena ama de casa. Él, como ella, está constantemente en busca, dónde guardar algo, cortar y hacer un almuerzo maravilloso desde un mínimo de productos. Y si tiene éxito, entonces la satisfacción moral no es menor que eso, y tal vez más que desde el maravilloso almuerzo en el ama de casa. El grado de esta satisfacción, me parece depende del grado de amor por su profesión.

Por otro lado, el éxito en el desarrollo de los relajantes de software y hardware se relaja algo relajado, y se observa a menudo una situación similar a un proverbio conocido sobre la mosca y un elefante, para resolver una pequeña tarea, los medios de peso pesado están involucrados, la La efectividad del cual, en el caso general, es importante solo la implementación de proyectos relativamente grandes.

La presencia en el lenguaje de los siguientes dos tipos de datos se debe, probablemente, el deseo de la "anfitriona", de manera eficiente, utilice el área de trabajo de la tabla (RAM) durante la preparación de alimentos o para colocar productos (datos del programa) .

Equipos del ensamblador (conferencia)

Conferencias de plan

1. Grupos básicos de operaciones.

Pentium.

1. Grupos básicos de operaciones.

Los microprocesadores realizan un conjunto de equipos que se identifican como particiones del grupo de alarmas:

Operaciones,

Operadores aritméticos

Operaciones lógicas

Operationswig

Operatía,

Operaciones de bits

Operaciones del programa;

Operaciones del procesador.

2. Módulos de comando del procesador Pentium.

Al describir los comandos, sus designaciones mnemónicas (mnokodes) se usan comúnmente, que sirven para tarea el comando cuando se programan en el lenguaje del ensamblador. Para varias versiones del ensamblador, algunos comandos pueden diferir. Por ejemplo, para el comando de llamada de la subrutina usa MnemokodeLlamada o JSR. ("Salta a Subrutina"). Sin embargo, los metros de la mayoría de los equipos para los tipos básicos de microprocesadores coinciden o difieren ligeramente, ya que son abreviaturas de las respectivas palabras en inglés que determinan la operación realizada. Considere los desajustes de los comandos adoptados para los procesadores.Pentium.

Comandos de envío. El mando principal de este grupo es el equipo.Mov. Lo que proporciona la transferencia de datos entre dos registros o entre el registro y la celda de la memoria. En algunos microprocesadores, el envío se implementa entre dos celdas de memoria, así como el envío de grupo de los contenidos de varios registros de memoria. Por ejemplo, microprocesadores de la familia 68.xXX Company Motorola. Realizar un comandoMoverse. Proporcionar el reenvío de una celda de memoria a otra y el comandoModem. que se registra en la memoria o descargue desde la memoria de contenido del conjunto especificado de registros (hasta 16 registros). EquipoXchg. Compartiendo mutuamente los contenidos de dos procesadores o registros de registros y células de memoria.

Entrada de equipos EN. y salida Fuera. Implementar la transferencia de datos del registro del procesador al dispositivo externo o recibir datos del dispositivo externo al registro. En estos comandos, el número de dispositivo de interfaz (Puerto de E / S) se establece a través de qué datos se transmiten. Tenga en cuenta que muchos microprocesadores no tienen comandos especiales para apelar a dispositivos externos. En este caso, la entrada y salida de datos en el sistema se realiza utilizando el comandoMov. que establece la dirección del dispositivo de interfaz deseado. Por lo tanto, el dispositivo externo se aborda como una celda de memoria, y en el espacio de direcciones se encuentra una partición determinada en la que se encuentran las direcciones de los dispositivos de la interfaz conectados al sistema (puertos).

Comandos de operaciones aritméticas. El principal de este grupo son equipos de adición, resta, multiplicación y división, que son inteligentes. Equipos de adición Agregar. y la resta Sub. realizar las operaciones apropiadas conc.oBSESIONADAS DOS REGISTRADORES, REGISTRARSE Y CELAS DE MEMORIA O UTILIZAN UN OPERANO DE DIRECCIÓN. Equipos ANUNCIO C. , Sb. B. Hacer suma y resta, teniendo en cuenta el valor de la característicaC.Instalado en la formación de transferencia durante la ejecución de la operación anterior. Al utilizar estos comandos, se está implementando la adición secuencial de operandos, el número de descargas excede la descarga del procesador. Equipo Neg. Cambia la señal del operando, traduciéndolo en un código adicional.

Las operaciones de multiplicación y división se pueden realizar por encima de los números con un signo (equiposI. Mul I. Div ) o una instancia (comandos Mul ). La IdeEnergiaDodevexEvegistra, el segundo puede estar en el registro, la celda de la memoria o la operando directa. El resultado de la operación se encuentra en el registro. Al multiplicar (comandosMul. , Inmovilístico ) Resulta el resultado de un doble bit, para la colocación de los cuales se utilizan dos registros. Al dividir (equiposDiv , Idiv ) El operando de descarga de doble tiempo se usa como una división, colocada en dos registros, y como resultado, se registra un privado y residuo en dos registros.

Comandos de operaciones lógicas . Casi todos los microprocesadores producen operaciones lógicas, o eliminando o, que se realizan en los mismos nombres de los operandos que utilizan comandos Y, o, X. O. . Las operaciones se realizan en el contenido de dos registros, registro y celdas de memoria o utilizando el operando inmediato. Equipo No. Invierte el valor de cada descarga de operandos.

Equipos de turno. Los microprocesadores se llevan a cabo cambios aritméticos, lógicos y cíclicos de operandos abordados a uno o más dígitos. El cambio de operando puede estar en el registro o la celda de memoria, y el número de descargas de cambio se establece utilizando un operando directo contenido en el comando, o está determinado por el contenido de un registro específico. En la implementación del turno, generalmente participa un signo de transferencia.C. En el registro estatal (Sr.o Eflags.), donde hay una última descarga del operando, extendida desde el registro o la celda de memoria.

Comparar y probar equipos . La comparación de operandos se realiza generalmente utilizando el comando.Cmp que realiza la resta de operandos con la configuración de los signos N, z, v, c En el Registro del Estado de acuerdo con el resultado obtenido. En este caso, el resultado de la resta no se guarda, y los valores de los operandos no cambian. El análisis posterior de los valores obtenidos de los signos le permite determinar el valor relativo (\u003e,<, =) операндов со знаком или без знака. Использование различных способов адресации позволяет производит сравнение содержимого двух регистров, регистра и ячейки памяти, непосредственно заданного операнда с содержимым регистра или ячейки памяти.

Algunos microprocesadores realizan comandos de prueba Tst que es una versión con una sola mano del comando de comparación. Al realizar estos signos manuales de comando N, z. De acuerdo con el signo y significado (igual o no igual a cero) del operando direccionable.

Comandos de operaciones de bits . Estos comandos producen la configuración del valor del carácter.C. En el Registro de Estado de acuerdo con el valor del bit probado.bn. en el operando direccionable. En algunos microprocesadores, según la prueba del bit, se realiza una configuración de atributo.Z.. El número de la broca probadanORTE. Establezca los contenidos especificados en el comando de registro o el operando directo.

Los comandos de este grupo están implementando diferentes opciones para la amendedibilidad. Bt. Guarda el valor de este poco sin cambios. Comando B. T. S. postal establece el valor bn.\u003d 1, y el equipo B. T. C. - Valor bn.\u003d 0.y B. T. C. invierte el valor BN BN después de probarlo.

Operaciones de gestión de programas. Para administrar el programa, se utilizan una gran cantidad de comandos, entre los que puede asignar:

- comandos de control incondicional;

- equipos convencionales de transición;

- comandos de ciclos del programa;

- comandos de interrupción;

- los comandos cambian de signos.

El control incondicional es hecho por un equipo.JMP que descargas al mostrador del programaORDENADOR PERSONAL. Nuevo contenido, que es la dirección del siguiente comando que se está ejecutando. Esta dirección está indicada directamente en el comandoJMP (direccionamiento directo), o calculado como la suma del contenido actualORDENADOR PERSONAL. Y preguntó en el equipo de bias, que es un número con un signo (dirección relativa). ComoORDENADOR PERSONAL. Contiene la dirección del siguiente comando del programa, el último método especifica la dirección de transición, desplazada en relación con la siguiente dirección a un número específico de bytes. Con un desplazamiento positivo, se realiza una transición a los comandos del programa posteriores, con un desplazamiento negativo, a la anterior.

Llamar a la subrutina también se realiza mediante administración incondicional utilizando el comandoLlamada (o JSR. ). Sin embargo, en este caso, antes de cargar enORDENADOR PERSONAL. Los nuevos contenidos que especifican la dirección del primer comando de comando, debe guardar su valor actual (dirección del siguiente comando) para asegurarse de que después de ejecutar la subrutina, se devuelve al programa principal (o a la subrutina anterior cuando se adjunta subrutinas) . Comandos de transición condicionales (sucursales del programa) producen carga enORDENADOR PERSONAL. Los nuevos contenidos, si se realizan ciertas condiciones, que generalmente se establecen de acuerdo con el valor actual de varias características en el registro de estado. Si no se implementa la condición, se está ejecutando el siguiente programa del programa.

Se proporcionan comandos de gestión para escribir: lea el contenido del registro de estado en el que se almacenan los signos, así como el cambio en los valores de las características individuales. Por ejemplo, en los procesadores Pentium, se implementan los comandos. LAHF. y SAHF. que ejecute la carga del byte más joven, donde los letreros están contenidos desde el Registro de Estado Eflag. En el registro de bytes junior EAX y llenando el byte más joven Eflags. del registro E A.X... equipos CLC, STC. Lleve a cabo el ajuste de los signos de la transferencia CF \u003d 0, CF \u003d 1, y el equipo CMC. Causa invirtiendo el valor de esta característica. Dado que los signos definen el progreso de la ejecución del programa cuando las transiciones condicionales, los comandos de cambio de signos se usan comúnmente para administrar el programa.

Comandos del procesador. . Este grupo incluye comandos de desglose, carece de operaciones y una serie de comandos que determinan el modo de funcionamiento del procesador o sus bloques individuales. EquipoHlt deja de ejecutar el programa y transfiere el procesador al estado de parada, la salida desde la cual ocurre cuando llegan las señales de interrupción o reinicio (Reiniciar). Equipo Nop. (Comando "vacío"), que no causa ninguna operación, sirve para implementar retrasos de software o completar permisos formados en el programa.

Equipos especiales Cli, sti Prohibir y permitir el servicio de solicitud de interrupción. En procesadoresPentium. Esto utiliza un bit de control (bandera)Si. En el registro Eflags..

Muchos microprocesadores modernos realizan el comando de identificación que permite al usuario u otros dispositivos obtener información sobre el tipo de procesador utilizado en este sistema. En procesadores Pentuim. Para esto sirve en equipo. Cpuid Al ejecutar de qué se ingresan los datos necesarios sobre el procesador en los registros EAX,Ebx,Ecx,Edx Y luego puede ser leído por el usuario u sistema operativo.

Dependiendo de los modos de operación implementados por el procesador y los tipos especificados de datos, el conjunto de comandos ejecutados puede expandirse significativamente.

Algunos procesadores producen operaciones aritméticas con números binarios decimales o realizan resultados especiales de los comandos de corrección de resultados en el procesamiento de dichos números. Muchos procesadores de alto rendimiento incluyenFPU. - Unidad de procesamiento de númerosc. "Punto flotante."

En varios procesadores modernos, se implementa un procesamiento múltiple de varios enteros o números.c. "Punto flotante" con la ayuda de un principio.SIMD ("Instracción única - Datos múltiples ") -" Un comando es una variedad de datos ". La ejecución simultánea de operaciones sobre múltiples operandos aumenta significativamente el rendimiento del procesador cuando se trabaja con datos de video y audio. Dichas operaciones se utilizan ampliamente para procesar imágenes, señales de sonido y otras aplicaciones. Para realizar estas operaciones, bloques especiales que implementan los conjuntos correspondientes de comandos que se ingresan en procesadores que se encuentran en varios tipos de procesadores (Pentium, Atlón) Nombre recibidoMmx (“ Milti.- Extensión de los medios. ") - Expansión multimedia,Sse ("Streaming Simd Extension") - Streaming SIMD - expansión, “3 D.Extensión - Expansión tridimensional.

Característica característica de los procesadores de la empresa.Intel A partir del modelo 80286, es el control de prioridad al acceder a la memoria, que se proporciona cuando el procesador está en la operación de direcciones virtuales seguras: "Modo protegido. "(Modo protegido). Para implementar este modo, se utilizan grupos de comandos especiales que sirven para organizar la protección de la memoria de acuerdo con el algoritmo prioritario adoptado.

La estructura de comando en el lenguaje del ensamblador. La programación a nivel de los comandos de la máquina es el nivel mínimo en el que es posible la programación de la computadora. El sistema de los comandos de la máquina debe ser suficiente para implementar las acciones requeridas, emitiendo instrucciones de la máquina. Cada comando de la máquina consta de dos partes: un funcionamiento, definiendo "qué hacer" y el operante, que definen los objetos de procesamiento, es decir, algo "sobre qué hacer". El comando de máquina del microprocesador, registrado en el lenguaje del ensamblador, es una línea que tiene el siguiente formulario: el comando de etiqueta / director (s) de operandos; Etiquetado de comentarios, comando / directiva y operando están separados por al menos un símbolo de un espacio o una pestaña. Los operandos del equipo están separados por comas.

Estructura de comando en el lenguaje del ensamblador El comando del ensamblaje indica un traductor, qué acción debe realizar un microprocesador. Las directivas del ensamblador son los parámetros especificados en el texto del programa que afectan el proceso de ensamblaje o las propiedades del archivo de salida. El operando determina el valor inicial de los datos (en el segmento de datos) o los elementos sobre los cuales se realiza el comando (en el segmento de código). El comando puede tener uno o dos operandos, o no tener operandos. El número de operandos está implícitamente establecido por el código de comando. Si el comando o la directiva deben continuar en la siguiente línea, se usa el símbolo "Slash inversa": "". De forma predeterminada, el ensamblador no distingue a la capital y las letras minúsculas para escribir comandos y directivas. Ejemplos de directivas y cuentas de DB 1 comandos; Nombre, Directiva, One MOV EAX, 0 Operand; Equipo, dos operandos

Identificadores: secuencia de caracteres permisibles utilizados para designar nombres variables y nombres de etiquetas. El identificador puede constar de uno o más de los siguientes símbolos: todas las letras del alfabeto latino; números de 0 a 9; Especialista: _, @, $ ,? . Como primer símbolo, la etiqueta se puede utilizar. Los identificadores no pueden usar los nombres de los ensambladores reservados (directivas, operadores, nombres de comandos). El primer carácter del identificador debe ser la letra o especialista. La longitud máxima del identificador de 255 caracteres, pero el traductor percibe los primeros 32, el resto ignora. Todas las etiquetas que se registran en una cadena que no contienen la Directiva del ensamblador deben terminar con el colon ":". La etiqueta, el comando (directiva) y el operando no deben necesariamente comenzar con ninguna posición particular en la cadena. Se recomienda grabarlos en la columna para mayor ydetencividad del programa.

Etiquetas Todas las etiquetas que están escritas en una fila que no contienen la Directiva del ensamblador deben terminar con el colon ":". La etiqueta, el comando (directiva) y el operando no deben necesariamente comenzar con ninguna posición particular en la cadena. Se recomienda grabarlos en la columna para mayor ydetencividad del programa.

Los comentarios que utilizan los comentarios en el programa mejoran su claridad, especialmente cuando la asignación del conjunto de comandos es incomprensible. Los comentarios comienzan en cualquier línea del módulo de origen del símbolo "Punto con una coma" (;). Todos los personajes a la derecha de "; "Al final de la línea, son un comentario. El comentario puede contener cualquier carácter impreso, incluido el "espacio". El comentario puede ocupar toda la cadena o seguir el comando en la misma línea.

Estructura del programa En el lenguaje del ensamblador, el programa escrito en el lenguaje del ensamblador puede consistir en varias partes, llamadas módulos, en cada una de las cuales se pueden definir uno o más segmentos de datos, pila y código. Cualquier programa completado en el lenguaje del ensamblador debe incluir uno principal, o el principal, el módulo desde el cual comienza su ejecución. El módulo puede contener segmentos de software, segmentos de datos y pilas, declaradas utilizando las directivas apropiadas.

Modelos de memoria Antes de declarar segmentos, debe especificar un modelo de memoria utilizando la Directiva. MODIFICAD MODIFIADER MODIFIER_PAMYTI, Acuerdo_O_SOB, TYPE_OS, PARAMETER_STELL Idioma del ensamblador básico Modelo: Memoria Modelo Modelo de direccionamiento Datos de direccionamiento de datos Código de sistema operativo Código de alternancia y datos Cerca de MS-DOS Visible Pequeño cerca de MS-DOS, Windows No Medio cerca de MS-DOS, Windows No Compacto cerca de FAR MS-DOS, Windows No Far Far MS-DOS, Windows No enorme MS-DOS, Windows No cerca de Windows 2000, Windows XP, Windows Permitible Piso cerca de NT,

Modelos de memoria El pequeño modelo funciona solo en aplicaciones MS-DOS de 16 dígitos. En este modelo, todos los datos y el código se encuentran en un segmento físico. El tamaño del archivo del programa en este caso no excede de 64 KB. El modelo pequeño admite un segmento de código y un segmento de datos. Los datos y el código cuando se usan este modelo se abordan como cerca (medio). El modelo medio admite varios segmentos de código de programa y un segmento de datos, mientras que todas las referencias en los segmentos predeterminados del código del programa se consideran largos (lejos), y los enlaces en el segmento de datos están cerca (cerca). El modelo compacto admite varios segmentos de datos que utilizan el direccionamiento de datos de largo alcance (FAR) y un segmento de código con las direcciones vecinas (cerca). El modelo grande admite varios segmentos de código y varios segmentos de datos. De forma predeterminada, todas las referencias al código y los datos se consideran largos (lejos). El enorme modelo es casi equivalente al gran modelo de memoria.

Modelos de memoria El modelo plano asume la no configuración no de configuración del programa y se usa solo en sistemas operativos de 32 dígitos. Este modelo es similar al modelo pequeño en el sentido de que los datos y el código se publican en un segmento, solo 32 dígitos. Para desarrollar un programa para el modelo plano frente a la directiva. Modelo plano debe colocarse una de las directivas :. 386 ,. 486 ,. 586 o. 686. Elegir una Directiva de selección de procesadores define un conjunto de comandos disponibles al escribir programas. Letra P después de la Directiva de selección del procesador significa el modo de operación protegida. El direccionamiento de datos y código es vecino (cerca), mientras que todas las direcciones y punteros son de 32 dígitos.

Modelo de memoria. MODIFICAD MODIFER_PAMYTI, acuerdo_O_OBLI, TYPE_OS, MODIFICADOR DE PARÁTICO PARAMETER_TEC Se utiliza para determinar los tipos de segmentos y puede tomar valores: el uso 16 (los segmentos del modelo seleccionado se utilizan como 16 bits). Uso 32 (los segmentos del modelo seleccionado se utilizan como 32 -bit ). El parámetro de acuerdo_no_name se usa para determinar el método de transmisión de parámetros al llamar a un procedimiento de otros idiomas, incluidos los idiomas de alto nivel (C ++, Pascal). El parámetro puede tomar los siguientes valores: C, Basic, Fortran, Pascal, Syscall, STDCall.

Modelo de memoria. MODIFICADOR MODELO MODIFIER_PAMYTI, acuerdo_O_OBLI, TYPE_OS, parameter_name Parámetro Type_OS es igual a OS_DOS de forma predeterminada, y en este momento este es el único valor compatible de este parámetro. El parámetro ParameTer_set se establece en: NearStack (SS Registro es DS, el área de datos y la pila se colocan en el mismo segmento físico) Farstack (el registro SS no es igual a DS, el área de datos y la pila se colocan en diferentes segmentos físicos). El valor predeterminado es cerca de Moch.

Un ejemplo de programa "nada haciendo". 686 P. Modelo plano, STDCall. Datos. Inicio del código: Ret Fin Start STET - Equipo de microprocesador. Proporciona el final derecho del programa. El resto del programa se refiere a la operación del traductor. . 686 P - Pentium 6 Comandos protegidos (Pentium II) Se permiten comandos. Esta Directiva selecciona un conjunto compatible de comandos de ensamblador, lo que indica el modelo del procesador. . Modelo plano, stdcall - modelo plano de memoria. Este modelo de memoria se utiliza en el sistema operativo Windows. STDCall - Retos de procedimiento usados.

Un ejemplo de programa "nada haciendo". 686 P. Modelo plano, STDCall. Datos. CÓDIGO INICIO: START DET START. Los datos son un segmento del programa que contiene datos. Este programa no usa la pila, por lo que el segmento. Falta la pila. . El código es un segmento de programa que contiene código. El inicio es una etiqueta. El inicio del final es el final del programa y el mensaje al compilador que es necesario comenzar a ejecutar el programa desde la etiqueta de inicio. Cada programa debe contener una directiva final que marca el final del código fuente del programa. Todas las líneas que siguen la directiva final son ignoradas por la etiqueta especificada después de la directiva final, le dice el nombre del módulo principal desde el cual comienza el programa. Si el programa contiene un módulo, la etiqueta después de la directiva final no se puede indicar.

Putas del traductor de lenguaje del ensamblador: un programa o un medio técnico que realiza la transformación del programa presentada en uno de los lenguajes de programación en el programa en el idioma de destino llamado el código de objeto. Además de apoyar el Mnemonic de equipos de máquinas, cada traductor tiene su propio conjunto de directivas y macros, a menudo con nada compatible. Los principales tipos de idiomas del lenguaje del ensamblador: MASM (ensamblador de Microsoft), TASM (ensamblador Borland Turbo), FASM (ensamblador plano) - Ensamblador multiportantizado libremente distribuido, escrito por Tomash Hrystar (Polaco), NASM (ensamblador Netwide) - El ensamblador gratuito para la arquitectura Intel X 86 fue creada por Simon Thatham junto con Julian Hall y actualmente está desarrollando un pequeño equipo de desarrolladores en la fuente. Fragua. NETO.

Src \u003d "https://present5.com/presentation/-29367016_6361097/image-15.jpg" alt \u003d "(! Lang: LiveCast Program en Microsoft Visual Studio 2005 1) Cree un proyecto seleccionando el archivo-\u003e Nuevo Menú\u003e Proyecto y"> Трансляция программы в Microsoft Visual Studio 2005 1) Создать проект, выбрав меню File->New->Project и указав имя проекта (hello. prj) и тип проекта: Win 32 Project. В дополнительных опциях мастера проекта указать “Empty Project”.!}

Src \u003d "https://present5.com/presentation/-29367016_63610977/image-16.jpg" alt \u003d "(! Lang: livecast programa en Microsoft Visual Studio 2005 2) en el árbol de proyecto (Ver-\u003e Explorador de soluciones)"> Трансляция программы в Microsoft Visual Studio 2005 2) В дереве проекта (View->Solution Explorer) добавить файл, в котором будет содержаться текст программы: Source. Files->Add->New. Item.!}

Transmitir el programa en Microsoft Visual Studio 2005 3) Seleccione el tipo de archivo de código C ++, pero especifique el nombre con la extensión. ASM:

Transmisión de un programa en Microsoft Visual Studio 2005 5) Establezca la configuración del compilador. Seleccione en el botón derecho en el borrador del menú de reglas de construcción personalizada ...

Transmisión de un programa en Microsoft Visual Studio 2005 y en el conjunto de Microsoft Microsoft apareció.

Transmisión de un programa en Microsoft Visual Studio 2005 para verificar el botón derecho en el archivo Hello. ASM TREE TREE PROPIEDADES DE MENÚ DE PROYECTOS E INSTALAR GENERAL-\u003e HERRAMIENTA: Microsoft Macro Ensambler.

Src \u003d "https://present5.com/presentation/-29367016_6361097/image-22.jpg" alt \u003d "(! Lang: transmisión de un programa en Microsoft Visual Studio 2005 6) Complete el archivo seleccionando Build-\u003e Build Hello. PRJ."> Трансляция программы в Microsoft Visual Studio 2005 6) Откомпилировать файл, выбрав Build->Build hello. prj. 7) Запустить программу, нажав F 5 или выбрав меню Debug->Start Debugging.!}

Programación en la programación del sistema operativo Windows Las ventanas OC se basan en el uso de las funciones de API (Interfaz del programa de la aplicación, I.E. Interfaz de aplicación de software). Su cantidad llega a 2000. El programa de Windows consiste en gran medida en tales llamadas. Toda la interacción con dispositivos externos y los recursos del sistema operativo se produce, como regla general, a través de dichas funciones. El sistema operativo Windows utiliza un modelo de memoria plana. La dirección de cualquier célula de memoria será determinada por los contenidos de un registro de 32 biblias. Posibles 3 tipos de estructuras de programas para Windows: Diálogo (ventana principal - cuadro de diálogo), consola o estructura desafiada, estructura clásica (ventana, marco).

Llamar a las funciones de API de Windows en el archivo de ayuda. Cualquier función API se presenta como un tipo de tipo de característica (FA 1, F 2, FA 3) Tipo - Tipo de valor de retorno; FAK: una lista de argumentos formales en orden de ellos, por ejemplo, un mensaje INT. Caja (HWND H. WND, LPCTSTR LP. Texto, LPCTSTR LP. TIPO, UINT U. TIPO); Esta función muestra una ventana con un mensaje y un botón (o botones) de la salida. El significado de los parámetros: h. WND es una ventana de ventana en la que aparecerá un mensaje de ventana, LP. Texto - Texto que aparecerá en la ventana, LP. Leyenda - Texto en la ventana Título, U. Tipo: tipo de ventana, en particular, puede definir el número de botones de salida.

Llamar a las funciones de API de Windows Mensaje INT. Caja (HWND H. WND, LPCTSTR LP. Texto, LPCTSTR LP. TIPO, UINT U. TIPO); Casi todos los parámetros de las funciones de API están en realidad en los enteros de 32 -bit: HWND - 32bit entero, LPCTSTR - Puntero de 32 bits a la cadena, uint - 32 -bit entero. Basta con la "A" a menudo se agrega al nombre de las funciones para ir a una versión más reciente de las funciones.

Llamar a las funciones de API de Windows Mensaje INT. Caja (HWND H. WND, LPCTSTR LP. Texto, LPCTSTR LP. TIPO, UINT U. TIPO); Cuando se usa MASM, es necesario al final del nombre para agregar @n n, el número de bytes, que ocupan los argumentos transmitidos en la pila. Para ganar 32 funciones API, este número se puede definir como el número de argumentos N multiplicado por 4 (bytes en cada argumento): n \u003d 4 * n. Para llamar a la función, use el comando Llame Ensambler. En este caso, todos los argumentos de la función se transmiten a través de la pila (comando PUSH). Dirección de la transferencia de argumentos: de izquierda a derecha - abajo hacia arriba. El primero será colocado en la pila del argumento U. Tipo. Llamar a la función especificada se verá así: Mensaje de llamada. Caja. [Correo electrónico protegido]

Llamar a las funciones de API de Windows Mensaje INT. Caja (HWND H. WND, LPCTSTR LP. Texto, LPCTSTR LP. TIPO, UINT U. TIPO); El resultado de la ejecución de cualquier función API es, como regla general, un entero que regresa al registro EAX. La Directiva offset es un "cambio en el segmento", o, traduciendo en el concepto de lenguajes de alto nivel, el "puntero" del comienzo de la fila. La directiva EQUIP es similar a la #DEFINE en el idioma SI define una constante. La Directiva Extern indica al traductor que la función o el identificador es externo con respecto a este módulo.

Ejemplo del programa "¡Hola a todos!" . 686 P. Modelo plano, STDCall. Pila 4096. DATOS MB_OK EQUIR 0 STR 1 DB "MI PRIMER PROGRAMA", 0 STR 2 DB "Hola a todos!", 0 HW DD? Mensaje externo. Caja. [Correo electrónico protegido]: Cerca. Inicio del código: PUSH MB_OK PUSH OFFSET STR 1 PUSH OFFSET STR 2 Push HW Mensaje de llamada. Caja. [Correo electrónico protegido] START DER START

La Directiva de invocaciones, el traductor de lenguaje MASM le permite simplificar la convocatoria de las funciones que utilizan la función de directiva Free-Free: invocar: Función de directiva, parámetro, parámetro, no es necesario agregar @ 16 a la llamada de la función; Los parámetros se registran exactamente en el orden en que se describe la función descrita. Macrificados de traductor Los parámetros se colocan en la pila. Para utilizar la Directiva de invocaciones, debe tener una descripción de la función prototipo utilizando la Directiva Proto en el formulario: Mensaje. Caja. A Proto: DWORD,: DWORD Si el programa usa una variedad de funciones API de Win 32, es recomendable utilizar la inclusión de C: MASM 32InCludeUser 32. Inc.



¿Te gustó el artículo? Compártelo