¿Qué es un programa en lenguaje ensamblador?
Pregunta 1: ¿Qué es el lenguaje ensamblador? El desarrollo de los lenguajes de programación de computadoras ha pasado por el proceso desde el lenguaje de máquina, el lenguaje ensamblador hasta el lenguaje de alto nivel.
1. Lenguaje de máquina
Las computadoras electrónicas utilizan números binarios compuestos por "0" y "1". El binario es la base del lenguaje informático. Al comienzo de la invención de las computadoras, la gente solo podía usar el lenguaje informático para ordenarle a la computadora que hiciera esto o aquello. En una palabra, significa escribir una serie de secuencias de instrucciones compuestas por "0" y "1" para que la computadora las realice. ejecutar. , este lenguaje es lenguaje de máquina. Usar lenguaje de máquina es muy doloroso, especialmente cuando el programa tiene errores y necesita ser modificado. Además, dado que el sistema de instrucciones de cada computadora suele ser diferente, si un programa ejecutado en una computadora va a ejecutarse en otra computadora, se debe programar otro programa, lo que resulta en una duplicación del trabajo. Sin embargo, debido a que utiliza un lenguaje específico para un modelo específico de computadora, su eficiencia computacional es la más alta entre todos los lenguajes. El lenguaje de máquina es la primera generación de lenguaje informático.
2. Lenguaje ensamblador
Para reducir el dolor de la programación en lenguaje de máquina, la gente ha realizado una mejora útil: utilizar algunas letras inglesas concisas y cadenas de símbolos para reemplazar un código específico. cadena binaria de instrucciones, por ejemplo, use "A D D" para representar la suma, "MO V" para representar la transferencia de datos, etc. De esta manera, es fácil para las personas leer y comprender lo que está haciendo el programa, y corregir errores y El mantenimiento se vuelve conveniente. Este tipo de lenguaje de programación se llama lenguaje ensamblador, que es el lenguaje informático de segunda generación. Sin embargo, la computadora no reconoce estos símbolos, lo que requiere de un programa especial que se encarga de traducir estos símbolos al lenguaje de máquina de números binarios. Este programa de traducción se llama ensamblador.
El lenguaje ensamblador también depende en gran medida del hardware de la máquina y tiene poca portabilidad, pero sigue siendo muy eficiente. Los programas en lenguaje ensamblador compilados para hardware de computadora específico pueden utilizar con precisión las funciones y especialidades del hardware de la computadora, y los programas son. refinado y la calidad es alta, por lo que sigue siendo una herramienta de desarrollo de software potente y de uso común.
3. Lenguaje de alto nivel
Desde la dolorosa experiencia inicial de comunicarse con las computadoras, la gente se dio cuenta de que se debía diseñar un lenguaje que se acercara al lenguaje matemático o al lenguaje humano. lenguaje natural y no depende del hardware de la computadora. Los programas compilados se pueden usar universalmente en todas las máquinas. Después de un arduo trabajo, en 1954 nació el primer lenguaje de alto nivel que era completamente independiente del hardware de la máquina: FORTRAN. En los últimos 40 años, han aparecido cientos de lenguajes de alto nivel, y hay docenas de lenguajes importantes. , aquellos con mayor influencia y uso común incluyen F O RT R A N, A L G O L, C O B O L, B A S I C, L I S P, S N O B O L, P L / 1, P a s c a l, C, P R O L O G, A d a, C + +, V C, V B, D e l p h i, J AVA et al.
El desarrollo de lenguajes de alto nivel también ha pasado por el proceso desde los primeros lenguajes hasta los lenguajes de programación estructurados, y desde los lenguajes de programación orientados a procesos hasta los no procedimentales. En consecuencia, el desarrollo de software también ha evolucionado desde la producción inicial cerrada en talleres manuales individuales hasta la producción industrializada en línea de montaje.
A mediados y finales de la década de 1960, había cada vez más software y la escala era cada vez mayor. Sin embargo, la producción de software la realizaban básicamente las propias personas. y estándares estandarizados de planificación, prueba y evaluación de sistemas. La consecuencia negativa es que una gran cantidad de sistemas de software construidos con un costo enorme no se pueden utilizar debido a errores e incluso causan enormes pérdidas. Casi no hay software sin errores. Todo esto ha conmocionado enormemente a la industria informática y se conoce como la "crisis del software" de la historia. La gente se da cuenta de que preparar programas grandes es diferente a escribir programas pequeños. Debería ser una tecnología nueva y todo el proceso de desarrollo de software debería manejarse como ingeniería. Los programas deben diseñarse de manera que se pueda garantizar y verificar fácilmente la corrección. En 1969, se propuso el método de programación estructurada. En 1970, apareció el primer lenguaje de programación estructurado: el lenguaje Pascal, lo que marcó el comienzo del período de programación estructurada.
A principios de la década de 1980, se produjo otra revolución en el pensamiento de diseño de software y el resultado fue la programación orientada a objetos. Antes de esto, casi todos los lenguajes de alto nivel estaban orientados a procesos y la ejecución del programa era similar a una canalización. Antes de ejecutar un módulo, las personas no podían hacer nada más ni cambiar dinámicamente la dirección de ejecución. el programa. Esto es diferente de cómo la gente maneja las cosas todos los días... >>
Pregunta 2: ¿Qué es el lenguaje ensamblador? El lenguaje ensamblador es un lenguaje informático, en términos sencillos, es la forma en que los humanos se comunican con las computadoras. (CPU), la computadora no entiende el lenguaje humano, ni lo entiende ni lo lee. Si queremos que la computadora complete nuestro trabajo por nosotros, necesitamos traducir las tareas que debe completar la computadora al lenguaje de la computadora. El lenguaje ensamblador es uno de varios lenguajes. Es un lenguaje informático de bajo nivel. Esto se compara con el lenguaje C orientado a procesos y el C++ y Java orientados a objetos. Es el lenguaje informático más cercano al hardware distinto del lenguaje de máquina. Al aprender el lenguaje ensamblador, puede comprender profundamente el mecanismo operativo subyacente del sistema operativo y pensar en los problemas desde la perspectiva de la CPU. Esto le permite evitar muchos errores al escribir programas en lenguajes de alto nivel y obtener una comprensión más profunda de los principios de ejecución de los lenguajes de alto nivel. Debido a que el lenguaje ensamblador es un lenguaje de bajo nivel, definitivamente no es fácil de entender para los usuarios comunes, ya que es de bajo nivel. Esto requiere ciertos conocimientos básicos de hardware y algunos conocimientos de los principios de funcionamiento de la computadora. Había aprendido lenguaje ensamblador en la universidad antes, pero no lo tomé en serio. Incluso mis tareas las hacía copiando y pegando (hay muchos como este :)). Sólo después de empezar a trabajar descubrí que este idioma es algo bueno. En realidad, es un curso básico muy importante. Ahora que tengo tiempo, abriré el libro, leeré más y aprenderé más. Actualmente existen dos lenguajes ensambladores comunes: uno es el lenguaje ensamblador de 16 bits en DOS basado en la arquitectura 8086/88, y el otro es el lenguaje ensamblador de 32 bits en Windows basado en la arquitectura 80386 y modelos posteriores. No sé si existe un lenguaje ensamblador en Linux. Por cierto, no importa qué tipo de lenguaje ensamblador, los programas compilados por él son software, por lo que no importa qué tipo de software, debe depender de la plataforma básica del sistema operativo antes de que pueda ser ejecutado por la CPU del hardware. Debido a que el sistema operativo proporciona la conexión entre el hardware y la interfaz de usuario, todo el software debe asignarse a recursos de hardware a través de él (no sé si esto es correcto :) antes de que pueda ejecutarse). Generalmente, primero aprende el ensamblaje de DOS de 16 bits y luego aprende el ensamblaje de Windows de 32 bits. Así que hablemos primero del ensamblaje de DOS de 16 bits. Para aprender el lenguaje ensamblador, primero debe comprender la CPU. Solo comprendiendo la CPU se puede comprender la ejecución del lenguaje ensamblador, porque básicamente opera directamente los diversos componentes de la CPU (como los registros). Encontré este diagrama en ***, de la siguiente manera: El diagrama de estructura lógica de la CPU anterior es el de 8088. Las arquitecturas de 8088 y 8086 son similares, así que usaré esto como ejemplo para presentar las funciones de cada componente. Registro principal: registro de acumulación AX (AH, AL), generalmente utilizado para el almacenamiento temporal de datos; registro de dirección base BX (BH, BL), generalmente utilizado para el almacenamiento de direcciones de desplazamiento CX (CH, CL), generalmente utilizado en control de bucles; veces el registro de datos DX (DH, DL), que parece ser similar al registro de puntero de pila SP, el registro de puntero de dirección base BP, que se puede utilizar como registro de índice de origen SI y registro de índice de destino DI; Estos dos se utilizan como extensiones BX para el almacenamiento de direcciones compensadas. Registro de segmento: CS: registro de segmento de código. Cualquier programa comienza la ejecución desde el segmento de código. El registro CS especifica la dirección del segmento de código. DS: registro de segmento de datos, que almacena la dirección del segmento de la parte de datos del programa. SS: Registro de segmento de pila. La pila es un bloque de memoria especial en la memoria. El montón es diferente de la pila. En la actualidad, solo sé que la pila se usa de acuerdo con el principio de "primero en entrar, último en salir, último en entrar". , primero en salir". ES: Registro de segmento adicional, que debería ser una expansión del registro de segmento de datos DS. Sumador de direcciones: se utiliza al direccionar la memoria. Genera la dirección física procesando la dirección del segmento en el registro del segmento y la dirección de desplazamiento en los registros BX, SI, DI y otros, y luego se puede acceder a la unidad de memoria. La dirección en el ensamblador es solo una dirección lógica, no una dirección real en la memoria. Cuando el programa se está ejecutando realmente, cada vez que se accede a la memoria, la dirección lógica se convierte en una dirección física antes de que se pueda acceder a la memoria física.
También escribiré otro artículo para analizar el direccionamiento de la CPU, la dirección lógica y la dirección física. Unidad de operación lógica y unidad de control: Esta es la unidad central de la CPU. Por ahora solo recordamos que son las responsables de la ejecución y el control. Datos internos, bus de direcciones: el canal de comunicación entre varios componentes dentro de la CPU. Bus de direcciones externo: se utiliza para transmitir la dirección física de la unidad de memoria que la CPU quiere leer/escribir. Su ancho determina la capacidad máxima de memoria a la que puede acceder la CPU. Datos externos y control...>>
Pregunta 3: Describe brevemente los pasos de programación en lenguaje ensamblador. Pasos de programación en lenguaje ensamblador:
(1) Analizar el problema: condiciones conocidas, problemas a resolver, requisitos funcionales/de rendimiento, etc.
(2) Establecer un modelo matemático: Matematizar y formular el problema para facilitar el procesamiento informático.
(3) Algoritmo de determinación: simple, rápido, de alta precisión, pequeña cantidad de código y fácil de programar.
(4) Dibuje un diagrama de flujo del programa: utilice flechas, diagramas de bloques, diagramas de diamantes, etc. para representar la estructura del programa.
(5) Asignación de espacio de memoria: Asigne espacio de memoria para programas o datos.
(6) Programación y verificación estática: la estructura del programa es simple, clara y fácil de entender.
(7) Depuración del programa: utilice el software de depuración DEBUG para depurar.
Pregunta 4: 1. ¿Cuál es la diferencia entre un programa ensamblador y un programa fuente en lenguaje ensamblador? El programa ensamblador es el resultado de la compilación del programa fuente en lenguaje ensamblador
Las etiquetas se utilizan para marcar segmentos de programa, segmentos de memoria, ubicaciones de salto, etc.
loop p ov add1 can
Pregunta 5: ¿Cuál es la diferencia entre lenguaje de programación y lenguaje ensamblador? Los lenguajes informáticos se pueden dividir de bajo nivel a alto nivel:
Lenguaje de máquina, es decir, un lenguaje que puede ser reconocido por el hardware de la máquina compuesto por 0 y 1
Lenguaje de bajo nivel, es decir, lenguaje ensamblador
Lenguaje intermedio, como el lenguaje C
Lenguajes de alto nivel, como C++, JAVA, C#, etc.
El lenguaje ensamblador es un lenguaje máquina compuesto por 0 y 1 expresado en código inglés con semántica sencilla para facilitar la comprensión y programación por parte de los programadores. El lenguaje ensamblador se utiliza generalmente para la manipulación directa del hardware. Dado que los programas escritos en lenguaje ensamblador son muy pequeños, generalmente el código central del programa que controla el hardware se puede escribir en lenguaje ensamblador. Por un lado, es seguro y, por otro, mejora la ejecución. velocidad.
Para principiantes en informática, deben comenzar con lenguajes de nivel intermedio y alto, como lenguaje c, vb, java, etc. Si quieres aprender a programar, aprende uno o dos lenguajes de alto nivel. es suficiente.
Si domina las habilidades básicas de programación, lo mejor es aprender los principios básicos de funcionamiento de las estructuras de datos, los sistemas operativos y el hardware de la computadora para optimizar los programas que escribe y mejorar la seguridad y la eficiencia operativa.
Si deseas realizar un trabajo de desarrollo más avanzado, es posible que desees aprender lenguaje ensamblador.
En colegios y universidades, el lenguaje ensamblador es un curso obligatorio para los estudiantes que se especializan en tecnología informática, mientras que el lenguaje ensamblador no es obligatorio para los estudiantes que se especializan en ingeniería de software.
En cuanto a la diferencia entre ensamblador y programación, es obvio que el lenguaje ensamblador es un lenguaje utilizado para escribir determinados programas. La programación es el proceso en el que los programadores escriben programas en un determinado lenguaje.
Pregunta 6: ¿Cuál es la extensión del lenguaje ensamblador? La extensión de ASM
Pregunta 7: ¿Cuáles son los 4 pasos para desarrollar un programa en lenguaje ensamblador Editar: Usar el Bloc de notas para generar? : *. Archivos ASM. Compilación: usando MASM. EXE, genera: *. Archivos OBJ. Conexión: Utilice ENLACE. EXE, generado: *. EXE. Ejecución: Utilice *. EXE.
Pregunta 8: ¿Cómo se define la subrutina del lenguaje ensamblador? Salte directamente a ella con jmp y luego regrese.
call xxx
xxx proc usa eax,esi,edi,var:ddword...
xxx endp
También puede tomar parámetros. El formato del segundo método es así. Para decirlo sin rodeos, también es un salto jmp. Es solo optimización del compilador. Evite que los programadores salten, provocando que la pila quede desalineada.
Pregunta 9: ¿Cuáles son las características del lenguaje ensamblador? Las características generales del lenguaje ensamblador 1. Dependencia de la máquina
Este es un lenguaje de bajo nivel orientado a la máquina, generalmente diseñado para una computadora o familia de computadoras en particular. Debido a que es una representación simbólica de instrucciones de máquina, diferentes máquinas tienen diferentes lenguajes ensambladores. El uso del lenguaje ensamblador puede estar orientado a la máquina y hacer un mejor uso de las características de la máquina, lo que da como resultado programas de mayor calidad.
2. Alta velocidad y eficiencia
El lenguaje ensamblador mantiene las ventajas del lenguaje de máquina, es directo y simple y puede acceder y controlar de manera efectiva varios dispositivos de hardware de computadora, como discos, memoria, CPU, puerto de E/S, etc. ., ocupa menos memoria y tiene una velocidad de ejecución rápida. Es un lenguaje de programación eficiente.
3. Complejidad de escritura y depuración
Dado que el hardware se controla directamente y las tareas simples también requieren muchas declaraciones en lenguaje ensamblador, la programación debe ser integral, se deben considerar todos los problemas posibles y se debe realizar una implementación y uso razonables. recursos de hardware. De esta forma, inevitablemente aumenta la carga para los programadores. De manera similar, al depurar un programa, una vez que hay un problema con la ejecución del programa, es difícil encontrarlo.
Ventajas
1. Debido a que el programa diseñado en lenguaje ensamblador eventualmente se convierte en instrucciones de máquina, puede mantener la consistencia del lenguaje de máquina, es directo, simple y puede procesarse simplemente como instrucciones de la máquina. Acceder y controlar varios dispositivos de hardware de la computadora, como discos, memoria, CPU, puertos de E/S, etc. Usando lenguaje ensamblador, puede acceder a todos los recursos de software y hardware accesibles.
2. El código de destino es corto, ocupa menos memoria y tiene una velocidad de ejecución rápida. Es un lenguaje de programación eficiente y, a menudo, se usa junto con lenguajes de alto nivel para mejorar la velocidad de ejecución. y la eficiencia del programa y compensa las desventajas de los lenguajes de alto nivel en el control de hardware. En algunos aspectos, la aplicación es muy amplia.
Desventajas
1. El lenguaje ensamblador está orientado a la máquina y se encuentra en la parte inferior de toda la jerarquía de lenguajes informáticos, por lo que se considera un lenguaje de bajo nivel, generalmente para un propósito específico. Computadora o serie. Las computadoras están especialmente diseñadas. Diferentes procesadores tienen diferentes sintaxis y compiladores de lenguaje ensamblador. El programa compilado no se puede ejecutar en diferentes procesadores y carece de portabilidad;
2. Es difícil entender la intención de la programación a partir del código en lenguaje ensamblador, mala mantenibilidad. incluso completar tareas simples requiere una gran cantidad de código en lenguaje ensamblador, que es fácil de generar errores y difícil de depurar
3. Para usar el lenguaje ensamblador, debe tener un buen conocimiento de un determinado procesador y; Solo se puede optimizar para arquitecturas y procesadores específicos, pero la eficiencia de desarrollo es muy baja y el ciclo es largo y monótono.
Pregunta 10: ¿Cuál es la diferencia entre microprograma y lenguaje ensamblador? 5 puntos El microcódigo y el ensamblador son lenguajes de bajo nivel, pero el microcódigo es de nivel inferior que el ensamblador. Tanto el microcódigo como el ensamblaje están estrechamente relacionados con el hardware, pero para diferentes generaciones de productos en la misma serie de productos, el ensamblaje puede ser exactamente el mismo, pero el microcódigo puede ser enormemente diferente, porque el microcódigo depende completamente de las conexiones de hardware dentro del chip. .
Para la misma frase de lenguaje C, se generarán diferentes lenguajes ensambladores en diferentes procesadores. El tiempo de ejecución de cada línea de lenguaje ensamblador puede ser de uno o dos ciclos de reloj, o incluso más. La relación entre microcódigo y ensamblaje es como la relación entre C y ensamblaje, lo que significa que un ensamblaje puede generar uno o más microcódigos. El llamado microcódigo, o microinstrucción, es la primitiva operativa más pequeña dentro del procesador, que controla acciones especializadas como la conmutación de puertas y la secuencia de microoperaciones que componen una instrucción. Por ejemplo, para una simple acción de agregar ADD, el microcódigo puede decidir qué dos registros o buses aceptar como entrada, qué bus o registro generar, si el registro de bandera debe guardarse o descartarse, y si saltar de acuerdo con las condiciones o Ejecute directamente el siguiente código del microprocesador.
Un bus de datos con un ancho interno de sólo 8 bits puede soportar completamente la operación de ensamblaje de números enteros de 32 bits gracias al microcódigo.
El microcódigo se utilizó originalmente para desarrollar el control lógico de las computadoras. Las CPU antiguas a menudo están "cableadas" y cada instrucción de la máquina (suma, movimiento) se implementa mediante un circuito. Aunque tiene la ventaja de un alto rendimiento, a medida que aumenta la complejidad de las instrucciones, también genera investigación y desarrollo y DEPURACIÓN. . Dificultades y complejidad del circuito. La aparición del microcódigo permite a los diseñadores de CPU implementar una instrucción de máquina escribiendo un microprograma en lugar de diseñar un circuito para implementarlo. En el futuro proceso de desarrollo y diseño, el microcódigo se puede cambiar fácilmente, pero el circuito de hardware no se puede cambiar, de lo contrario provocará enormes pérdidas comerciales. Este diseño de CPU flexible dio como resultado los conjuntos de instrucciones cada vez más complejos de la actualidad.