La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Assembler Set de Instrucciones. Introducción Creado para facilitar la elaboración de programas. Creado para facilitar la elaboración de programas. Al.

Presentaciones similares


Presentación del tema: "Assembler Set de Instrucciones. Introducción Creado para facilitar la elaboración de programas. Creado para facilitar la elaboración de programas. Al."— Transcripción de la presentación:

1 Assembler Set de Instrucciones

2 Introducción Creado para facilitar la elaboración de programas. Creado para facilitar la elaboración de programas. Al "hablar" en Assembler, estamos diciéndole a la máquina, en lo más cercano a su idioma posible, lo que tiene que hacer. Al "hablar" en Assembler, estamos diciéndole a la máquina, en lo más cercano a su idioma posible, lo que tiene que hacer.

3 Sintaxis del Assembler 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)

4 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

5 Delimitadores: Los campos van separados sólo con espacios y/o tabulaciones. No se debe agregar nunca otros caracteres (comas, puntos, etc ). Los campos van separados sólo con espacios y/o tabulaciones. No se debe agregar nunca otros caracteres (comas, puntos, etc ). No utilizar espacios extra, particularmente después de comas que separan operandos. No utilizar espacios extra, particularmente después de comas que separan operandos. ( Ej: movlw 5,w ) No usar caracteres delimitadores (espacios y tabulaciones) en nombres o etiquetas. No usar caracteres delimitadores (espacios y tabulaciones) en nombres o etiquetas.

6 Etiquetas: No más de una etiqueta por instrucción. No más de una etiqueta por instrucción. No usar palabras reservadas (EQU) o instrucciones (MOV). No usar palabras reservadas (EQU) o instrucciones (MOV). No usar números o caracteres no numéricos como 1º letra. No usar números o caracteres no numéricos como 1º letra. Usar siempre letras y en mayúscula. Usar siempre letras y en mayúscula.

7 Desventajas del Assembler Amplias diferencias entre el set de instrucciones y tareas a realizarse. Amplias diferencias entre el set de instrucciones y tareas a realizarse. No Portable. No Portable. Como remedio de lo anterior, se utilizan lenguajes de medio o alto nivel como C o Pascal. Como remedio de lo anterior, se utilizan lenguajes de medio o alto nivel como C o Pascal.

8 MOV (move) Copia el contenido del parámetro origen al destino. Ejemplo: Ejemplo: MOV AX, BX equivale a AX = BX; (C) MOV AX, BX equivale a AX = BX; (C)

9 MOVSX & MOVZX Transfieren el operando origen a un registro y luego realizan la extensión Transfieren el operando origen a un registro 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)

10 MOVS (Move String) Transfiere los elementos del string especificados por la dirección del registro ESI a la dirección especificada por el registro EDI. Transfiere los elementos del string especificados por la dirección del registro ESI a la dirección especificada por el registro EDI. Los elementos a ser operados se identifican con los registro ESI (source string element) y EDI (destination string element). Los elementos a ser operados se identifican con los registro ESI (source string element) y EDI (destination string element).

11 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)

12 MOV – Restricciones NO se puede mover datos… Entre posiciones de memoria Entre posiciones de memoria MOV datos1, datos2 es ilegal En su lugar se escribe: MOV AX, datos2 MOV datos1, AX (Utilización de variable puente)

13 MOV – Restricciones NO se puede mover datos… De un registro de segmento a otro De un registro de segmento a otro MOV DS, ES es ilegal En su lugar se escribe: MOV AX, ES MOV DS, AX

14 MOV – Restricciones NO se puede mover… Una constante directamente a un registro de segmento. Una constante directamente a un registro de segmento. MOV DS, 1234H es ilegal MOV DS, 1234H es ilegal En su lugar se escribe: MOV AX, 1234H MOV DS, AX

15 MOV – Restricciones NO se puede… CS (code segment) no debería usarse como operando destino CS (code segment) no debería usarse como operando destino Podría tener el efecto de cambiar el segmento que donde se esta ejecutando el código.

16 XCHG (exchange) Intercambia el contenido de dos operandos. Intercambia el contenido de dos operandos. No requiere una dirección temporaria. No requiere una dirección temporaria. XCHG Dato1, Dato2

17 Manipulación de pila – PUSH Decrementa el puntero de pila (ESP), luego copia el operando al tope de la misma. Decrementa el puntero de pila (ESP), luego copia el operando al tope de la misma.

18 Manipulación de pila – POP Copia el dato del tope de la pila (ESP) a la dirección especificada con el operando y luego incrementa el registro ESP para apuntar al nuevo tope de la pila. Copia el dato del tope de la pila (ESP) a la dirección especificada con el operando y luego incrementa el registro ESP para apuntar al nuevo tope de la pila.

19 PUSHA (push all registers) Guarda el contenido de los ocho registros de propósito general en la pila. Guarda el contenido de los ocho registros de propósito general en la pila. Los registros se ingresan el la pila en el siguiente orden: EAX, ECX, EDX, EBX, el valor inicial de ESP antes de que EAX sea ingresado en la pila, EBP, ESI, y EDI. Los registros se ingresan el la pila en el siguiente orden: EAX, ECX, EDX, EBX, el valor inicial de ESP antes de que EAX sea ingresado en la pila, EBP, ESI, y EDI.

20 PUSHA (push all registers)

21 POPA (pop all registers) Saca los últimos ocho words o doublewords del tope de la pila y los coloca en los registros de propósito general, con excepción del registro ESP. Saca los últimos ocho words o doublewords del tope de la pila y los coloca en los registros de propósito general, con excepción del registro ESP. El registro ESP se restaura por la acción de retirar los elementos de la pila. El registro ESP se restaura por la acción de retirar los elementos de la pila.

22 POPA (pop all registers)

23 Conversión de Tipos CBW (convert byte to word) CBW (convert byte to word) CWDE (convert word to doubleword extended) CWDE (convert word to doubleword extended) CWD (convert word to doubleword) CWD (convert word to doubleword) CDQ (convert doubleword to quadword) CDQ (convert doubleword to quadword)

24 Instrucción CMP 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.

25 CMPS (Compare string) Resta los elementos del string destino de los elementos del string origen y actualiza las banderas de estado (CF, ZF, OF, SF, PF, y AF) en el registro EFLAGS de acuerdo a los resultados. Resta los elementos del string destino de los elementos del string origen y actualiza las banderas de estado (CF, ZF, OF, SF, PF, y AF) en el registro EFLAGS de acuerdo a los resultados. Ningún elemento del string se escribe en la memoria. Ningún elemento del string se escribe en la memoria.

26 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)

27 SCAS (Scan string) Resta los elementos del string destino del contenido del registro EAX, AX o AL (dependiendo de la longitud del operando) y actualiza las banderas de estado de acuerdo a los resultados. Resta los elementos del string destino del contenido del registro EAX, AX o AL (dependiendo de la longitud del operando) y actualiza las banderas de estado de acuerdo a los resultados. Ni los elementos del string ni el contenido de los registros se modifican. Ni los elementos del string ni el contenido de los registros se modifican.

28 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)

29 LODS (Load string) Carga los elementos del string origen identificados por el registro ESI en el registro EAX, AX o AL. Carga los elementos del string origen identificados por el registro ESI en el 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)

30 STOS (Store string) Almacena los elementos del string origen del registro EAX, AX o AL en la dirección de memoria identificada por el registro EDI. Almacena los elementos del string origen del registro EAX, AX o AL en la dirección de memoria identificada por el registro 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).

31 Entrada / 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 y el registro EAX (32 bits), el registro AX (16 bits) o el registro AL (8 bits) Transfieren datos entre un puerto de E/S y el registro EAX (32 bits), el registro AX (16 bits) o el registro AL (8 bits) El puerto se especifica con un operando inmediato (si esta entre 0 y 255) o con una dirección en el registro DX. El puerto se especifica con un operando inmediato (si esta entre 0 y 255) o con una dirección en el registro DX.

32 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 para especificar los elementos del string en la memoria y los prefijos de repetición (REP) se usan para repetir la instrucción para implementar una transferencia de bloque. Los registros ESI y EDI se usan para especificar los elementos del string en la memoria y los prefijos de repetición (REP) se usan para repetir la instrucción para implementar una transferencia de bloque. Las instrucciones INS y OUTS usan una dirección en el registro DX para especificar el puerto de E/S. Las instrucciones INS y OUTS usan una dirección en el registro DX para especificar el puerto de E/S.

33 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)

34 Instrucciones 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: SumaResta MultiplicaciónDivisión IncrementoDecremento ComparaciónNegación

35 Instrucción ADD 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.

36 Instrucción ADD ADD AL,40 ; le sumo al reg. AL el valor 40. (AL+=40h ó AL=AL+40h)

37 Instrucción SUB 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.

38 Instrucciones de Multiplicación y División MUL Multiplicación sin signo IMUL Multiplicación con signo DIV División sin signo IDIV División con signo

39 Instrucción MUL 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 RegistroFuenteDestino ByteALr/m8AX WordAXr/m16DX:AX DoubleWordEAXr/m32EDX:EAX

40 Instrucción IMUL Sintaxis: IMUL fuente Tiene tres formas según el número de operandos: Un Operando Dos Operandos Tres Operandos

41 Instrucción IMUL Un Operando: Es idéntica a la instrucción MUL Dos Operandos: IMUL destino, fuente Dos Operandos: IMUL destino, fuente1, fuente2

42 Instrucción DIV 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 DividendoDivisorCocienteRestoMáximo Cociente Word/byteAXr/m8ALAH255 Doubleword/ word DX:AXr/m16AXDX65,535 Quadword/d oubleword EDX:EAXr/m32EAXEDX

43 Instrucciones De Incremento 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--)

44 Instrucciones de Comparació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

45 Instrucciones 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

46 Instrucción AND 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. FuenteDestino Dirección de memoria

47 Instrucción OR 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. FuenteDestino Dirección de memoria

48 Instrucción XOR XOR destino, fuente Cada bit del resultado se activa a 1 si ambos bits de los operandos son diferentes, en otro caso es 0. FuenteDestino

49 Instrucción NOT NOT destino Cada bit 1 se pone a 0 y cada bit 0 se pone a 1

50 Transferencia de Control Es un conjunto de instrucciones. Es un conjunto de instrucciones. Permiten al programador romper el flujo secuencial en un programa. Permiten al programador romper el flujo secuencial en un programa. Permite ejecutar trozos de código. Permite ejecutar trozos de código.

51 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).

52 JMP (Salto incondicional) Desvía el flujo del programa Desvía el flujo del programa No verifica condiciones ni banderas No verifica condiciones ni banderas Transfiere a una dirección especificada Transfiere a una dirección especificadaSintaxis: JMP destino JMP destino

53 Tipos de Salto Incondicional Ej: ; porción de código Inicio: Inicio: JMP Ejemplo JMP Ejemplo MOV cx,7 MOV cx,7 Ejemplo: Ejemplo: MOV cx,6 MOV cx,6 ; continúa código ; continúa código

54 Salto Condicional (Jnnn) jecuta trozos de código dependiendo del valor de determinado registro o variable Ejecuta trozos de código dependiendo del valor de determinado registro o variable Es necesario hacer una comparación Es necesario hacer una comparación

55 Salto Condicional (Jnnn)

56

57 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

58 Llamada a interrupciones (INT) Son las de tipo software Son las de tipo software Ayuda en la creación de programas Ayuda en la creación de programas Una interrupción es una operación que invoca la ejecución de una rutina específica Una interrupción es una operación que invoca la ejecución de una rutina específica Su sintaxis es la siguiente: Su sintaxis es la siguiente: INT numero_interrupción. INT numero_interrupción.

59 Llamada a interrupciones (INT) Ejemplo: INT 10H Provocaría una llamada a la interrupción 10h (16 en decimal). INT 10H Provocaría una llamada a la interrupción 10h (16 en decimal).

60 Llamada a Procedimientos (CALL) Trozos de código que van a ser usados en distintas partes del programa. Trozos de código que van a ser usados en distintas partes del programa. Permiten tener un código más legible, más estructurado. Permiten tener un código más legible, más estructurado.Sintaxis: CALL nombre_procedimiento CALL nombre_procedimiento

61 Llamada a Procedimientos (CALL) El formato es el siguiente: Inicialización PROC ….. Cuerpo del procedimiento. ….. RET Inicialización ENDP

62 Llamada a Procedimientos (CALL) Existen dos tipos de llamadas a procedimientos: Existen dos tipos de llamadas a procedimientos: Llamadas directas (la llamada tiene Llamadas directas (la llamada tiene el nombre del procedimiento) Llamadas indirectas (el llamado tiene Llamadas indirectas (el llamado tiene la dirección que contiene la dirección la dirección que contiene la dirección de comienzo del procedimiento)

63 Declaraci ó n de Variables Es la posibilidad de ponerle nombres a las posiciones de memoria Es la posibilidad de ponerle nombres a las posiciones de memoriaSintaxis: Nombre Tipo Valor Nombre Tipo Valor

64 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).

65 Declaraci ó n de Variables Ejemplos: LETRA_A DB A ; variable con un carácter LETRA_A DB A ; variable con un carácter NUMBER_1 DW 1 ; un número 1, pero word NUMBER_1 DW 1 ; un número 1, pero word STRING DB Hola, cómo estás!!!! ; cadena STRING DB Hola, cómo estás!!!! ; cadena

66 Declaración de Macros Permiten asignarle un nombre a una secuencia de instrucciones Permiten asignarle un nombre a una secuencia de instrucciones Luego se utiliza el nombre de la macro en el programa como si se usase la secuencia de instrucciones anterior. Luego se utiliza el nombre de la macro en el programa como si se usase la secuencia de instrucciones anterior. Las macros no son lo mismo que las subrutinas Las macros no son lo mismo que las subrutinas

67 Declaración de Macros La declaración de macros se hace a través de las directivas MACRO y ENDM. La declaración de macros se hace a través de las directivas MACRO y ENDM. Su sintaxis es: Su sintaxis es: nombre MACRO [parámetros,,,] nombre MACRO [parámetros,,,] declaraciones declaraciones ENDM ENDM


Descargar ppt "Assembler Set de Instrucciones. Introducción Creado para facilitar la elaboración de programas. Creado para facilitar la elaboración de programas. Al."

Presentaciones similares


Anuncios Google