INVESTIGACIÓN LENGUAJE
ENSAMBLADOR
Materia: Lenguajes de interfaz
Mario Huerta Olivares
18121499
1 CONTENIDO
2 ¿Qué es el lenguaje ensamblador?................................................................................................... 2
3 ¿En qué aplicaciones se utiliza? ........................................................................................................ 2
4 ¿Que "IDE" se utilizan para crear un programa? ............................................................................ 3
5 ¿Cuáles son las partes principales de un programa? ..................................................................... 3
6 Directivas............................................................................................................................................... 4
7 Bibliografía........................................................................................................................................... 7
6 de mayo de 2022 1
2 ¿QUÉ ES EL LENGUAJE ENSAMBLADOR?
El lenguaje ensamblador es cualquier lenguaje de programación de bajo nivel en el que existe
una correspondencia muy fuerte entre las instrucciones del lenguaje y las instrucciones del código de
máquina de la arquitectura. El lenguaje ensamblador generalmente tiene una declaración por
instrucción de máquina (1: 1), pero las constantes, los comentarios, las directivas del ensamblador, las
etiquetas simbólicas de, por ejemplo, las ubicaciones de memoria, los registros y las macros
generalmente también son compatibles.
El código ensamblador se convierte en código de máquina ejecutable mediante un programa
de utilidad denominado ensamblador. El término "ensamblador" generalmente se atribuye a Wilkes,
Wheeler y Gill en su libro de 1951 La preparación de programas para una computadora digital
electrónica, quienes, sin embargo, usaron el término para referirse a "un programa que ensambla otro
programa que consta de varias secciones en un solo programa". El proceso de conversión se conoce
como ensamblado, como ensamblar el código fuente. El paso computacional cuando un ensamblador
está procesando un programa se llama tiempo de ensamblaje. El lenguaje ensamblador también puede
llamarse código de máquina simbólico.
Debido a que el ensamblado depende de las instrucciones del código máquina, cada lenguaje
ensamblador es específico para una arquitectura de computadora en particular.
A veces hay más de un ensamblador para la misma arquitectura y, a veces, un ensamblador es
específico para un sistema operativo o para sistemas operativos particulares. La mayoría de los
lenguajes ensambladores no proporcionan una sintaxis específica para las llamadas al sistema
operativo, y la mayoría de los lenguajes ensambladores se pueden usar universalmente con cualquier
sistema operativo, ya que el lenguaje brinda acceso a todas las capacidades reales del procesador,
sobre las cuales se basan todos los mecanismos de llamada del sistema. en definitiva. A diferencia de
los lenguajes ensambladores, la mayoría de los lenguajes de programación de alto nivel generalmente
son portátiles a través de múltiples arquitecturas, pero requieren interpretación o compilación, una
tarea mucho más complicada que ensamblar.
3 ¿EN QUÉ APLICACIONES SE UTILIZA?
En los primeros días de la programación, la mayoría de las aplicaciones se escribían parcial o
totalmente en lenguaje ensamblador. Tenían que ajustarse en una pequeña área de memoria y se
ejecutaban de la manera más eficiente posible en los procesadores lentos. A medida que la memoria
aumentó su capacidad y los procesadores su velocidad, los programas se hicieron más complejos. Los
programadores cambiaron a lenguajes de alto nivel tales como C, FORTRAN y COBOL, los cuales
contenían una cierta capacidad de estructuración. Los lenguajes de programación orientados a objetos
más recientes, tales como C++, C# y Java, han hecho posible la escritura de programas complejos que
contienen millones de líneas de código
6 de mayo de 2022 2
Hay algunas situaciones en las que los desarrolladores pueden optar por utilizar el lenguaje
ensamblador:
• Escribir código para sistemas con procesadores más antiguos que tienen opciones
limitadas de lenguaje de alto nivel, como Atari 2600, Commodore 64 y calculadoras
gráficas. Los programas para estas computadoras de las décadas de 1970 y 1980 a menudo
se escriben en el contexto de las subculturas demoscene o retrogaming.
• Código que debe interactuar directamente con el hardware, por ejemplo, en controladores
de dispositivos y controladores de interrupciones.
• En un procesador incorporado o DSP, las interrupciones de alta repetición requieren la
menor cantidad de ciclos por interrupción, como una interrupción que ocurre 1000 o
10000 veces por segundo.
• Programas que necesitan usar instrucciones específicas del procesador no implementadas
en un compilador. Un ejemplo común es la instrucción de rotación bit a bit en el núcleo
de muchos algoritmos de cifrado, así como la consulta de la paridad de un byte o el
acarreo de 4 bits de una suma.
• Programas con bucles internos sensibles al rendimiento, donde el lenguaje ensamblador
brinda oportunidades de optimización que son difíciles de lograr en un lenguaje de alto
nivel. Por ejemplo, álgebra lineal con BLAS o transformación de coseno discreta (por
ejemplo, versión de ensamblaje SIMD de x264).
El lenguaje ensamblador todavía se enseña en la mayoría de los programas de informática e
ingeniería electrónica. Aunque hoy en día pocos programadores trabajan regularmente con el
lenguaje ensamblador como herramienta, los conceptos subyacentes siguen siendo importantes.
4 ¿QUE "IDE" SE UTILIZAN PARA CREAR UN PROGRAMA?
Pendiente
5 ¿CUÁLES SON LAS PARTES PRINCIPALES DE UN PROGRAMA?
El lenguaje ensamblador es básicamente como cualquier otro lenguaje, lo que significa que tiene sus
palabras, reglas y sintaxis. Los elementos básicos del lenguaje ensamblador son:
• Etiquetas;
• Instrucciones;
• Directivas; y
• Comentarios.
Sintaxis del lenguaje ensamblador
6 de mayo de 2022 3
Al escribir un programa en lenguaje ensamblador, es necesario observar reglas específicas para
permitir que el proceso de compilación en "código HEX" ejecutable se ejecute sin errores. Estas
reglas obligatorias se llaman sintaxis y solo hay varias de ellas:
• Cada línea de programa puede constar de un máximo de 255 caracteres;
• Toda línea de programa a compilar, debe comenzar con un símbolo, etiqueta, mnemotécnico
o directiva;
• Texto que sigue a la marca “;” en una línea de programa representa un comentario ignorado
(no compilado) por el ensamblador; y
• Todos los elementos de una línea de programa (etiquetas, instrucciones, etc.) deben estar
separados por al menos un carácter de espacio. En aras de una mayor claridad, se suele
utilizar un botón TAB en un teclado en su lugar, de modo que es fácil delimitar columnas con
etiquetas, directivas, etc. en un programa.
Realiza la descripción de por lo menos 20 directivas. Explicando para qué es cada uno y mostrando un
ejemplo funcional. Los ejemplos de las directivas pueden sacarlos de internet.
6 DIRECTIVAS
A diferencia de las instrucciones que se compilan y escriben en la memoria del programa
del chip, las directivas son comandos del propio lenguaje ensamblador y no tienen influencia en
el funcionamiento del microcontrolador. Algunos de ellos son parte obligatoria de cada programa,
mientras que otros se utilizan solo para facilitar o acelerar la operación. Las directivas se escriben
en la columna reservada para las instrucciones. Hay una regla que permite solo una directiva por
línea de programa.
1. STACK
sirve para fijar un tamaño n del segmento de pila, por defecto 1K.
2. DATA
abre el segmento de datos.
3. CODE
abre el segmento de código, al final código debe aparecer END.
4. MOV dest,src
Copia el contenido del operando fuente (src) en el destino (dest).
Operación: dest <- src
Las posibilidades son:
6 de mayo de 2022 4
• MOV reg,{reg|mem|inmed}
• MOV mem,{reg|inmed}
• MOV {reg16|mem16},{CS|DS|ES|SS}
• MOV {DS|ES|SS},{reg16|mem16}
5. PUSH src
Pone el valor en el tope del stack.
Operación: SP <- SP - 2, [SP+1:SP] <- src donde src = {reg16|mem16|CS|DS|ES|SS}.
6. POP dest
Retira el valor del tope del stack poniéndolo en el lugar indicado.
Operación: dest <- [SP+1:SP], SP <- SP + 2 donde dest = {reg16|mem16|DS|ES|SS}.
7. IN {AL|AX},{DX|inmed (1 byte)}
Pone en el acumulador el valor hallado en el port indicado.
8. OUT {DX|inmed (1 byte)},{AL|AX}
Pone en el port indicado el valor del acumulador.
9. LEA reg,mem
Almacena la dirección efectiva del operando de memoria en un registro.
Operación: reg <- dirección mem
Instrucciones aritméticas (Afectan los flags AF, CF, OF, PF, SF, ZF)
1. ADD dest,src
Operación: dest <- dest + src.
2. ADC dest,src
6 de mayo de 2022 5
Operación: dest <- dest + src + CF.
3. SUB dest,src
Operación: dest <- dest - src.
4. SBB dest,src
Operación: dest <- dest - src - CF.
5. CMP dest,src
Operación: dest - src (sólo afecta flags).
6. INC dest
Operación: dest <- dest + 1 (no afecta CF).
7. DEC dest
Operación: dest <- dest - 1 (no afecta CF).
8. MUL {reg8|mem8}
Realiza una multiplicación con operandos no signados de 8 por 8 bits.
Operación: AX <- AL * {reg8|mem8}. CF=OF=0 si AH = 0, CF=OF=1 en caso contrario. AF,
PF, SF, ZF quedan indefinidos.
9. AND dest,src
Operación: dest <- dest and src.
10. TEST dest,src
Operación: dest and src. Sólo afecta flags.
11. OR dest,src
Operación: dest <- dest or src.
12. XOR dest,src
Operación: dest <- dest xor src.
Las cuatro instrucciones anteriores ponen CF = OF = 0, AF queda indefinido y PF, SF y ZF
dependen del resultado.
13. NOT dest
Operación: dest <- Complemento a 1 de dest. No afecta los flags.
14. JMP label
6 de mayo de 2022 6
Saltar hacia la dirección label.
15. CALL label
Ir al procedimiento cuyo inicio es label. Para llamadas dentro del mismo segmento
equivale a PUSH IP: JMP label, mientras que para llamadas entre segmentos equivale a
PUSH CS: PUSH IP: JMP label.
16. RET
Retorno de procedimiento.
17. RET inmed
Retorno de procedimiento y SP <- SP + inmed.
Variaciones de la instrucción de retorno:
18. JL etiqueta/JNGE etiqueta
Saltar a etiqueta si es menor.
19. JLE etiqueta/JNG etiqueta
Saltar a etiqueta si es menor o igual.
20. JE etiqueta
Saltar a etiqueta si es igual.
21. JNE etiqueta
Saltar a etiqueta si es distinto.
22. JE etiqueta
Saltar a etiqueta si es igual.
23. LOOP
Operación: CX <- CX-1. Saltar a label si CX<>0.
7 BIBLIOGRAFÍA
Lenguaje ensamblador. Para computadoras basadas en Intel ([Link])
6 de mayo de 2022 7
[Link]
Materials/Bibliografia/Ensamblador
Lenguajes de Interfaz - Grupo A - M6. Programacion en ensamblador (x86-64).pdf - All Documents
([Link])
Lenguajes de Interfaz - Grupo A - Ensamblador para PC [Paul A. CARTER].pdf - All Documents
([Link])
6 de mayo de 2022 8