Your SlideShare is downloading. ×
Lenguaje ensamblador basico
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Lenguaje ensamblador basico

7,781
views

Published on


0 Comments
6 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
7,781
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
307
Comments
0
Likes
6
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Lenguaje ensamblador
  • 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 EnsambladorUn programa en el lenguaje ensamblador consiste de una secuencia de proposiciones, una en cadalí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 loscampos son opcionales, pero el campo operandos sólo pueden estar presente si existe el campoinstrucción|directiva.etiqueta es un nombre simbólico empleado para referirse a números, cadenas de caracteres olocalidades 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 traducedirectamente 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 generalAX (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 SegmentoCS: El DOS almacena la dirección inicial del segmento de código de un programa en el Segmento de códigoregistro CS.DS: La dirección inicial de un segmento de datos de programa es almacenada en el registro Segmento de datoDS.ES: Algunas operaciones con cadenas de caracteres utilizan el registro extra de segmento Segmento Extrapara manejar el direccionamiento de memoria.SS: El registro SS permite la colocación en memoria de una pila, para almacenamiento Segmento de pilatemporal 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úmerossignados (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 lainterrupció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 DatosDireccionamiento por Registro : Transfiere el contenido de un registro a otro del mismo tamaño. MOV AX,BXDireccionamiento Inmediato : Transfiere el dato que sigue al código de operación al registroespecificado. MOV AX,3456HDireccionamiento 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ónde memoria direccionada por un registro. MOV AL,[SI]
  • 17. Calculo de direcciones de memoriaEl 8086 tiene un bus de direcciones de 20bita. Por tanto un solo registro no tienela 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 eldesplazamiento. La notación en Hex sería algo así SSSS:DDDDLa manera de calcular una dirección real de memoria es correr el registro desegmento 4bits a la izquierda y luego sumarle el desplazamiento.EJ: 2A54:0022Al desplazar el segmento 4 bit a la izquierda, nos quedaría 2A540Luego2A540+0022______2A562 HexDe esta manera obtendremos la direccion absoluta de memoria.Note que el resultado es de 20 bits
  • 18. InterrupcionesEs un mecanismo de transferencia de control, básicamente ocasiona que la CPUdetenga su ejecución del programa actual y transfiera el control a una rutina deservicio.Al terminar de ejecutar la interrupción, el CPU continua con los procesos que seestaban 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 encualquier momento y no están bajo el control del programa.•Las interrupciones de Software, pueden invocarse a voluntad y son controladaspor el programa en forma sincronica (es decir, se conoce todo lo relacionado consu ejecucion ya que el programa controla el momento y la manera en que soninvocadas)
  • 19. InterrupcionesInt 21hVerifica si existe una tecla a ser procesadaEjemplo:Funcion 09HEnví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. InterrupcionesInt 16hLee un carácter del tecladoEjemplo:Funcion 00HEnví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ácterEjemplo de llamada Mov AH,0 Int 16h
  • 21. Variantes permisibles de la instrucción mov1. Mov registro, registro2. Mov registro, memoria3. Mov memoria, registro4. Mov memoria, valor inmediato5. Mov registro, valor inmediato6. Mov memoria, acumulador7. Mov acumulador, memoria8. Mov Registro de segmento, memoria9. Mov registro, registro de segmento10. Mov registro de segmento, memoria11. Mov memoria, registro de segmento
  • 22. Instrucción XlatXlat 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 TablaMov AL, 3Mov DL,AL ; Prepara dato para mostrar por pantallaMov AH,2 ; Función 2 de la int 21h. Donde DL debe tenercarácter a desplegar.Int 21h; Se muestra por pantalla el tercer carácter de la tabla
  • 23. Instrucción LoopLoop 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,5Mov Ax,1Programa: add ax,1 loop Programa
  • 24. Rutinas, saltosLas 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.codeInicio: mov cx,5 call ciclo mov ah,0 int 16hciclo: add al,1 loop ciclo retEnd inici
  • 26. Ejemplo de Saltos.model small.data.stack.codeInicio: 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 indicadaciclo: add al,1 loop ciclo mov ah,0 int 16hEnd inicio