Vous êtes sur la page 1sur 42

Lenguaje Ensamblador

lenguaje de maquina
HAEDERS SALDARRIAGA VILLAFAE

Universidad del valle sede Buga


6/13/2010 Ing_haeders@hotmail.com

INTRODUCCIN
Todo procesador, grande o pequeo, desde el de una calculadora hasta el de un supercomputador, ya sea de propsito general o especfico, posee un lenguaje nico que es capaz de reconocer y ejecutar. Este lenguaje ha sido denominado Lenguaje de Mquina y ms que ser propio de un computador pertenece a su microprocesador. El lenguaje de mquina est compuesto por una serie de instrucciones, que son las nicas que pueden ser reconocidas y ejecutadas por el microprocesador. 6/13/2010 Ing_haeders@hotmail.com

Lenguaje Ensamblador
Lenguaje Mquina: Propio del computador, basado en el sistema binario. Lenguaje Ensamblador: La primera abstraccin del Lenguaje de Mquina , consistente en asociar a los opcodes palabras clave que faciliten su uso por parte del programador.

6/13/2010

Ing_haeders@hotmail.com

Lenguaje Ensamblador

VENTAJAS: Velocidad Eficiencia de Tamao Flexibilidad

6/13/2010

Ing_haeders@hotmail.com

Lenguaje Ensamblador
DESVENTAJAS: Tiempo de Programacin Programas Fuentes Grandes Peligro al Afectar Recursos inesperadamente Falta de portabilidad

6/13/2010

Ing_haeders@hotmail.com

Lenguaje Ensamblador
Relacin del lenguaje ensamblador con los componentes internos del procesador: Memoria Unidad aritmtico-lgica Unidad de control Bus interno

6/13/2010

Ing_haeders@hotmail.com

Lenguaje Ensamblador
Funcionamiento interno (ejecucin de un programa) Para que un microprocesador ejecute un programa es necesario que ste haya sido ensamblado, enlazado y cargado en memoria. 1.- Extrae de la memoria. 2.- Cambia el registro apuntador de instrucciones (IP). 3.- Determina el tipo de instruccin que acaba de extraer. 4.- Verifica. 5.- Extrae los datos. 6.- Ejecuta la instruccin. 7.- Almacena. 8.- Regresa al paso 1.
6/13/2010 Ing_haeders@hotmail.com

Lenguaje Ensamblador
Registros de uso General: AX Registro acumulador BX Registro base CX Registro contador DX Registro de datos

6/13/2010

Ing_haeders@hotmail.com

Lenguaje Ensamblador
Registro de segmentos: CS (segmento de cdigo) DS (segmento de datos) SS (segmento de pila) ES (segmento extra)

6/13/2010

Ing_haeders@hotmail.com

Lenguaje Ensamblador
Registros de punteros de pila: SP (puntero de pila) BP (puntero base) Registros de ndices: SI (source index) DI (destination index) Registro puntero de instrucciones: IP (instruction pointer)
6/13/2010 Ing_haeders@hotmail.com

Lenguaje Ensamblador
Registros de Banderas: Banderas de Estado: CF (carry flag, bit 0) OF (overflow flag, bit 11) PF (parity flag, bit 2) AF (auxilary carry flag, bit 4) ZF (zero flag, bit 6) SF (sign flag, bit 7)
6/13/2010 Ing_haeders@hotmail.com

Lenguaje Ensamblador

Banderas de control: Registran el funcionamiento del procesador TF (trap flag, bit 8) IF (interrupt flag, bit 9) DF (direction flag, bit 10)
6/13/2010 Ing_haeders@hotmail.com

Lenguaje Ensamblador
Estructura y Sintaxis: Sintaxis Cuatro campos sintaxis de una lnea en ensamblador:
[etiqueta] nombre_instruccin [operandos] [comentario]

6/13/2010

Ing_haeders@hotmail.com

Lenguaje Ensamblador
Estructura y Sintaxis: Etiqueta: 31 caracteres (a-z, 0-9) (@ _ . $) NEAR (:) FAR ( )

6/13/2010

Ing_haeders@hotmail.com

Lenguaje Ensamblador
Estructura y Sintaxis: Nombre: Contiene el mnemnico de las instrucciones. MOV (Transferencia) XCHG (Intercambiar) POP (Extrae de la pila) PUSH (Introduce en la pila) CALL (llamada a subrutina)
6/13/2010 Ing_haeders@hotmail.com

Lenguaje Ensamblador
JMP (salto) INT (interrupcin) IN (entrada) OUT (salida)

6/13/2010

Ing_haeders@hotmail.com

Lenguaje Ensamblador
Instrucciones Aritmticas ADD (suma) SUB (resta) MUL (multiplicacin sin signo ) DIV (divisin sin signo) IMUL (multiplicacin con signo) IDIV (divisin con signo) INC (incremento unitario) DEC (decremento unitario)
6/13/2010 Ing_haeders@hotmail.com

Lenguaje Ensamblador
Campo de operando: Implican la operacin. mov ax, es:[di] --> ax destino es:[di] origen. Campo de comentarios: Hace mas comprensivo el programa Inicia despus de ; .comment // varias lneas.
6/13/2010 Ing_haeders@hotmail.com

Lenguaje Ensamblador
El siguiente programa muestra la forma de utilizar las instrucciones bsicas: .COMMENT * Programa: Addsub.ASM Autor: Descripcin: Este programa ilustra el uso de las instrucciones ADD, SUB, INC y DEC. * .MODEL TINY .DATA Var1 DW 10 ;Declaracin de una variable de tipo entero ;dw reserva una palabra en memoria o dos bytes. ;inicializada con 10. 6/13/2010 Ing_haeders@hotmail.com .CODE ; begin

Lenguaje Ensamblador
Inicio: ;Punto de entrada al programa Mov AX,5 ;AX=5 Mov BX,10 ;BX=10 Add AX,BX ;AX=AX+BX Mov CX,8 ;CX=8 Add CX,Var1 ;CX=CX+Var1 Inc AX ;AX=AX+1 Dec BX ;BX=BX-1 Inc Var1 ;Var1=Var1+1 Dec Var1 ;Var1=Var1-1 Mov AX,4C00h ;Terminar programa y salir al DOS Int 21h ; llamada al sistema operativo END Inicio 6/13/2010 Ing_haeders@hotmail.com END

Lenguaje Ensamblador
.COMMENT* Programa: Mul.ASM Autor: Descripcin: Este programa ilustra el uso de las instrucciones MUL e IMUL. .MODEL TINY .DATA NUM1 dw 3 NUM2 db -5 .CODE INICIO: ;MULTIPLICACIN DE 8 BITS CON REGISTROS MOV BH,4 ; BH=4 MUL BH ; AX=AL*BH ;MULTIPLICACIN DE 16 BITS MOV AX,-3 ; AX=-3 MUL NUM1 ;DX:AX=AX*NUM2 ;MULTIPLICACIN DE 8 BITS CON VARIABLES MOV AL,3 ; AL=3 IMUL NUM2 ; AX=AL*NUM2 MOV AX,4c00h INT 21h END INICIO END
6/13/2010 Ing_haeders@hotmail.com

Lenguaje Ensamblador
.COMMENT * Programa: Trans1.ASM Autor: Descripcin: Este programa ilustra es uso de las operaciones para transferencia de datos. El programa realmente no hace nada que sea visible al usuario, es solo con fines ilustrativos. * .MODEL tiny .DATA Array1 db 10 dup (0) ;Arreglo de 10 elementos inicializados en cero. .CODE inicio: ;Punto de entrada al programa mov AX,10 ;Copiar el nmero 10 dentro de AX mov BX,5 ;Copiar le nmero 5 dentro de BX lea DX,Array1 ;DX contiene la direccin efectiva de Array1[0] xchg AX,BX ;Intercambiar los valores contenidos en AX y BX mov ax,4C00h ;Terminar programa y salir al DOS int 21h END inicio 6/13/2010 Ing_haeders@hotmail.com END

Lenguaje Ensamblador
.COMMENT * PRIMERO.ASM Ejemplo de un programa en lenguaje ensamblador. Ensamblado con Pass32 Versin 2.5. * .MODEL TINY; Modelo de memoria para el programa .DATA; Declaracin de variables Mensaje db 'Mi primer programa',10,13,'$ ; db reserva un byte en memoria .CODE; Cuerpo del programa INICIO:; Punto de entrada al programa mov dx,OFFSET Mensaje ; Direccin de la cadena de texto (desplazamiento) mov ah,9 ; Funcin para imprimir cadenas int 21h ; Llamada al sistema operativo mov ah,4ch ; Funcin para terminar un programa int 21h ; Llamada al sistema operativo END INICIO ; Fin del bloque principal del programa END 6/13/2010 Ing_haeders@hotmail.com

Fin presentacin...
Ing_haeders@hotmail. com

6/13/2010

Ing_haeders@hotmail.com

Lenguaje Ensamblador
MOV (transferencia) Sintaxis: MOV destino, fuente Ejemplo: MOV ax, 0; ax=0 volver

6/13/2010

Ing_haeders@hotmail.com

Lenguaje Ensamblador
XCHG (intercambio) Sintaxis: XCHG destino, origen Ejemplo: XCHG AX,BX ; AX->BX, BX->AX volver

6/13/2010

Ing_haeders@hotmail.com

Lenguaje Ensamblador
POP (extraer de pila) Sintaxis: POP destino Ejemplo: POP ax POP pepe volver
6/13/2010 Ing_haeders@hotmail.com

Lenguaje Ensamblador
PUSH (introduce en la pila) Sintaxis: PUSH origen Ejemplo: PUSH cs volver

6/13/2010

Ing_haeders@hotmail.com

Lenguaje Ensamblador
Ejemplo de Pila Mov AX,5 ;AX=5 Mov BX,10 ;BX=10 Push AX ;Pila=5 Mov AX,BX ;AX=10 Pop BX ;BX=5 Mov AX,4C00h ;Terminar programa volver
6/13/2010 Ing_haeders@hotmail.com

Lenguaje Ensamblador
CALL (llamado a subrutina) Sintaxis: CALL destino Ejemplo: CALL proc1 DIR dd 0f000e987h ; reserva palabra ; doble CALL dword ptr dir volver

6/13/2010

Ing_haeders@hotmail.com

Lenguaje Ensamblador
JMP (salto) Sintaxis: JMP direccin Ejemplo: JMP etiqueta volver

6/13/2010

Ing_haeders@hotmail.com

Lenguaje Ensamblador
INT (interrupcin) Sintaxis: INT n (0 <= n <= 255) Ejemplo: Int 21h volver

6/13/2010

Ing_haeders@hotmail.com

Lenguaje Ensamblador
IN (entrada) Sintaxis: IN acumulador, puerto Ejemplo: IN ax, 0fh volver

6/13/2010

Ing_haeders@hotmail.com

Lenguaje Ensamblador
OUT (salida) Sintaxis: OUT acumulador, puerto Ejemplo: OUT 12h, ax volver

6/13/2010

Ing_haeders@hotmail.com

Lenguaje Ensamblador
ADD (suma) Sintaxis: ADD Destino, Origen Ejemplo: ADD ax, bx; ax=ax+bx add ax, 10; ax=ax+10 volver
6/13/2010 Ing_haeders@hotmail.com

Lenguaje Ensamblador
SUB (resta) Sintaxis: SUB destino, origen Ejemplo: SUB ax, bx; ax=ax-bx Sub ax, 10 ax=ax-10 volver
6/13/2010 Ing_haeders@hotmail.com

Lenguaje Ensamblador
MUL (multiplicacin sin signo) Sintaxis: MUL origen (origen no puede ser operando inmediato) Ejemplo: MOV bl, 5; carga los datos MOV al, 10 MUL bl; ax=al*bl MOV al, 10 MUL numero 1; ax=al*numero 1 ;donde numero 1 es una variable de tipo byte volver
6/13/2010 Ing_haeders@hotmail.com

Lenguaje Ensamblador
DIV (divisin sin signo) Sintaxis: DIV origen (origen no puede ser operando inmediato) Ejemplo: MOV ax, 10; MOV bl, 5 DIV bl; 6/13/2010 volver
Ing_haeders@hotmail.com

Lenguaje Ensamblador
IMUL (multiplicacin con signo) Sintaxis: IMUL origen (origen no puede ser operando inmediato) Ejemplo: IMUL bx IMUL ch volver
6/13/2010 Ing_haeders@hotmail.com

Lenguaje Ensamblador
IDIV (divisin con signo) Sintaxis: IDIV origen (origen no puede ser operando inmediato) Ejemplo: MOV al, -10 MOV bl, 2 CBW; convertir byte a palabra IDIV bl volver
6/13/2010 Ing_haeders@hotmail.com

Lenguaje Ensamblador

INC (incremento unitario) Sintaxis: INC destino Ejemplo: INC ax; ax=ax+1 INC var1; var1=var1+1 volver
6/13/2010 Ing_haeders@hotmail.com

Lenguaje Ensamblador
DEC (decremento unitario) Sintaxis: DEC destino Ejemplo: DEC ax; ax=ax+1 DEC var1; var1=var1+1 volver
6/13/2010 Ing_haeders@hotmail.com

Vous aimerez peut-être aussi