1¿instrucciones aritméticas?
Instrucciones lógicas. Son utilizadas para realizar operaciones lógicas sobre los operandos.
Realiza la conjunción de los operandos bit por bit.
Sintaxis:
AND destino, fuente
Con esta instrucción se lleva a cabo la operación "y" lógica de los dos operandos:
Fuente Destino Destino
--------------------------
1 1 1
1 0 0
0 1 0
0 0 0
El resultado de la operación se almacena en el operando destino.
Genera el complemento a 2
Sintaxis:
NEG destino
Esta instrucción genera el complemento a 2 del operando destino y lo almacena en este mismo operando. Por ejemplo, si AX guarda el valor de 1234H, entonces:
NEG AX
Nos dejaría almacenado en el registro AX el valor EDCCH.
Lleva a cabo la negación bit por bit del operando destino.
Sintaxis:
NOT destino
El resultado se guarda en el mismo operando destino.
Propósito: OR inclusivo lógico
Sintaxis:
OR destino, fuente
La instrucción OR lleva a cabo, bit por bit, la disyunción inclusiva lógica de los dos operandos:
Fuente Destino Destino
--------------------------
1 1 1
1 0 1
0 1 1
0 0 0
Propósito: Comparar logicamente los operandos
Sintaxis:
TEST destino, fuente
Realiza una conjunción, bit por bit, de los operandos, pero a diferencia de AND esta instrucción no coloca el resultado en el operando destino, solo tiene efecto sobre el estado de las banderas.
Propósito: OR exclusivo
Sintaxis:
XOR destino, fuente
Su función es efectuar bit por bit la disyunción exclusiva lógica de los dos operandos.
Fuente Destino Destino
--------------------------
1 1 0
0 0 1
0 1 1
0 0 0
Propósito: Adición con acarreo.
Sintaxis:
ADC destino, fuente
Lleva a cabo la suma de dos operandos y suma uno al resultado en caso de que la bandera CF esté activada, esto es, en caso de que exista acarreo.
El resultado se guarda en el operando destino.
Propósito: Adición de los operandos.
Sintaxis:
ADD destino, fuente
Suma los dos operandos y guarda el resultado en el operando destino.
Instrucción DIV
Propósito: División sin signo
Sintaxis:
DIV fuente
El divisor puede ser un byte o palabra y es el operando que se le da a la instrucción.
Si el divisor es de 8 bits se toma como dividendo el registro de 16 bits.
Instrucción IDIV
Propósito: División con signo
Sintaxis:
IDIV fuente
Consiste básicamente en lo mismo que la instrucción DIV, solo que esta última realiza la operación con signo.
Instrucción MUL
Propósito: Multiplicación sin signo
Sintaxis:
MUL fuente
El ensamblador asume que el multiplicando sera del mismo tamaño que el del multiplicador, por lo tanto multiplica el valor almacenado en el registro que se le da como operando.
Instrucción IMUL
Propósito: Multiplicación de dos enteros con signo.
Sintaxis:
IMUL fuente
Este comando hace lo mismo que el anterior, solo que si toma en cuenta los signos de las cantidades que se multiplican.
Instrucción SBB
Propósito: Substracción con acarreo
Sintaxis:
SBB destino, fuente
Esta instrucción resta los operandos y resta uno al resultado.
Propósito: Substracción
Sintaxis:
SUB destino, fuente Resta el operando fuente del destino.
2¿instrucciones de comparación?
Instrucciones de comparación Son usadas para comparar operandos, afectan al contenido de las banderas.
CMP CMPS (CMPSB) (CMPSW)
Instrucciones de banderas Afectan directamente al contenido de las banderas.
CLC CLD CLI CMC STC STD STI
Instrucción JMP
Propósito: Salto incondicional
Sintaxis:
JMP destino
Esta instrucción se utiliza para desviar el flujo de un programa sin tomar en cuenta las condiciones actuales de las banderas ni de los datos.
Instrucción JA (JNBE)
Propósito: Brinco condicional
Sintaxis:
JA Etiqueta
Después de una comparación este comando salta si está arriba o salta si no está abajo o si no es igual.
JB etiqueta
Salta si está abajo o salta si no está arriba o si no es igual.
Se efectúa el salto si CF esta activada.
Instrucción JBE (JNA)
Propósito: salto condicional
Sintaxis:
JBE etiqueta
Salta si está abajo o si es igual o salta si no está arriba.
El salto se efectúa si CF está activado o si ZF está activado (que cualquiera sea igual a 1).
Instrucción JE (JZ)
Propósito: salto condicional
Sintaxis:
JE etiqueta
Salta si es igual o salta si es cero.
Instrucción JNE (JNZ)
Propósito: salto condicional
Sintaxis:
JNE etiqueta
Salta si no es igual o salta si no es cero.
El salto se efectua si ZF está desactivada.
Instrucción JG (JNLE)
Propósito: salto condicional, se toma en cuenta el signo.
Sintaxis:
JG etiqueta
Salta si es más grande o salta si no es menor o igual.
El salto ocurre si ZF = 0 u OF = SF.
Instrucción JGE (JNL)
Propósito: salto condicional, se toma en cuenta el signo.
Sintaxis:
JGE etiqueta
Salta si es más grande o igual o salta si no es menor que.
El salto se realiza si SF = OF
Instrucción JL (JNGE)
Propósito: salto condicional, se toma en cuenta el signo.
Sintaxis:
JL etiqueta
Salta si es menor que o salta si no es mayor o igual.
El salto se efectúa si SF es diferente a OF.
Instrucción LOOPNE
Propósito: Generar un ciclo en el programa, considerando el estado de ZF
Sintaxis:
LOOPNE etiqueta
Esta instrucción decrementa en uno a CX y transfiere el flujo del programa solo si ZF es diferente a 0.
Instrucción DEC
Propósito: Decrementar el operando
Sintaxis:
DEC destino
Esta operación resta 1 al operando destino y almacena el nuevo valor en el mismo oeprando.
Instrucción INC
Propósito: Incrementar el operando.
Sintaxis:
INC destino
La instrucción suma 1 al operando destino y guarda el resultado en el mismo operando destino.
Instrucción CMP
Propósito: Comparar los operandos.
Sintaxis:
CMP destino, fuente
Esta instrucción resta el operando fuente al operando destino pero sin que éste almacene el resultado de la operación, solo se afecta el estado de las banderas.
Instrucción CMPS (CMPSB) (CMPSW)
Propósito: Comparar cadenas de un byte o palabra.
Sintaxis:
CMP destino, fuente
Con esta instrucción la cadena de caracteres fuente se resta de la cadena destino.
Se utilizan DI como indice para el segmento extra de la cadena fuente y SI como indice de la cadena destino.
Solo se afecta el contenido de las banderas y tanto DI como SI se incrementan.
Instrucción CLC
Propósito: Limpiar bandera de acarreo.
Sintaxis:
CLC
Esta instrucción apaga el bit correspondiente a la bandera de acarreo, o sea, lo pone en cero.
Instrucción CLD
Propósito: Limpiar bandera de dirección
Sintaxis:
CLD
La instrucción CLD pone en cero el bit correspondiente a la bandera de dirección.
Instrucción CLI
Propósito: Limpiar bandera de interrupción.
SALTOS CONDICIONALES
Se basan completamente en los flags.
BUCLES
Equivalente al FOR-TO-NEXT en ensamblador, se trata de la
orden LOOP. Lo que hace ‚esta orden es comparar CX con cero; si es igual,
sigue adelante, si no lo es, vuelve al lugar que se indica en su operando
decrementando CX en uno. Por lo tanto, CX ser un contador de las veces
que ha de repetirse el bucle.
3¿Instrucciones de salto?
SALTO SIN CONDICIONES:
Con ellas se puede cambiar el control a cualquier punto del programa.
Seria como el "GOTO" del BASIC, simplemente transferir el control a otro punto del programa.
JMP ( de Jump, salto )
Incrementar o decrementar IP para llegar a la zona del programa a la que queremos transferir el control ( IP es el Offset que indica la zona de memoria que contiene la siguiente instrucción a ejecutar, y CS el segmento ).
JMP 100h
Salta a la dirección 100h. Un archivo .COM comienza normalmente en esa dirección, así que quiz lo ve is en algunos virus.
JMP 542Ah:100h
Salta a la dirección 100h pero del segmento 542Ah. ¨ Os acordais aún de los Segments y Offsets ?. Se trata de un salto lejano.
JMP SHORT 223Ah
Salto corto a la dirección 223Ah. Tranquilidad, ahora explico lo de salto corto, lejano.
SALTOS CONDICIONALES:
JP, JPE: Jump if Parity o Jump if Parity Even. Salta si el flag de
paridad est a uno.
JNP, JPO: Jump if Not Parity, Jump if Parity Odd. Salta si el flag de
paridad est a cero.
JL, JNGE: Jump if Less, Jump if Not Greater of Equal. Salta si en el
resultado de la comparación, el primer número es inferior al segundo, pero
con números con signo.
JGE, JNL: Jump if Greater or Equal, Jump if Not Less. Salta si en el
resultado de la comparación, el primer número es mayor o igual que el
segundo, pero con números con signo.
XOR AX,AX
XOR BX,BX ; AX y BX valen ahora cero.
Espero que con ‚esto haya aclarado un poco la utilidad de los saltos.
Evidentemente, ahora al escribir sabemos cuando uno es menor o mayor, pero
a veces mediante interrupciones sacaremos valores que no conoceremos al ir
a programar, o quiz lo hagamos de la memoria, y queremos comprobar si
son iguales, etc.
4¿Instrucciones para el stack?
“Stack” significa pila en inglés, pila en el sentido de “apilar cosas”, no de batería eléctrica. Es una zona de la memoria en donde se guardan cosas. Todo el manejo del stack lo realiza el compilador de forma automática.Lo más importante de esta estructura es que en cada momento sólo se tiene acceso a la parte superior del stack (no a las cosas que están apiladas debajo).
La pila es una zona de la memoria sobre la que se pueden escribir y leer datos de forma convencional. Esta zona tiene una posición especial que se denomina “la cima de la pila”. El procesador contiene dos instrucciones de su lenguaje máquina para realizar las operaciones de “apilar” y “des apilar” datos de la pila. Los datos que se pueden apilar y des apilar, en el caso del Intel Pentium son siempre de tamaño 4 bytes.
5¿Qué son los macros y para que sirven?
Un macro ensamblador es un ensamblador modular, descendiente de los ensambladores básicos. Fueron muy populares en los años 1950 y años 1960, antes de la generalización de los lenguajes de alto nivel. Hacen todo lo que puede hacer un ensamblador, y además proporcionan una serie de Directivas para definir y ejecutar macro instrucciones (o simplemente, Macros). Cuando ejecutamos a una “macro”, ésta se expande al cuerpo que hayamos definido.
Macro, del griego μακρο significa “grande”.
Sirven para proporcionar una serie de directivas para ejecutar y definir las intrucciones del macro.
6¿Qué son las interrupciones y a quienes afectan?
Interrupciones son un “mecanismo” por medio del cual hacemos que
No hay comentarios:
Publicar un comentario