SlideShare uma empresa Scribd logo
1 de 26
Baixar para ler offline
Lenguaje ensamblador
Que es?
  El ensamblador es una variante legible para el ser humano del
  lenguaje de maquina que usan las computadoras. Este lenguaje
  le da la facilidad y las herramientas necesarias para tomar el
  control de todo el PC.

  El lenguaje ensamblador, o assembler (assembly language en
  inglés) es un lenguaje de programación de bajo nivel para los
  computadores, y otros circuitos integrados programables.

  El término ensamblador (del inglés assembler) se refiere a un
  tipo de programa informático que se encarga de traducir un
  fichero fuente escrito en un lenguaje ensamblador, a un fichero
  objeto que contiene código máquina,
Que es?
   Se dice que existe una relación 1:1 entre el lenguaje de maquina y el
  lenguaje ensamblador. Por tanto, El Lenguaje Ensamblador es directamente
  traducible al Lenguaje de Máquina, y viceversa.

  Por otro lado, la computadora no entiende directamente al Lenguaje
  Ensamblador; es necesario traducirle a Lenguaje de Máquina.

  Cuando creamos un programa en assembler, la extensión del programa lo
  guardamos como ASM. Este archivo no lo entiende la Pc, por tanto se hace
  necesario traducir el programa para obtener un OBJ, este último archivo
  “obj” contiene lenguaje de maquina que si puede interpretar el ordenador.

  Cabe resaltar que el lenguaje assembler va a depender del hardware. Es
  decir, para la arquitectura de la familia Intel, el lenguaje ensamblador
  cambiará con respecto a la arquitectura de la familia motorola.
Ventajas del lenguaje ensamblador?
    Proporciona un control absoluto sobre la PC. Permite
    implementar software o hardware de una manera más
    consciente. Sabemos el porque y el para que.

    Se conserva el control total de lo que debe hacer el PC, siempre
    y cuando sea físicamente capaz de hacer o ejecutar la tarea.

    Los programas creados en lenguaje ensamblador son más
    compactos y sobre todo más rápidos en comparación con otros
    lenguajes de alto nivel.

    Para un programa que muestre la cadena “Hola, mundo !!!!”
    Lenguaje      Fuente         Objeto         Ejecutable
                                                (.exe)
        Basic        27 bytes      651 bytes     12814 bytes

    Ensamblador      162 bytes     169 bytes      543 bytes
Estructura De Un Programa En Ensamblador
   Un programa en el lenguaje ensamblador consiste de una secuencia de
   proposiciones, una en cada línea del código fuente.

   La sintaxis de una proposición es la siguiente:
   [etiqueta] [instrucción|directiva [operandos]] [;comentario]

   donde etiqueta, instrucción|directiva, operandos, comentario son los
   campos de la proposición.

   Los campos se separan por caracteres blancos: caracteres de espacio y/o
   de tabulación. Todos los campos son opcionales, pero el campo operandos
   sólo pueden estar presente si existe el campo instrucción|directiva.

   etiqueta es un nombre simbólico empleado para referirse a números,
   cadenas de caracteres o localidades de memoria dentro de un programa.
   Las etiquetas permiten darle nombre a las variables, constantes y
   localidades de una instrucción particular.

   Inicio:
             mov ds,ax ; comentario
Estructura De Un Programa En Ensamblador
Un programa en el lenguaje ensamblador consiste de una secuencia de proposiciones, una en cada
línea del código fuente.

La sintaxis de una proposición es la siguiente:
[etiqueta] [instrucción|directiva [operandos]] [;comentario]

donde etiqueta, instrucción|directiva, operandos, comentario son los campos de la proposición.

Los campos se separan por caracteres blancos: caracteres de espacio y/o de tabulación. Todos los
campos son opcionales, pero el campo operandos sólo pueden estar presente si existe el campo
instrucción|directiva.

etiqueta es un nombre simbólico empleado para referirse a números, cadenas de caracteres o
localidades de memoria dentro de un programa. Las etiquetas permiten darle nombre a las variables,
constantes y localidades de una instrucción particular.

instrucción es un mnemónico de una instrucción del procesador. Cada instrucción se traduce
directamente a una instrucción del lenguaje máquina del microprocesador.

Operandos consiste de cero, uno o más operandos. Un operando le especifica al ensamblador qué
valor, registro, localidad de memoria, etc., asociar con cada instrucción.

    operandos consiste de cero, uno o más operandos. Un operando le especifica al ensamblador qué
                valor, registro, localidad de memoria, etc., asociar con cada instrucción.
Inicio:
           mov ds,ax ; comentario
Palabras Reservadas

  Las palabras reservadas son para uso estricto del ensamblador. Éstas incluyen a
  los operadores, directivas y símbolos predefinidos. Estas palabras no pueden
  usarse como identificadores.

  Algunas de ellas son
Inicio de un programa en ensamblador para el 8086

 model : Esta es una directiva, que selecciona uno de los 6 modos diferentes
 que tiene Turbo Assenbler de generar el código de un programa dependiendo
 del tamaño que tiene el código y los datos. Los seis modelos son Pequeñito
 (tiny), pequeño (small), medio (medium), compacto (compact),
 grande (large) y extenso (huge).



 stack
 Esta directiva reserva espacio de memoria para la pila del programa, un área
 de memoria que almacena valores temporales empleados por las subrutinas
 y las direcciones de regreso de las subrutinas.
Inicio de un programa en ensamblador para el 8086
 Variables del programa

 Las variables de un programa se declaran en el segmento de datos, por lo que
 la sección de declaración de variables empieza con la directiva dataseg. Esta
 directiva le indica a Turbo Assembler que almacene las variables en el
 segmento de datos del programa. Las variables pueden estar inicializadas o
 no. Los valores de las variables inicializadas se almacenan en el código del
 programa y se cargan en las variables al ejecutar el programa.

 Para declarar variables podemos utilizar las directivas db, dw, dd o dq. La
 directiva db define una variable de un byte, la directiva dw define una
 variable de tipo palabra (dos bytes), la directiva dd define una variable de
 tipo palabra doble (cuatro bytes) y la directiva dq define una variable de tipo
 palabra cuádruple (ocho bytes). La sintaxis de estas directivas son:
                                  nomVar db exp
                                  nomVar dw exp
                                  nomVar dd exp
                                  nomVar dq exp
Ejemplo de Codigo assembler
    .model small
    .data
    mens db 'hola que tal!.$'
    .stack
    .code
    EMP:
    mov ax,@data
    mov ds,ax
    mov dx,offset mens
    mov ah,9
    int 21h
    mov ah,4ch
    int 21h
    end EMP
Registros del Micro-8086
          En total maneja 14 registros distribuidos de la siguiente manera:

                                         Registro de propósito general

AX (16 bits): El registro AX es el registro acumulador, es utilizado para operaciones que implican AL (8 bits)
entrada/salida y la mayor parte de la aritmética.
                                                                                                   AH (8 bits)
BX (16 bits): El registro BX es el registro base, y es el único registro de propósito general que          BL (8 bits)
puede ser un índice para direccionamiento indexado. También es común emplear el BX para cálculos.
                                                                                                           BH (8 bits)
CX (16 bits): El registro CX es conocido como el registro contador. Puede contener un valor para           CL (8 bits)
controlar el número de veces que un ciclo se repite o un valor para corrimiento de bits.                   CH (8 bits)

DX (16 bits): El registro DX es el registro de datos. Algunas operaciones de entrada/salida                DL (8 bits)
requieren su pulso, y las operaciones de multiplicación y división con cifras grandes suponen al DX y AX
                                                                                                           DH (8 bits)
trabajando juntos.
Registros del Micro-8086 Continuación…
En total maneja 14 registros distribuidos de la siguiente manera:

                                           Registro de índice
  SI:   El registro índice fuente u origen de 16 bits es requerido por algunas         Índice
  operaciones con cadenas de caracteres. El SI está asociado con el registro DS.
                                                                                       origen

  DI:   El registro índice destino también es requerido por algunas operaciones con    Índice
  cadenas de caracteres. El DI está asociado con el registro ES.
                                                                                       destino

  BP: El apuntador base de 16 bits facilita la referencia de parámetros, los cuales    Puntero a
  son datos y direcciones transmitidos vía la pila.
                                                                                       base

  SP: El apuntador de pila de 16 bits está asociado con el registro SS y proporciona   Puntero de
  un valor de desplazamiento que se refiere a la palabra actual que está siendo
  procesada en la pila. El sistema maneja de manera automática este registro.
                                                                                       pila
Registros del Micro-8086 Continuación…
           En total maneja 14 registros distribuidos de la siguiente manera:

                                               Registro de Segmento


CS: El DOS almacena la dirección inicial del segmento de código de un programa en el       Segmento de código
registro CS.

DS: La dirección inicial de un segmento de datos de programa es almacenada en el registro Segmento de dato
DS.

ES: Algunas operaciones con cadenas de caracteres utilizan el registro extra de segmento   Segmento Extra
para manejar el direccionamiento de memoria.

SS: El registro SS permite la colocación en memoria de una pila, para almacenamiento       Segmento de pila
temporal de direcciones y datos.
Registros del Micro-8086 Continuación…
En total maneja 14 registros distribuidos de la siguiente manera:

                         Registro apuntador de instrucciones


                    IP                   Apuntador de instrucciones




  IP: El registro IP de 16 bits contiene el desplazamiento de dirección de la siguiente instrucción que se ejecuta
Registros del Micro-8086
         En total maneja 14 registros distribuidos de la siguiente manera:

                                                 Registro de Bandera


                    - - - - O D I T S Z - A - P - C

•OF (overflow, desbordamiento): Indica desbordamiento del bit de mayor orden después de una operación aritmética de números
signados (1=existe overflow; 0=no existe overflow). Para operaciones sin signo, no se toma en cuenta esta bandera
•DF (dirección): Controla la selección de incremento o decremento de los registros SI o DI en las operaciones con cadenas de caracteres
(1=decremento automático; 0=incremento). La bandera DF se controla con las instrucciones STD y CLD.
•IF (interrupción): Indica que una interrupción externa sea procesada o ignorada (1=habilita la interrupción; 0=deshabilita la
interrupción). El estado de la bandera IF se controla con las instrucciones STI y CLI.
•TF (trampa): Permite la operación del procesador en modo de depuración (paso a paso)
•SF (signo): Contiene el signo resultante de una operación aritmética (0=positivo; 1=negativo).
•ZF (cero): Indica el resultado de una operación aritmética o de comparación (0=resultado diferente de cero; 1=resultado igual a cero).
•ZF (cero): Indica el resultado de una operación aritmética o de comparación (0=resultado diferente de cero; 1=resultado igual a cero).
•PF (paridad): Indica paridad par o impar en una operación de datos de ocho bits (0=paridad impar; 1=paridad par).
•CF (acarreo): Contiene el acarreo de los bits de mayor orden después de una operación aritmética; también almacena el contenido del
último bit en una operación de corrimiento o de rotación.
Modos de Direccionamiento de Datos
Direccionamiento por Registro : Transfiere el contenido de un registro a otro del mismo tamaño.
                                            MOV AX,BX


Direccionamiento Inmediato : Transfiere el dato que sigue al código de operación al registro
especificado.
                                           MOV AX,3456H


Direccionamiento Directo: Se suma el desplazamiento dado al segmento de datos
                      MOV AX,1234H ; Acá 1234H es una dirección de memoria,


Direccionamiento indirecto por registro:          Transfiere un dato entre un registro y una dirección
de memoria direccionada por un registro.

                                            MOV AL,[SI]
Calculo de direcciones de memoria
El 8086 tiene un bus de direcciones de 20bita. Por tanto un solo registro no tiene
la capacidad de representar 20bits ya que los registros son de 16 bits.

Cada dirección de memoria se divide en 2 partes. El segmento y el
desplazamiento. La notación en Hex sería algo así SSSS:DDDD

La manera de calcular una dirección real de memoria es correr el registro de
segmento 4bits a la izquierda y luego sumarle el desplazamiento.

EJ: 2A54:0022
Al desplazar el segmento 4 bit a la izquierda, nos quedaría
     2A540
Luego
2A540
+0022
______
2A562 Hex

De esta manera obtendremos la direccion absoluta de memoria.
Note que el resultado es de 20 bits
Interrupciones
Es un mecanismo de transferencia de control, básicamente ocasiona que la CPU
detenga su ejecución del programa actual y transfiera el control a una rutina de
servicio.

Al terminar de ejecutar la interrupción, el CPU continua con los procesos que se
estaban ejecutando antes de la interrupción.

Básicamente existen 2 tipos de interrupciones:
    –De hardware
    –De software
•Las interrupciones de hardware son asincronas, es decir, pueden ocurrir en
cualquier momento y no están bajo el control del programa.
•Las interrupciones de Software, pueden invocarse a voluntad y son controladas
por el programa en forma sincronica (es decir, se conoce todo lo relacionado con
su ejecucion ya que el programa controla el momento y la manera en que son
invocadas)
Interrupciones
Int 21h

Verifica si existe una tecla a ser procesada

Ejemplo:

Funcion 09H
Envía una cadena de caracteres al dispositivo de salida estándar STDOUT.
         AH = 09H
         DS:DX = Apuntador a una cadena de caracteres terminada con el simbolo
$
Interrupciones
Int 16h

Lee un carácter del teclado



Ejemplo:

Funcion 00H
Envía una cadena de caracteres al dispositivo de salida estándar STDOUT.
         llamada AH = 00H
         Retorno AH= Código de escaneo del teclado
                   AL= Valor ASCII del carácter
Ejemplo de llamada
                                    Mov AH,0
                                      Int 16h
Variantes permisibles de la instrucción mov
1. Mov    registro, registro
2. Mov    registro, memoria
3. Mov    memoria, registro
4. Mov    memoria, valor inmediato
5. Mov    registro, valor inmediato
6. Mov    memoria, acumulador
7. Mov    acumulador, memoria
8. Mov    Registro de segmento, memoria
9. Mov    registro, registro de segmento
10. Mov   registro de segmento, memoria
11. Mov   memoria, registro de segmento
Instrucción Xlat
Xlat es una instrucción que se utiliza para trabajar con tablas (o
    arreglos). Se utilizan los registros AL y BX.
La instrucción xlat reemplaza el valor de AL por un nuevo valor
    tomado de la tabla y el registro BX contiene la dirección del
    primer elemento de la tabla.
Ejemplo:
Tabla DB ‘ABCEDEFGHIJK’
….
Mov Bx, Offset Tabla
Mov AL, 3
Mov DL,AL ; Prepara dato para mostrar por pantalla
Mov AH,2 ; Función 2 de la int 21h. Donde DL debe tener
carácter a desplegar.
Int 21h
; Se muestra por pantalla el tercer carácter de la tabla
Instrucción Loop
Loop es una instrucción cuya función es realizar un bucle.
   trabaja en conjunto con el registro CX, donde “cx”
   contiene el numero de repeticiones que se debe realizar.

Mov CX,5
Mov Ax,1
Programa:
            add ax,1
            loop Programa
Rutinas, saltos
Las rutinas son secuencias o bloques de código que pueden
    reutilizarse. Estas rutinas son invocadas por la instrucción
    CALL.

Existen dos tipos de instrucciones de salto o alteración del flujo
    de ejecución.

La instrucción jmp altera el flujo de ejecución enviando el
    control en forma incondicional a la dirección indicada.
Las instrucciones de salto condicional basan su bifurcación en el
    estatus que tengan ciertas banderas del registro
    correspondiente. Ejemplo.. Jnz (salta si el resultado es <> 0)
    y jz (salta si el resultado es cero)
Ejemplo de Rutinas
. .model small
.data
.stack
.code


Inicio:
  mov cx,5
  call ciclo
  mov ah,0
  int 16h
ciclo:
  add al,1
  loop ciclo
  ret


End inici
Ejemplo de Saltos
.model small
.data
.stack
.code


Inicio:
  mov cx,5
  cmp cx,5     ;Compara Operando 1 y operando 2, si son iguales retorna 0
  jz ciclo     ;Si la bandera es Cero salta a la rutina indicada



ciclo:
  add al,1
  loop ciclo
  mov ah,0
  int 16h


End inicio

Mais conteúdo relacionado

Mais procurados

Método de Búsqueda Hash
Método de Búsqueda HashMétodo de Búsqueda Hash
Método de Búsqueda HashBlanca Parra
 
Traductores de lenguajes de programación
Traductores de lenguajes de programaciónTraductores de lenguajes de programación
Traductores de lenguajes de programaciónDaniela Brignolo
 
Ejercicio sql tienda informatica (1)
Ejercicio sql tienda informatica (1)Ejercicio sql tienda informatica (1)
Ejercicio sql tienda informatica (1)Jsrfs Montemayor
 
Unidad III procedimientos
Unidad III procedimientosUnidad III procedimientos
Unidad III procedimientosaaronastorga4
 
Arquitectura de Von Neumann
Arquitectura de Von NeumannArquitectura de Von Neumann
Arquitectura de Von Neumannvictor medra
 
Programación Orientada a Objetos - atributos y métodos
Programación Orientada a Objetos - atributos y métodosProgramación Orientada a Objetos - atributos y métodos
Programación Orientada a Objetos - atributos y métodosAlvaro Enrique Ruano
 
Dispositvos de entrada y salida
Dispositvos de entrada y salidaDispositvos de entrada y salida
Dispositvos de entrada y salidaitzayana bacilio
 
Tópicos Avanzados de Programación - Unidad 2 componentes y librerias
Tópicos Avanzados de Programación - Unidad 2 componentes y libreriasTópicos Avanzados de Programación - Unidad 2 componentes y librerias
Tópicos Avanzados de Programación - Unidad 2 componentes y libreriasJosé Antonio Sandoval Acosta
 
Estructura del sistema operativo windows
Estructura del sistema operativo windowsEstructura del sistema operativo windows
Estructura del sistema operativo windowsomfib123
 
Automatas Finitos Deterministicos y No Deterministicos
Automatas Finitos Deterministicos y No DeterministicosAutomatas Finitos Deterministicos y No Deterministicos
Automatas Finitos Deterministicos y No DeterministicosRosviannis Barreiro
 
Generador de codigo intermedio
Generador de codigo intermedioGenerador de codigo intermedio
Generador de codigo intermedioGuillermo
 
Analizador Sintáctico
Analizador SintácticoAnalizador Sintáctico
Analizador SintácticoPablo Guerra
 
Portafolio Lenguajes y Autómatas Unidad 1
Portafolio Lenguajes y Autómatas Unidad 1Portafolio Lenguajes y Autómatas Unidad 1
Portafolio Lenguajes y Autómatas Unidad 1Humano Terricola
 
Lenguajes de interfaz
Lenguajes de interfazLenguajes de interfaz
Lenguajes de interfazXavi Flores
 
Modelos de arquitecturas de computadoras
Modelos de arquitecturas de computadorasModelos de arquitecturas de computadoras
Modelos de arquitecturas de computadorasYESENIA CETINA
 

Mais procurados (20)

Traductor y su estructura
Traductor y su estructuraTraductor y su estructura
Traductor y su estructura
 
Método de Búsqueda Hash
Método de Búsqueda HashMétodo de Búsqueda Hash
Método de Búsqueda Hash
 
UNIDAD 1 INTRODUCCIÓN AL LENGUAJE ENSAMBLADOR
UNIDAD 1 INTRODUCCIÓN AL LENGUAJE ENSAMBLADORUNIDAD 1 INTRODUCCIÓN AL LENGUAJE ENSAMBLADOR
UNIDAD 1 INTRODUCCIÓN AL LENGUAJE ENSAMBLADOR
 
Traductores de lenguajes de programación
Traductores de lenguajes de programaciónTraductores de lenguajes de programación
Traductores de lenguajes de programación
 
Ejercicio sql tienda informatica (1)
Ejercicio sql tienda informatica (1)Ejercicio sql tienda informatica (1)
Ejercicio sql tienda informatica (1)
 
Unidad III procedimientos
Unidad III procedimientosUnidad III procedimientos
Unidad III procedimientos
 
Arquitectura de Von Neumann
Arquitectura de Von NeumannArquitectura de Von Neumann
Arquitectura de Von Neumann
 
Programación Orientada a Objetos - atributos y métodos
Programación Orientada a Objetos - atributos y métodosProgramación Orientada a Objetos - atributos y métodos
Programación Orientada a Objetos - atributos y métodos
 
Dispositvos de entrada y salida
Dispositvos de entrada y salidaDispositvos de entrada y salida
Dispositvos de entrada y salida
 
Tópicos Avanzados de Programación - Unidad 2 componentes y librerias
Tópicos Avanzados de Programación - Unidad 2 componentes y libreriasTópicos Avanzados de Programación - Unidad 2 componentes y librerias
Tópicos Avanzados de Programación - Unidad 2 componentes y librerias
 
Estructura del sistema operativo windows
Estructura del sistema operativo windowsEstructura del sistema operativo windows
Estructura del sistema operativo windows
 
Interrupciones
InterrupcionesInterrupciones
Interrupciones
 
Automatas Finitos Deterministicos y No Deterministicos
Automatas Finitos Deterministicos y No DeterministicosAutomatas Finitos Deterministicos y No Deterministicos
Automatas Finitos Deterministicos y No Deterministicos
 
Expresiones regulares
Expresiones regularesExpresiones regulares
Expresiones regulares
 
Generador de codigo intermedio
Generador de codigo intermedioGenerador de codigo intermedio
Generador de codigo intermedio
 
Analizador Sintáctico
Analizador SintácticoAnalizador Sintáctico
Analizador Sintáctico
 
Portafolio Lenguajes y Autómatas Unidad 1
Portafolio Lenguajes y Autómatas Unidad 1Portafolio Lenguajes y Autómatas Unidad 1
Portafolio Lenguajes y Autómatas Unidad 1
 
UNIDAD 2 PROGRAMACIÓN BASICA
UNIDAD 2 PROGRAMACIÓN BASICAUNIDAD 2 PROGRAMACIÓN BASICA
UNIDAD 2 PROGRAMACIÓN BASICA
 
Lenguajes de interfaz
Lenguajes de interfazLenguajes de interfaz
Lenguajes de interfaz
 
Modelos de arquitecturas de computadoras
Modelos de arquitecturas de computadorasModelos de arquitecturas de computadoras
Modelos de arquitecturas de computadoras
 

Semelhante a Lenguaje ensamblador basico

Semelhante a Lenguaje ensamblador basico (20)

Tutorial ensamblador
Tutorial ensambladorTutorial ensamblador
Tutorial ensamblador
 
Unidad I.pdf
Unidad I.pdfUnidad I.pdf
Unidad I.pdf
 
Lenguaje ensamblador
Lenguaje ensambladorLenguaje ensamblador
Lenguaje ensamblador
 
Clase10 2-lenguaje ensamblador
Clase10 2-lenguaje ensambladorClase10 2-lenguaje ensamblador
Clase10 2-lenguaje ensamblador
 
Emsamblador
EmsambladorEmsamblador
Emsamblador
 
asm_mododir2.pdf
asm_mododir2.pdfasm_mododir2.pdf
asm_mododir2.pdf
 
Asm mododir2
Asm mododir2Asm mododir2
Asm mododir2
 
Esamblador8086
Esamblador8086Esamblador8086
Esamblador8086
 
Registros del procesador 01
Registros del procesador 01Registros del procesador 01
Registros del procesador 01
 
Registros del procesador
Registros del procesadorRegistros del procesador
Registros del procesador
 
Unidadi. lenguajes de interfaz
Unidadi.   lenguajes de interfazUnidadi.   lenguajes de interfaz
Unidadi. lenguajes de interfaz
 
Registros ensayo
Registros ensayoRegistros ensayo
Registros ensayo
 
Programacion Lenguaje Assembler 25 10 07
Programacion Lenguaje Assembler 25 10 07Programacion Lenguaje Assembler 25 10 07
Programacion Lenguaje Assembler 25 10 07
 
El Microprocesador Y Su Arquitectura
El Microprocesador Y Su ArquitecturaEl Microprocesador Y Su Arquitectura
El Microprocesador Y Su Arquitectura
 
Lenguaje ensamblador y Estructura del CPU
Lenguaje ensamblador y Estructura del CPULenguaje ensamblador y Estructura del CPU
Lenguaje ensamblador y Estructura del CPU
 
Registros
RegistrosRegistros
Registros
 
Registros
RegistrosRegistros
Registros
 
Microprocesadores
MicroprocesadoresMicroprocesadores
Microprocesadores
 
Definición de registro de procesador
Definición de registro de procesadorDefinición de registro de procesador
Definición de registro de procesador
 
Lenguaje ensamblador
Lenguaje ensambladorLenguaje ensamblador
Lenguaje ensamblador
 

Mais de Gustavo Davila

Enlazadores cargadores-by-gadd
Enlazadores cargadores-by-gaddEnlazadores cargadores-by-gadd
Enlazadores cargadores-by-gaddGustavo Davila
 
Unidad 3 ensambladores
Unidad 3 ensambladoresUnidad 3 ensambladores
Unidad 3 ensambladoresGustavo Davila
 
Recursos educativo abiertos para sistema de computación
Recursos educativo abiertos para sistema de computaciónRecursos educativo abiertos para sistema de computación
Recursos educativo abiertos para sistema de computaciónGustavo Davila
 
Camtasia getting started guide
Camtasia getting started guideCamtasia getting started guide
Camtasia getting started guideGustavo Davila
 
Arquitectura del Computador
Arquitectura del ComputadorArquitectura del Computador
Arquitectura del ComputadorGustavo Davila
 
Bloque pacie-by-gustavo-davila
Bloque pacie-by-gustavo-davilaBloque pacie-by-gustavo-davila
Bloque pacie-by-gustavo-davilaGustavo Davila
 

Mais de Gustavo Davila (10)

Enlazadores cargadores-by-gadd
Enlazadores cargadores-by-gaddEnlazadores cargadores-by-gadd
Enlazadores cargadores-by-gadd
 
Unidad 3 ensambladores
Unidad 3 ensambladoresUnidad 3 ensambladores
Unidad 3 ensambladores
 
Recursos educativo abiertos para sistema de computación
Recursos educativo abiertos para sistema de computaciónRecursos educativo abiertos para sistema de computación
Recursos educativo abiertos para sistema de computación
 
Camtasia getting started guide
Camtasia getting started guideCamtasia getting started guide
Camtasia getting started guide
 
Manejo de archivo
Manejo de archivoManejo de archivo
Manejo de archivo
 
Risc y Cisc
Risc y CiscRisc y Cisc
Risc y Cisc
 
Sistema Númerico
Sistema NúmericoSistema Númerico
Sistema Númerico
 
Arquitectura del Computador
Arquitectura del ComputadorArquitectura del Computador
Arquitectura del Computador
 
Bloque pacie-by-gustavo-davila
Bloque pacie-by-gustavo-davilaBloque pacie-by-gustavo-davila
Bloque pacie-by-gustavo-davila
 
Slideshare grupo-i
Slideshare grupo-iSlideshare grupo-i
Slideshare grupo-i
 

Lenguaje ensamblador basico

  • 2. Que es? El ensamblador es una variante legible para el ser humano del lenguaje de maquina que usan las computadoras. Este lenguaje le da la facilidad y las herramientas necesarias para tomar el control de todo el PC. El lenguaje ensamblador, o assembler (assembly language en inglés) es un lenguaje de programación de bajo nivel para los computadores, y otros circuitos integrados programables. El término ensamblador (del inglés assembler) se refiere a un tipo de programa informático que se encarga de traducir un fichero fuente escrito en un lenguaje ensamblador, a un fichero objeto que contiene código máquina,
  • 3. Que es? Se dice que existe una relación 1:1 entre el lenguaje de maquina y el lenguaje ensamblador. Por tanto, El Lenguaje Ensamblador es directamente traducible al Lenguaje de Máquina, y viceversa. Por otro lado, la computadora no entiende directamente al Lenguaje Ensamblador; es necesario traducirle a Lenguaje de Máquina. Cuando creamos un programa en assembler, la extensión del programa lo guardamos como ASM. Este archivo no lo entiende la Pc, por tanto se hace necesario traducir el programa para obtener un OBJ, este último archivo “obj” contiene lenguaje de maquina que si puede interpretar el ordenador. Cabe resaltar que el lenguaje assembler va a depender del hardware. Es decir, para la arquitectura de la familia Intel, el lenguaje ensamblador cambiará con respecto a la arquitectura de la familia motorola.
  • 4. Ventajas del lenguaje ensamblador? Proporciona un control absoluto sobre la PC. Permite implementar software o hardware de una manera más consciente. Sabemos el porque y el para que. Se conserva el control total de lo que debe hacer el PC, siempre y cuando sea físicamente capaz de hacer o ejecutar la tarea. Los programas creados en lenguaje ensamblador son más compactos y sobre todo más rápidos en comparación con otros lenguajes de alto nivel. Para un programa que muestre la cadena “Hola, mundo !!!!” Lenguaje Fuente Objeto Ejecutable (.exe) Basic 27 bytes 651 bytes 12814 bytes Ensamblador 162 bytes 169 bytes 543 bytes
  • 5. Estructura De Un Programa En Ensamblador Un programa en el lenguaje ensamblador consiste de una secuencia de proposiciones, una en cada línea del código fuente. La sintaxis de una proposición es la siguiente: [etiqueta] [instrucción|directiva [operandos]] [;comentario] donde etiqueta, instrucción|directiva, operandos, comentario son los campos de la proposición. Los campos se separan por caracteres blancos: caracteres de espacio y/o de tabulación. Todos los campos son opcionales, pero el campo operandos sólo pueden estar presente si existe el campo instrucción|directiva. etiqueta es un nombre simbólico empleado para referirse a números, cadenas de caracteres o localidades de memoria dentro de un programa. Las etiquetas permiten darle nombre a las variables, constantes y localidades de una instrucción particular. Inicio: mov ds,ax ; comentario
  • 6. Estructura De Un Programa En Ensamblador Un programa en el lenguaje ensamblador consiste de una secuencia de proposiciones, una en cada línea del código fuente. La sintaxis de una proposición es la siguiente: [etiqueta] [instrucción|directiva [operandos]] [;comentario] donde etiqueta, instrucción|directiva, operandos, comentario son los campos de la proposición. Los campos se separan por caracteres blancos: caracteres de espacio y/o de tabulación. Todos los campos son opcionales, pero el campo operandos sólo pueden estar presente si existe el campo instrucción|directiva. etiqueta es un nombre simbólico empleado para referirse a números, cadenas de caracteres o localidades de memoria dentro de un programa. Las etiquetas permiten darle nombre a las variables, constantes y localidades de una instrucción particular. instrucción es un mnemónico de una instrucción del procesador. Cada instrucción se traduce directamente a una instrucción del lenguaje máquina del microprocesador. Operandos consiste de cero, uno o más operandos. Un operando le especifica al ensamblador qué valor, registro, localidad de memoria, etc., asociar con cada instrucción. operandos consiste de cero, uno o más operandos. Un operando le especifica al ensamblador qué valor, registro, localidad de memoria, etc., asociar con cada instrucción. Inicio: mov ds,ax ; comentario
  • 7. Palabras Reservadas Las palabras reservadas son para uso estricto del ensamblador. Éstas incluyen a los operadores, directivas y símbolos predefinidos. Estas palabras no pueden usarse como identificadores. Algunas de ellas son
  • 8. Inicio de un programa en ensamblador para el 8086 model : Esta es una directiva, que selecciona uno de los 6 modos diferentes que tiene Turbo Assenbler de generar el código de un programa dependiendo del tamaño que tiene el código y los datos. Los seis modelos son Pequeñito (tiny), pequeño (small), medio (medium), compacto (compact), grande (large) y extenso (huge). stack Esta directiva reserva espacio de memoria para la pila del programa, un área de memoria que almacena valores temporales empleados por las subrutinas y las direcciones de regreso de las subrutinas.
  • 9. Inicio de un programa en ensamblador para el 8086 Variables del programa Las variables de un programa se declaran en el segmento de datos, por lo que la sección de declaración de variables empieza con la directiva dataseg. Esta directiva le indica a Turbo Assembler que almacene las variables en el segmento de datos del programa. Las variables pueden estar inicializadas o no. Los valores de las variables inicializadas se almacenan en el código del programa y se cargan en las variables al ejecutar el programa. Para declarar variables podemos utilizar las directivas db, dw, dd o dq. La directiva db define una variable de un byte, la directiva dw define una variable de tipo palabra (dos bytes), la directiva dd define una variable de tipo palabra doble (cuatro bytes) y la directiva dq define una variable de tipo palabra cuádruple (ocho bytes). La sintaxis de estas directivas son: nomVar db exp nomVar dw exp nomVar dd exp nomVar dq exp
  • 10. Ejemplo de Codigo assembler .model small .data mens db 'hola que tal!.$' .stack .code EMP: mov ax,@data mov ds,ax mov dx,offset mens mov ah,9 int 21h mov ah,4ch int 21h end EMP
  • 11. Registros del Micro-8086 En total maneja 14 registros distribuidos de la siguiente manera: Registro de propósito general AX (16 bits): El registro AX es el registro acumulador, es utilizado para operaciones que implican AL (8 bits) entrada/salida y la mayor parte de la aritmética. AH (8 bits) BX (16 bits): El registro BX es el registro base, y es el único registro de propósito general que BL (8 bits) puede ser un índice para direccionamiento indexado. También es común emplear el BX para cálculos. BH (8 bits) CX (16 bits): El registro CX es conocido como el registro contador. Puede contener un valor para CL (8 bits) controlar el número de veces que un ciclo se repite o un valor para corrimiento de bits. CH (8 bits) DX (16 bits): El registro DX es el registro de datos. Algunas operaciones de entrada/salida DL (8 bits) requieren su pulso, y las operaciones de multiplicación y división con cifras grandes suponen al DX y AX DH (8 bits) trabajando juntos.
  • 12. Registros del Micro-8086 Continuación… En total maneja 14 registros distribuidos de la siguiente manera: Registro de índice SI: El registro índice fuente u origen de 16 bits es requerido por algunas Índice operaciones con cadenas de caracteres. El SI está asociado con el registro DS. origen DI: El registro índice destino también es requerido por algunas operaciones con Índice cadenas de caracteres. El DI está asociado con el registro ES. destino BP: El apuntador base de 16 bits facilita la referencia de parámetros, los cuales Puntero a son datos y direcciones transmitidos vía la pila. base SP: El apuntador de pila de 16 bits está asociado con el registro SS y proporciona Puntero de un valor de desplazamiento que se refiere a la palabra actual que está siendo procesada en la pila. El sistema maneja de manera automática este registro. pila
  • 13. Registros del Micro-8086 Continuación… En total maneja 14 registros distribuidos de la siguiente manera: Registro de Segmento CS: El DOS almacena la dirección inicial del segmento de código de un programa en el Segmento de código registro CS. DS: La dirección inicial de un segmento de datos de programa es almacenada en el registro Segmento de dato DS. ES: Algunas operaciones con cadenas de caracteres utilizan el registro extra de segmento Segmento Extra para manejar el direccionamiento de memoria. SS: El registro SS permite la colocación en memoria de una pila, para almacenamiento Segmento de pila temporal de direcciones y datos.
  • 14. Registros del Micro-8086 Continuación… En total maneja 14 registros distribuidos de la siguiente manera: Registro apuntador de instrucciones IP Apuntador de instrucciones IP: El registro IP de 16 bits contiene el desplazamiento de dirección de la siguiente instrucción que se ejecuta
  • 15. Registros del Micro-8086 En total maneja 14 registros distribuidos de la siguiente manera: Registro de Bandera - - - - O D I T S Z - A - P - C •OF (overflow, desbordamiento): Indica desbordamiento del bit de mayor orden después de una operación aritmética de números signados (1=existe overflow; 0=no existe overflow). Para operaciones sin signo, no se toma en cuenta esta bandera •DF (dirección): Controla la selección de incremento o decremento de los registros SI o DI en las operaciones con cadenas de caracteres (1=decremento automático; 0=incremento). La bandera DF se controla con las instrucciones STD y CLD. •IF (interrupción): Indica que una interrupción externa sea procesada o ignorada (1=habilita la interrupción; 0=deshabilita la interrupción). El estado de la bandera IF se controla con las instrucciones STI y CLI. •TF (trampa): Permite la operación del procesador en modo de depuración (paso a paso) •SF (signo): Contiene el signo resultante de una operación aritmética (0=positivo; 1=negativo). •ZF (cero): Indica el resultado de una operación aritmética o de comparación (0=resultado diferente de cero; 1=resultado igual a cero). •ZF (cero): Indica el resultado de una operación aritmética o de comparación (0=resultado diferente de cero; 1=resultado igual a cero). •PF (paridad): Indica paridad par o impar en una operación de datos de ocho bits (0=paridad impar; 1=paridad par). •CF (acarreo): Contiene el acarreo de los bits de mayor orden después de una operación aritmética; también almacena el contenido del último bit en una operación de corrimiento o de rotación.
  • 16. Modos de Direccionamiento de Datos Direccionamiento por Registro : Transfiere el contenido de un registro a otro del mismo tamaño. MOV AX,BX Direccionamiento Inmediato : Transfiere el dato que sigue al código de operación al registro especificado. MOV AX,3456H Direccionamiento Directo: Se suma el desplazamiento dado al segmento de datos MOV AX,1234H ; Acá 1234H es una dirección de memoria, Direccionamiento indirecto por registro: Transfiere un dato entre un registro y una dirección de memoria direccionada por un registro. MOV AL,[SI]
  • 17. Calculo de direcciones de memoria El 8086 tiene un bus de direcciones de 20bita. Por tanto un solo registro no tiene la capacidad de representar 20bits ya que los registros son de 16 bits. Cada dirección de memoria se divide en 2 partes. El segmento y el desplazamiento. La notación en Hex sería algo así SSSS:DDDD La manera de calcular una dirección real de memoria es correr el registro de segmento 4bits a la izquierda y luego sumarle el desplazamiento. EJ: 2A54:0022 Al desplazar el segmento 4 bit a la izquierda, nos quedaría 2A540 Luego 2A540 +0022 ______ 2A562 Hex De esta manera obtendremos la direccion absoluta de memoria. Note que el resultado es de 20 bits
  • 18. Interrupciones Es un mecanismo de transferencia de control, básicamente ocasiona que la CPU detenga su ejecución del programa actual y transfiera el control a una rutina de servicio. Al terminar de ejecutar la interrupción, el CPU continua con los procesos que se estaban ejecutando antes de la interrupción. Básicamente existen 2 tipos de interrupciones: –De hardware –De software •Las interrupciones de hardware son asincronas, es decir, pueden ocurrir en cualquier momento y no están bajo el control del programa. •Las interrupciones de Software, pueden invocarse a voluntad y son controladas por el programa en forma sincronica (es decir, se conoce todo lo relacionado con su ejecucion ya que el programa controla el momento y la manera en que son invocadas)
  • 19. Interrupciones Int 21h Verifica si existe una tecla a ser procesada Ejemplo: Funcion 09H Envía una cadena de caracteres al dispositivo de salida estándar STDOUT. AH = 09H DS:DX = Apuntador a una cadena de caracteres terminada con el simbolo $
  • 20. Interrupciones Int 16h Lee un carácter del teclado Ejemplo: Funcion 00H Envía una cadena de caracteres al dispositivo de salida estándar STDOUT. llamada AH = 00H Retorno AH= Código de escaneo del teclado AL= Valor ASCII del carácter Ejemplo de llamada Mov AH,0 Int 16h
  • 21. Variantes permisibles de la instrucción mov 1. Mov registro, registro 2. Mov registro, memoria 3. Mov memoria, registro 4. Mov memoria, valor inmediato 5. Mov registro, valor inmediato 6. Mov memoria, acumulador 7. Mov acumulador, memoria 8. Mov Registro de segmento, memoria 9. Mov registro, registro de segmento 10. Mov registro de segmento, memoria 11. Mov memoria, registro de segmento
  • 22. Instrucción Xlat Xlat es una instrucción que se utiliza para trabajar con tablas (o arreglos). Se utilizan los registros AL y BX. La instrucción xlat reemplaza el valor de AL por un nuevo valor tomado de la tabla y el registro BX contiene la dirección del primer elemento de la tabla. Ejemplo: Tabla DB ‘ABCEDEFGHIJK’ …. Mov Bx, Offset Tabla Mov AL, 3 Mov DL,AL ; Prepara dato para mostrar por pantalla Mov AH,2 ; Función 2 de la int 21h. Donde DL debe tener carácter a desplegar. Int 21h ; Se muestra por pantalla el tercer carácter de la tabla
  • 23. Instrucción Loop Loop es una instrucción cuya función es realizar un bucle. trabaja en conjunto con el registro CX, donde “cx” contiene el numero de repeticiones que se debe realizar. Mov CX,5 Mov Ax,1 Programa: add ax,1 loop Programa
  • 24. Rutinas, saltos Las rutinas son secuencias o bloques de código que pueden reutilizarse. Estas rutinas son invocadas por la instrucción CALL. Existen dos tipos de instrucciones de salto o alteración del flujo de ejecución. La instrucción jmp altera el flujo de ejecución enviando el control en forma incondicional a la dirección indicada. Las instrucciones de salto condicional basan su bifurcación en el estatus que tengan ciertas banderas del registro correspondiente. Ejemplo.. Jnz (salta si el resultado es <> 0) y jz (salta si el resultado es cero)
  • 25. Ejemplo de Rutinas . .model small .data .stack .code Inicio: mov cx,5 call ciclo mov ah,0 int 16h ciclo: add al,1 loop ciclo ret End inici
  • 26. Ejemplo de Saltos .model small .data .stack .code Inicio: mov cx,5 cmp cx,5 ;Compara Operando 1 y operando 2, si son iguales retorna 0 jz ciclo ;Si la bandera es Cero salta a la rutina indicada ciclo: add al,1 loop ciclo mov ah,0 int 16h End inicio