1.-¿ Que es lenguaje ensamblador?
El lenguaje ensamblador es un tipo de lenguaje de bajo nivel utilizado para escribir programas informáticos, y constituye la representación más directa del código máquina específico para cada arquitectura de computadoras legible por un programador.
Fue usado principalmente en los inicios del desarrollo de software, cuando aun no se contaba con los potentes lenguajes de alto nivel. Actualmente se utiliza con frecuencia en ambientes académicos y de investigación, especialmente cuando se requiere la manipulación directa de hardware, se pretenden altos rendimientos o un uso de recursos controlado y reducido.
Muchos dispositivos programables (como los microcontroladores) aun cuentan con el ensamblador como la única manera de ser manipulados.
2.-¿Para que te sirve el lenguaje ensamblador?
La tarea fundamental de un ensamblador es traducir un programa en lenguaje de ensamblador al código correspondiente en lenguaje de máquina. En esencia, el ensamblador debe realizar las siguientes tareas:
1. Convertir los códigos ("opcode" o mnemónicos: ej. LDA, STX) a su código equivalente en lenguaje de máquina
2. Convertir los operandos simbólicos (las etiquetas o variables) en las direcciones correspondientes de los operandos
3. Construir las instrucciones en lenguaje de máquina en el formato apropiado
4. Convertir las constantes definidas en el programa en su verdadera representación
5. Escribir el "listing" en lenguaje de ensamblador con el código en lenguaje de máquina correspondiente
6. Procesar las directrices al ensamblador (las directrices son instrucciones o comandos dirigidos al ensamblador, que éste procesa y ejecuta al hallarlos en el programa en lenguaje de ensamblador; estas directrices no se traducen a lenguaje de máquina, si no que el ensamblador ejecuta alguna acción, como reservar memoria para variables, entre otras)
3.-¿Menciona al menos dos ejemplos de donde se puede aplicar el lenguaje ensamblador?
Fue usado principalmente en los inicios de desarrollo del software, cuando aun no se contaban con los potentes lenguajes de alto nivel. Actualmente se utiliza con frecuencia en ambientes académicos y de investigación.
Ejemplo 1
El siguiente es un ejemplo del programa clásico Hola mundo escrito para la arquitectura de procesador x86 (bajo el sistema operativo DOS).
.model small
.stack
.data
Cadena1 DB 'Hola Mundo.$'
.code
programa:
mov ax, @data
mov ds, ax
mov dx, offset Cadena1
mov ah, 9
int 21h
end programa
Ejemplo 2
Una selección de instrucciones para una computadora virtual[3] ) con las correspondientes direcciones de memoria en las que se ubicarán las instrucciones. Estas direcciones NO son estáticas. Cada instrucción se acompaña del código en lenguaje ensamblador generado (código objeto) que coincide con la arquitectura de computador virtual, o conjunto de instrucciones ISA.
Dir. | Etiqueta | Instrucción | Código máquina[4] |
---|---|---|---|
|
| .begin |
|
|
| .org 2048 |
|
| a_start | .equ 3000 |
|
2048 |
| ld length,% | |
2064 |
| be done | 00000010 10000000 00000000 00000110 |
2068 |
| addcc %r1,-4,%r1 | 10000010 10000000 01111111 11111100 |
2072 |
| addcc %r1,%r2,%r4 | 10001000 10000000 01000000 00000010 |
2076 |
| ld %r4,%r5 | 11001010 00000001 00000000 00000000 |
2080 |
| ba loop | 00010000 10111111 11111111 11111011 |
2084 |
| addcc %r3,%r5,%r3 | 10000110 10000000 11000000 00000101 |
2088 | done: | jmpl %r15+4,%r0 | 10000001 11000011 11100000 00000100 |
2092 | length: | 20 | 00000000 00000000 00000000 00010100 |
2096 | address: | a_start | 00000000 00000000 00001011 10111000 |
|
| .org a_start |
|
3000 |
| a: |
|
4.-¿Como se realiza el manejo de memoria?
La unidad de manejo de memoria o unidad de gestión de memoria (de sus siglas en inglés: Memory Management Unit) es un dispositivo de Hardware formado por un grupo de circuitos integrados, responsable del manejo de los accesos a la memoria por parte de la Unidad de Procesamiento Central (CPU).
Entre las funciones de este dispositivo se encuentran la traducción de las direcciones virtuales a direcciones físicas (ver Sistema de Memoria Virtual), la protección de la memoria, el control de caché y, en arquitecturas de computadoras más simples (especialmente en sistemas de 8 bits), Bank switching. Cuando la CPU intenta acceder a una dirección de memoria virtual, la MMU realiza una búsqueda en una memoria caché especial llamada Buffer de Traducción Adelantada (TLB, Translation Lookaside Buffer), que mantiene una parte de la tabla de páginas usadas hace menos tiempo.
5.-¿Que es el direccionamiento en lenguaje ensamblador?Modos de direccionamiento
Se les llama modos de direccionamiento a las distintas formas de combinar los operadores según el acceso que se hace a memoria.
Dicho de otra manera, un modo de direccionamiento será una forma de parámetro para las instrucciones. Una instrucción que lleve un parámetro, por lo tanto, usará un modo de direccionamiento, que dependerá de cómo direccionará (accesará) al parámetro; una instrucción de dos parámetros, combinará dos modos de direccionamiento.
6.-¿Cuales son los tipos de direccionamiento?
- Modo registro
Usa solamente registros como operadores
Es el más rápido, pues minimiza los recursos necesarios (toda la información fluye dentro del EU del CPU).
- Modo inmediato
Tiene dos operandos: un registro y una constante que se usa por su valor.
El valor constante no se tiene que buscar en memoria, pues ya se obtuvo al hacer el "fetch" de la instrucción.
Por tanto, es rápido aunque no tanto como el modo registro; requiere ir al BIU por el dato.
- Modo directo
Uno de los operandos involucra una localidad específica de memoria
El valor constante se tiene que buscar en memoria, en la localidad especificada.
Es más lento que los anteriores, pero es el más rápido para ir a memoria, pues ya "sabe" la localidad, la toma de la instrucción y no la tiene que calcular.
- Modo indirecto
Se usan los registros SI, DI como apuntadores
El operando indica una localidad de memoria, cuya dirección (sólo la parte desplazamiento) está en SI o DI.
Es más lento que los anteriores, pues tiene que "calcular" la localidad.
- Modo indexado de base
Formato:
[
BX o BP
+ SI o DI (opcionales)
+ constante (opcional)
]
BX o BP indica una localidad base de la memoria
A partir de BX o BP, se puede tener un desplazamiento variable y uno constante
La diferencia es el segmento sobre el que trabajan por defecto:
BX por defecto en el segmento de datos
BP por defecto en el segmento de pila.
7.-¿Que es el formato de un programa?
"Existen ciertas normas para crear un programa en lenguaje ensamblador. La primera se refiere al formato interno de cada instrucción del lenguaje. Toda línea del código debe digitarse bajo ciertas reglas, las cuales pueden considerarse como la sintaxis propia del lenguaje. Sin embargo, como se verá más adelante, en la formación de instrucciones también entra en juego la semántica. La segunda norma es el formato externo del programa, que puede equipararse con una capa que rodeará al programa para ayudar
EL FORMATO INTERNO
El forma interno de una línea de código se puede resumir en cuatro partes.
• La etiqueta/variable/constante.- puede definirse o no, y si se define debe estar seguida por separadores, ya sea uno o más espacios o tabuladores.
• El nombre nemónico/directiva.- que puede equipararse con el verbo o la acción por realizar, seguido de uno o más separadores (espacios o tabuladores).
• El operando.- que generalmente se divide en dos (aunque existen instrucciones que solo operan con uno): el destino (que será el depósito de algún resultado) y la fuente de la información (el originador de la “acción”). El destino y la fuente (si existe ésta) deben estar separados por una coma.
• El comentario.- que siempre va precedido por el símbolo “;”, debe de estar separado del operando por uno o más espacios o tabulaciones, y puede existir o no.
EL FORMATO EXTERNO
El formato externo esta formado por varios comandos clave que permiten establecer el entorno operativo del programa. Entre ellos tenemos uno que define el modelo de memoria (básicamente establece cuáles y cuántos segmentos se van a usar), los diferentes segmentos que contendrá el código, los datos y la pila, así como el comienzo y final del programa. Ahora bien, existen dos maneras de definir el programa: en la primera se utilizan directivas simplificadas y en la segunda no se usan. Las directivas simplificadas ayudan a esclarecer ciertos comandos crípticos del programa, permitiendo que sean más legibles, y se incluyeron en las versiones del MASM 5.0 y posteriores.