Compilado assembler
Upcoming SlideShare
Loading in...5
×
 

Compilado assembler

on

  • 442 views

Assembly Instructions' Set

Assembly Instructions' Set

Statistics

Views

Total Views
442
Views on SlideShare
442
Embed Views
0

Actions

Likes
0
Downloads
22
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Compilado assembler Compilado assembler Presentation Transcript

    • AssemblerAssembler Set de InstruccionesSet de Instrucciones
    • IntroducciónIntroducción  Creado para facilitar la elaboración deCreado para facilitar la elaboración de programas.programas.  Al "hablar" en Assembler, estamosAl "hablar" en Assembler, estamos diciéndole a la máquina, en lo másdiciéndole a la máquina, en lo más cercano a su idioma posible, lo que tienecercano a su idioma posible, lo que tiene que hacer.que hacer.
    • Sintaxis del AssemblerSintaxis del Assembler Las órdenes en Assembler pueden ser:Las órdenes en Assembler pueden ser:  Mnemónicos (instrucciones)Mnemónicos (instrucciones) (Ej. MOV, ADD, JMP)(Ej. MOV, ADD, JMP)  Directivas (palabras reservadas)Directivas (palabras reservadas) (Ej. EQU, ORG, END)(Ej. EQU, ORG, END)
    • Formato general de una orden:Formato general de una orden: mnemónico [Param1 [,Param2]] La línea de código consta de cuatro partes:  Etiquetas  Directiva o instrucción  Operando(s)  Comentarios
    • Delimitadores:Delimitadores:  Los campos van separados sólo con espaciosLos campos van separados sólo con espacios y/o tabulaciones. No se debe agregar nuncay/o tabulaciones. No se debe agregar nunca otros caracteres (comas, puntos, etc ).otros caracteres (comas, puntos, etc ).  No utilizar espacios extra, particularmenteNo utilizar espacios extra, particularmente después de comas que separan operandos.después de comas que separan operandos. ( Ej:( Ej: movlw 5,wmovlw 5,w ))  No usar caracteres delimitadores (espacios yNo usar caracteres delimitadores (espacios y tabulaciones) en nombres o etiquetas.tabulaciones) en nombres o etiquetas.
    • Etiquetas:Etiquetas:  No más de una etiqueta por instrucción.No más de una etiqueta por instrucción.  No usar palabras reservadas (EQU) oNo usar palabras reservadas (EQU) o instrucciones (MOV).instrucciones (MOV).  No usar números o caracteres no numéricosNo usar números o caracteres no numéricos como 1º letra.como 1º letra.  Usar siempreUsar siempre letrasletras y eny en mayúscula.mayúscula.
    • Desventajas del AssemblerDesventajas del Assembler  Amplias diferencias entre el set deAmplias diferencias entre el set de instrucciones y tareas a realizarse.instrucciones y tareas a realizarse.  No Portable.No Portable.  Como remedio de lo anterior, se utilizanComo remedio de lo anterior, se utilizan lenguajes de medio o alto nivel comolenguajes de medio o alto nivel como CC oo Pascal.Pascal.
    • MOV (move)MOV (move) Copia el contenido del parámetro origen alCopia el contenido del parámetro origen al destino.destino.  Ejemplo:Ejemplo: MOV AX, BX equivale a AX = BX; (C)MOV AX, BX equivale a AX = BX; (C)
    • MOVSX & MOVZXMOVSX & MOVZX  Transfieren el operando origen a unTransfieren el operando origen a un registro y luego realizan la extensiónregistro y luego realizan la extensión  MOVSX (move with sign extension)MOVSX (move with sign extension)  MOVZX (move with zero extension)MOVZX (move with zero extension)
    • MOVS (Move String)MOVS (Move String)  Transfiere los elementos del stringTransfiere los elementos del string especificados por la dirección del registroespecificados por la dirección del registro ESI a la dirección especificada por elESI a la dirección especificada por el registro EDI.registro EDI.  Los elementos a ser operados seLos elementos a ser operados se identifican con los registro ESI (sourceidentifican con los registro ESI (source string element) y EDI (destination stringstring element) y EDI (destination string element).element).
    • MOVS (Move String)MOVS (Move String)  MOVSB (move byte string)MOVSB (move byte string)  MOVSW (move word string)MOVSW (move word string)  MOVSD (move doubleword string)MOVSD (move doubleword string)
    • MOV – RestriccionesMOV – Restricciones NONO se puede mover datos…se puede mover datos…  Entre posiciones de memoriaEntre posiciones de memoria MOV datos1, datos2 es ilegalMOV datos1, datos2 es ilegal En su lugar se escribe:En su lugar se escribe: MOV AX, datos2MOV AX, datos2 MOV datos1, AX (Utilización de variableMOV datos1, AX (Utilización de variable puente)puente)
    • MOV – RestriccionesMOV – Restricciones NONO se puede mover datos…se puede mover datos…  De un registro de segmento a otroDe un registro de segmento a otro MOV DS, ESMOV DS, ES es ilegales ilegal En su lugar se escribe:En su lugar se escribe: MOV AX, ESMOV AX, ES MOV DS, AXMOV DS, AX
    • MOV – RestriccionesMOV – Restricciones NONO se puede mover…se puede mover…  Una constante directamente a un registroUna constante directamente a un registro de segmento.de segmento. MOV DS, 1234HMOV DS, 1234H es ilegales ilegal En su lugar se escribe:En su lugar se escribe: MOV AX, 1234HMOV AX, 1234H MOV DS, AXMOV DS, AX
    • MOV – RestriccionesMOV – Restricciones NONO se puede…se puede…  CS (code segment) no debería usarseCS (code segment) no debería usarse como operando destinocomo operando destino Podría tener el efecto de cambiar elPodría tener el efecto de cambiar el segmento que donde se esta ejecutandosegmento que donde se esta ejecutando el código.el código.
    • XCHG (exchange)XCHG (exchange)  Intercambia el contenido de dosIntercambia el contenido de dos operandos.operandos.  No requiere una dirección temporaria.No requiere una dirección temporaria. XCHG Dato1, Dato2XCHG Dato1, Dato2
    • Manipulación de pila – PUSHManipulación de pila – PUSH  Decrementa el puntero de pila (ESP),Decrementa el puntero de pila (ESP), luego copia el operando al tope de laluego copia el operando al tope de la misma.misma.
    • Manipulación de pila – POPManipulación de pila – POP  Copia el dato del tope de la pila (ESP) a laCopia el dato del tope de la pila (ESP) a la dirección especificada con el operando ydirección especificada con el operando y luego incrementa el registro ESP paraluego incrementa el registro ESP para apuntar al nuevo tope de la pila.apuntar al nuevo tope de la pila.
    • PUSHA (push all registers)PUSHA (push all registers)  Guarda el contenido de los ocho registrosGuarda el contenido de los ocho registros de propósito general en la pila.de propósito general en la pila.  Los registros se ingresan el la pila en elLos registros se ingresan el la pila en el siguiente orden: EAX, ECX, EDX, EBX, elsiguiente orden: EAX, ECX, EDX, EBX, el valor inicial de ESP antes de que EAX seavalor inicial de ESP antes de que EAX sea ingresado en la pila, EBP, ESI, y EDI.ingresado en la pila, EBP, ESI, y EDI.
    • PUSHA (push all registers)PUSHA (push all registers)
    • POPA (pop all registers)POPA (pop all registers)  Saca los últimos ocho words oSaca los últimos ocho words o doublewords del tope de la pila y losdoublewords del tope de la pila y los coloca en los registros de propósitocoloca en los registros de propósito general, con excepción del registro ESP.general, con excepción del registro ESP.  El registro ESP se restaura por la acciónEl registro ESP se restaura por la acción de retirar los elementos de la pila.de retirar los elementos de la pila.
    • POPA (pop all registers)POPA (pop all registers)
    • Conversión de TiposConversión de Tipos  CBWCBW (convert byte to word)(convert byte to word)  CWDECWDE (convert word to doubleword extended)(convert word to doubleword extended)  CWDCWD (convert word to doubleword)(convert word to doubleword)  CDQCDQ (convert doubleword to quadword)(convert doubleword to quadword)
    • InstrucciónInstrucción CMPCMP  Realiza comparaciones entre dos operandos Sintaxis: CMP registro,registro CMP registro,memoria CMP memoria,registro CMP registro,valor CMP valor,registro Los datos a comparar deben ser del mismo tamaño. Las comparaciones están íntimamente ligadas con los saltos condicionales.
    • CMPS (Compare string)CMPS (Compare string)  Resta los elementos del string destino deResta los elementos del string destino de los elementos del string origen y actualizalos elementos del string origen y actualiza las banderas de estado (CF, ZF, OF, SF,las banderas de estado (CF, ZF, OF, SF, PF, y AF) en el registro EFLAGS dePF, y AF) en el registro EFLAGS de acuerdo a los resultados.acuerdo a los resultados.  Ningún elemento del string se escribe enNingún elemento del string se escribe en la memoria.la memoria.
    • CMPS (Compare string)CMPS (Compare string)  CMPSB (compare byte strings)CMPSB (compare byte strings)  CMPSW (compare word strings)CMPSW (compare word strings)  CMPSD (compare doubleword strings)CMPSD (compare doubleword strings)
    • SCAS (Scan string)SCAS (Scan string)  Resta los elementos del string destino delResta los elementos del string destino del contenido del registro EAX, AX o ALcontenido del registro EAX, AX o AL (dependiendo de la longitud del operando)(dependiendo de la longitud del operando) y actualiza las banderas de estado dey actualiza las banderas de estado de acuerdo a los resultados.acuerdo a los resultados.  Ni los elementos del string ni el contenidoNi los elementos del string ni el contenido de los registros se modifican.de los registros se modifican.
    • SCAS (Scan string)SCAS (Scan string)  SCASB (Scan byte string)SCASB (Scan byte string)  SCASW (Scan word string)SCASW (Scan word string)  SCASD (Scan doubleword string)SCASD (Scan doubleword string)
    • LODS (Load string)LODS (Load string)  Carga los elementos del string origenCarga los elementos del string origen identificados por el registro ESI en elidentificados por el registro ESI en el registro EAX, AX o AL.registro EAX, AX o AL.  LODSB (load byte string).LODSB (load byte string).  LODSW (load word string).LODSW (load word string).  LODSD (load doubleword string)LODSD (load doubleword string)
    • STOS (Store string)STOS (Store string)  Almacena los elementos del string origenAlmacena los elementos del string origen del registro EAX, AX o AL en la direccióndel registro EAX, AX o AL en la dirección de memoria identificada por el registrode memoria identificada por el registro EDI.EDI.  STOSB (store byte string).STOSB (store byte string).  STOSW (store word string).STOSW (store word string).  STOSD (store doubleword string).STOSD (store doubleword string).
    • Entrada / SalidaEntrada / Salida  IN (input from port to register)IN (input from port to register)  OUT (output from register to port)OUT (output from register to port)  Transfieren datos entre un puerto de E/S yTransfieren datos entre un puerto de E/S y el registro EAX (32 bits), el registro AX (16el registro EAX (32 bits), el registro AX (16 bits) o el registro AL (8 bits)bits) o el registro AL (8 bits)  El puerto se especifica con un operandoEl puerto se especifica con un operando inmediato (si esta entre 0 y 255) o coninmediato (si esta entre 0 y 255) o con una dirección en el registro DX.una dirección en el registro DX.
    • Entrada / Salida (strings)Entrada / Salida (strings)  INS (input from port to string)INS (input from port to string)  OUTS (output string to port)OUTS (output string to port)  Los registros ESI y EDI se usan paraLos registros ESI y EDI se usan para especificar los elementos del string en laespecificar los elementos del string en la memoria y los prefijos de repetición (REP)memoria y los prefijos de repetición (REP) se usan para repetir la instrucción parase usan para repetir la instrucción para implementar una transferencia de bloque.implementar una transferencia de bloque.  Las instrucciones INS y OUTS usan unaLas instrucciones INS y OUTS usan una dirección en el registro DX para especificardirección en el registro DX para especificar el puerto de E/S.el puerto de E/S.
    • Entrada / Salida (strings)Entrada / Salida (strings)  INSB (input byte)INSB (input byte)  INSW (input word)INSW (input word)  INSD (input doubleword)INSD (input doubleword)  OUTB (output byte)OUTB (output byte)  OUTW (output word)OUTW (output word)  OUTD (output doubleword)OUTD (output doubleword)
    • Instrucciones Aritméticas BinariasInstrucciones Aritméticas Binarias Operan con datos numéricos de 8, 16 y 32 bits, codificados como enteros binarios con signo y sin signo. Básicamente Incluyen: SumaSuma RestaResta MultiplicaciónMultiplicación DivisiónDivisión IncrementoIncremento DecrementoDecremento ComparaciónComparación NegaciónNegación
    • InstrucciónInstrucción ADDADD  Sintaxis: ADD destino, fuente Se suma ambos operandos y el resultado se almacena en el operando destino. Si se produce overflow se indica en los flags OF y CF. El signo del resultado se indica en el flag SF.
    • InstrucciónInstrucción ADDADD  ADD AL,40 ; le sumo al reg. AL el valor 40. (AL+=40h ó AL=AL+40h)
    • InstrucciónInstrucción SUBSUB  Sintaxis: SUB destino, fuente Se suma ambos operandos y el resultado se almacena en el operando destino. Si se produce overflow se indica en los flags OF y CF. El signo del resultado se indica en el flag SF.
    • Instrucciones deInstrucciones de Multiplicación y DivisiónMultiplicación y División  MUL  Multiplicación sin signo  IMUL  Multiplicación con signo  DIV  División sin signo  IDIV  División con signo
    • InstrucciónInstrucción MULMUL  Sintaxis: MUL fuente Realiza la multiplicación entre el operando dado con el acumulador. El acumulador a multiplicar va a depender del operador fuente que se ingrese. Tamaño del operando Registro Fuente Destino Byte AL r/m8 AX Word AX r/m16 DX:AX DoubleWord EAX r/m32 EDX:EAX
    • InstrucciónInstrucción IMULIMUL  Sintaxis: IMUL fuente Tiene tres formas según el número de operandos: Un Operando Dos Operandos Tres Operandos
    • InstrucciónInstrucción IMULIMUL  Un Operando: Es idéntica a la instrucción MUL  Dos Operandos: IMUL destino, fuente  Dos Operandos: IMUL destino, fuente1, fuente2
    • InstrucciónInstrucción DIVDIV  Sintaxis: DIV divisor Divide el valor en los registros AX, DX:AX o EDX:EAX por el operando divisor. Esta operación arroja como resultado un cociente y un resto, el modo en que se almacena lo podemos observar en la siguiente tabla... Tamaño del operando Dividendo Divisor Cociente Resto Máximo Cociente Word/byte AX r/m8 AL AH 255 Doubleword/ word DX:AX r/m16 AX DX 65,535 Quadword/d oubleword EDX:EAX r/m32 EAX EDX 232 - 1
    • Instrucciones DeInstrucciones De Incremento y DecrementoIncremento y Decremento  INC  Incremento  DEC  Decremento Estas instrucciones adicionan 1 o restan 1 a un operando entero.  Sintaxis INC AX o DEC AX  Equivale a ADD AX,1 o SUB AX,1 (A++) (A--)
    • Instrucciones deInstrucciones de Comparación y NegaciónComparación y Negación Instrucción NEG  Sintaxis: NEG destino  Genera el complemento a dos del operando destino y lo almacena en este mismo operando.  MOV AX,1234h NEG AX  AX=EDCBh
    • Instrucciones LógicasInstrucciones Lógicas  AND  Conjunción de dos operandos  OR  Disyunción inclusiva lógica de dos operandos  XOR  Disyunción exclusiva lógica de dos operandos  NOT  Negación bit por bit del operando
    • InstrucciónInstrucción ANDAND AND destino, fuente Cada bit del resultado se activa a 1 si ambos bits de los operandos son 1, en otro caso se pone a 0. Fuente Destino Destino 1 1 1 1 0 0 0 1 0 0 0 0 Dirección de memoria
    • InstrucciónInstrucción OROR OR destino, fuente Cada bit del resultado se pone en 0 si ambos bits de los operandos son 0, en otro caso se pone a 1. Fuente Destino Destino 1 1 1 1 0 1 0 1 1 0 0 0 Dirección de memoria
    • InstrucciónInstrucción XORXOR XOR destino, fuente Cada bit del resultado se activa a 1 si ambos bits de los operandos son diferentes, en otro caso es 0. Fuente Destino Destino 1 1 0 1 0 1 0 1 1 0 0 0
    • InstrucciónInstrucción NOTNOT NOT destino Cada bit 1 se pone a 0 y cada bit 0 se pone a 1
    • Transferencia de ControlTransferencia de Control  Es un conjunto de instrucciones.Es un conjunto de instrucciones.  Permiten al programador romper el flujoPermiten al programador romper el flujo secuencial en un programa.secuencial en un programa.  PPermite ejecutar trozos de código.ermite ejecutar trozos de código.
    • Clasificación:Clasificación:  Saltos incondicionales (JMP).Saltos incondicionales (JMP).  Bucles (LOOP).Bucles (LOOP).  Saltos condicionales (Jnnn).Saltos condicionales (Jnnn).  Llamadas a procedimientos (CALL).Llamadas a procedimientos (CALL).  Llamadas a interrupciones (INT).Llamadas a interrupciones (INT).
    • JMP (Salto incondicional)JMP (Salto incondicional)  Desvía el flujo del programaDesvía el flujo del programa  No verifica condiciones ni banderasNo verifica condiciones ni banderas  Transfiere a una dirección especificadaTransfiere a una dirección especificada Sintaxis:Sintaxis: JMPJMP destinodestino
    • Tipos de Salto IncondicionalTipos de Salto Incondicional Ej:Ej: ;; porción de códigoporción de código Inicio:Inicio: JMPJMP EjemploEjemplo MOV cx,7MOV cx,7 Ejemplo:Ejemplo: MOV cx,6MOV cx,6 ;; continúa códigocontinúa código
    • Salto Condicional (Jnnn)Salto Condicional (Jnnn)  Ejecuta trozos de código dependiendo deljecuta trozos de código dependiendo del valor de determinado registro o variablevalor de determinado registro o variable  Es necesario hacer unaEs necesario hacer una comparacióncomparación
    • Salto Condicional (Jnnn)Salto Condicional (Jnnn)
    • Salto Condicional (Jnnn)Salto Condicional (Jnnn)
    • Bucle (LOOP)Bucle (LOOP) Sirve para ejecutar un trozo de código un número de veces dado Por ejemplo: ; porción de código MOV CX,7 INICIO_BUCLE: ADD WORD PTR BX,CX INC BX LOOP INICIO_BUCLE MOV AX,BX ; continúa código
    • Llamada a interrupciones (INT)Llamada a interrupciones (INT)  Son las de tipo softwareSon las de tipo software  Ayuda en la creación de programasAyuda en la creación de programas  UnaUna interrupcióninterrupción es una operación quees una operación que invoca la ejecución de una rutinainvoca la ejecución de una rutina específicaespecífica  Su sintaxis es la siguiente:Su sintaxis es la siguiente: INTINT numero_interrupción.numero_interrupción.
    • Llamada a interrupciones (INT)Llamada a interrupciones (INT) Ejemplo:Ejemplo: INT 10HINT 10H  Provocaría una llamada a laProvocaría una llamada a la interrupción 10h (16 en decimal).interrupción 10h (16 en decimal).
    • Llamada a Procedimientos (CALL)Llamada a Procedimientos (CALL)  Trozos de código que van a ser usadosTrozos de código que van a ser usados en distintas partes del programa.en distintas partes del programa.  Permiten tener un código más legible,Permiten tener un código más legible, más estructurado.más estructurado. Sintaxis:Sintaxis: CALLCALL nombre_procedimientonombre_procedimiento
    • Llamada a Procedimientos (CALL)Llamada a Procedimientos (CALL)  El formato es el siguiente: Inicialización PROC ….. Cuerpo del procedimiento. ….. RET Inicialización ENDP
    • Llamada a Procedimientos (CALL)Llamada a Procedimientos (CALL)  Existen dos tipos de llamadas a procedimientos:Existen dos tipos de llamadas a procedimientos:  Llamadas directas (la llamada tieneLlamadas directas (la llamada tiene el nombre del procedimiento)el nombre del procedimiento)  Llamadas indirectas (el llamado tieneLlamadas indirectas (el llamado tiene la dirección que contiene la direcciónla dirección que contiene la dirección de comienzo del procedimiento)de comienzo del procedimiento)
    • Declaración de VariablesDeclaración de Variables  Es la posibilidad de ponerle nombres a lasEs la posibilidad de ponerle nombres a las posiciones de memoriaposiciones de memoria Sintaxis:Sintaxis: Nombre Tipo ValorNombre Tipo Valor
    • Declaración de Variables (Tipos)Declaración de Variables (Tipos) DB Para definir un byte, dice que la variable es un byte, o un array de Bytes DW Para definir un Word o un array de Word. DD Para definir un DWord, o un array de DWord. DQ Para definir un QWord (QuadWord, u ocho bytes). DT Para definir Ten Bytes (diez).
    • Declaración de VariablesDeclaración de Variables Ejemplos:Ejemplos: LETRA_A DB ‘A’ ; variable con un carácterLETRA_A DB ‘A’ ; variable con un carácter NUMBER_1 DW 1 ; un número 1, pero wordNUMBER_1 DW 1 ; un número 1, pero word STRING DB ‘Hola, cómo estás!!!!’ ; cadenaSTRING DB ‘Hola, cómo estás!!!!’ ; cadena
    • Declaración de MacrosDeclaración de Macros  Permiten asignarle un nombre a unaPermiten asignarle un nombre a una secuencia de instruccionessecuencia de instrucciones  Luego se utiliza el nombre de la macro enLuego se utiliza el nombre de la macro en el programa como si se usase lael programa como si se usase la secuencia de instrucciones anterior.secuencia de instrucciones anterior.  Las macros no son lo mismo que lasLas macros no son lo mismo que las subrutinassubrutinas
    • Declaración de MacrosDeclaración de Macros  La declaración de macros se hace aLa declaración de macros se hace a través de las directivastravés de las directivas MACROMACRO yy ENDMENDM..  Su sintaxis es:Su sintaxis es: nombrenombre MACROMACRO [[parámetrosparámetros,,,],,,] declaracionesdeclaraciones ENDMENDM