Lenguaje Ensamblador (Referencia Rapida)

Este es un compendio de algunas de las instrucciones de lenguaje ensamblador (no todas), que mas se usan para nuestra finalidad; es importante notar que hay que tener un pequeño conocimiento teorico del lenguaje, como los registros, numeracion hexadecimal,etc. Los completamente nuevos les recomiendo que echen una ojeada aqui ; encontraran varios links sobre lenguaje ensamblador, lastimosamente todas en ingles (creo). La verdad encontre muy poca y mala informacion sobre el lenguaje en español (no significa que no la haya), pero solo hice una busqueda superficial, de cualquier modo si recibo suficiente estimulo de parte de ustedes podria llegar a traducir algunas al español. Finalmente, espero que este pequeño grano de arena les sirva en la emocionante aventura del cracking.
Ante cualquier duda,sugerencia o queja.. a no dudar escribid:D.A[The Paraguayan Cracker]



ADC
Add with carry (Sumar con acarreo):ADC suma el contenido del operando fuente al operando de destino(y almacena el resultado en este).Si la bandera de acarreo esta activada, el resultado cambia en un incremento de 1.En esta rutina, se supone que los valores sumados son binarios.



ADD
Add (Sumar): ADD suma el contenido del operando fuente al operando de destino( y almacena el resultado en este).


AND
Logical AND on bits( Y logico sobre bits): Esta instruccion realiza un Y logico de los operandos y almacena el resultado en el operando de destino.Cada bit del byte o palabra resultante se activa en 1 solo si el bit corespondiente de cada operando tambien se activa en 1.Las banderas de acarreo y de sobreflujo se limpian mediante esta operacion.


BSF
Bit scan forward( Examen de bits hacia delante): BSF examina los bits del segundo operando( comenzando con el bit 0) para ver si alguno esta activado.Si todos los bits estan limpios( el segundo operando es 0), el primer operando no se modifica, y se activa la bandera de cero. Si algun bit esta activado, la bandera de cero se limpia y el primer operando se activa igual que el numero del bit activado.


BSR
Bit scan reverse( Examen de bits hacia atras): Igual que BSF pero empezando con el bit de alto orden.


BT
Bit Test( Prueba de bits): BT usa el valor del segundo operando como indice de bit en el valor del primer operando.El bit que esta en la posicion indizada del primer operando se copia en la bandera de acarreo


BTC
Bit test and complement( Prueba de bits y complemento): BTC usa el valor del segundo operando como indice de bits en el valor del primer operando.El valor opuesto del bit en la posicion indizada del primer operando se copia en la bandera de acarreo.


BTR
Bit test and reset ( Prueba de bits y reinicio): BTR usa el valor del segundo operando como indice de bits en el valor del primer operando. El bit de la posicion indizada del primer operando se copia en la bandera de acarreo, y despues se limpia el valor del bit original.


BTS
Bit test and set (Prueba de bits y activacion): BTS usa el valor del segundo operando como indice de bits en el valor del primer operando. El bit de la posicion indizada del primer operando se copia en la bandera de acarreo, y despues se activa el valor del bit original.


CALL
Perform subroutine (Ejecutar subrutina): CALL hace lo sgte.: 1) mete la direccion de desplazamiento de la siguiente instruccion en la pila; 2) si el procedimiento llamado se declara domo far (lejano), mete la direccion de segmento de la siguiente instruccion en la pila; 3) carga IP (puntero a instruccion) con la direccion de desplazamiento del procedimiento llamado; y 4) si el procediento llamado se declara como far, carga CS (segmento de codigo) con la direccion de segmento del procedimiento llamado.
La ejecucion continua entonces en la recien cargada direccion CS:IP hasta que se encuentre RET.


CBW
convert byte to word (Convertir el byte en palabra):CBW convierte el valor de byte en AL a un valor de palabra en AX extendiendo el valor de bit de alto orden de AL a travez de todos los bits de AH.


CLC
clear carry flag (limpiar la bandera de acarreo): CLC limpia la bandera de acarreo del registro de banderas poniendo la bandera en 0.


CMP
Compare (comparar): CMP se considera una instruccion aritmetica debido a que el operando fuente se sustrae del operando destino. Sin embargo, el resultado se emplea para activar las banderas; no se almacena en ningun lugar. Se puede hacer una prueba posterior de las banderas para el control del programa.


CMPSB
Compare Strings, byte for byte (Comparar cadenas, byte por byte): CMPSB compara cadenas, byte por byte.DI(indice de destino y SI (indice de fuente) cambian en incrementos o decrementos de 1, dependiendo de la disposicion de la bandera de direccion. Normalmente, esta instruccion se usa con las instrucciones REPE,REPNE,REPNZ o REPZ a fin de repetir la comparacion para un maximo de CX numeros de bytes. Esta instruccion afecta solo las banderas; no se hace ningun cambioa los operandos.


CMPSW
Comparar cadenas, palabra por palabra: LO mismo que arriba solo que DI y SI cambian en incrementos o decrementos de 2.


CMPSD
Compara cadenas, palabra doble por palabra doble: Lo mismo que arriba pero EDI y ESI cambian en incrementos de 4.

CWD
Convertir una palabra en palabra doble: CWD convierte el valor de palabra de AX a un valor de palabra doble en DX:AX extendiendo el valor de bit de alto orden de AX a travez de todos los bits de DX.

DEC
Decrementar: DEC cambia, en decremento de 1, el contenido del operando.

DIV
Dividir: Si el operando es un valor de byte, DIV divide el contenido de AX entre el contenido del operando y luego almacena el resultado en AL y el residuo en AH. Si el operando es un valor de palabra, DIV divide el contenido de DX:AX entre el contenido del operando y luego almacena el resultado en AX y el residuo en DX.

ENTER
Crear estructura de pila para parametros de procedimiento: Modifica la pila adecuadamente para entrar a un procedimiento de lenguaje de alto nivel. El primer operando especifica el numero de bytes de almacenamiento que debe asignarse a la pila; el segundo especifica el nivel de anidamiento de la rutina. Los efectos de esta instruccion se deshacen mediante la instruccion LEAVE.

IDIV
Division de enteros: SI el operando es un valor de byte, IDIV divide el contenido de AX entre el contenido del operando; luego almacena el resultado en AL y el residuo de AH. Si el operando es un valor de palabra, IDIV divide el contenido de DX:AX entre el contenido del operando y luego almacena el resultado en AX y el residuo en DX.

IMUL
Multiplicacion de enteros: Si el operando es un valor de byte, IMUL multiplica AL por el contenido del operando y almacena el resultado en AX. Si el operando es un valor de palabra, IMUL multiplica el contenido de AX por el contenido del operando y almacena el resultado en DX:AX.

INC
Incrementar: INC cambia, mediante incrementos de 1, el contenido del operando.

JA
Saltar si es arriba o mayor: JA ocasiona que la ejecucion de un programa se ramifique hacia la direccion del operando si la bandera de acarreo esta limpia. Esta instruccion es funcionalmente igual que JNB o JNC.

JB
Saltar si es abajo o menor: Lo mismo que arriba pero si la bandera de acarreo eta activada.

JBE
Saltar si es abajo o igual: Lo mismo que arriba pero si esta activada la bandera de acarreo o la de cero.

JCXZ
Saltar si CX=0: Lo mismo que los anteriores pero si el valor de CX=0.

JE
Saltar si es igual: Salta si la bandera de cero esta activada. Es equivalente a JZ

JG
Saltar si es mayor: Salta si la bandera de signo es igual a la de sobreflujo o si la bandera de cero esta limpia

JGE
Saltar si es mayor o igual: Salta si la bandera de signo es igual a la de sobreflujo.

JL
Saltar si es menor: Salta si la bandera de signo no s igual a la de sobreflujo.

JLE
Saltar si es menor o igual: Salta si la bandera de signo no es igual a la de sobreflujo o si la bandera de cero esta activada.

JMP
Saltar: Salta directamente a la direccion del operando.

JNA
Saltar si no es arriba: Salta si esta activada la bandera de acarreo o de cero. Es funcionalmente igual que JBE.

JNAE
Saltar si no es arriba o igual: Salta si la bandera de acarreo esta activada. Es funcionalmente igual que JB.

JNB
Saltar si no es abajo: Salta si la bandera de acarreo esta en cero.

JNBE
Saltar si no es abajo o igual: Salta si tanto la bandera de acarreo como la de cero estan limpias.

JNE
Saltar si no es igual: Salta si la bandera de cero esta limpia.Es funcionalmente igual que JNZ

JNZ
Saltar en no cero: Salta si la bandera de cero esta limpia.

JZ
Saltar en cero: Salta si la bandera de cero esta activada.Es funcionalmente igual que JE.

LEA
Cargar la direccion efectiva: LEA transfiere la direccion de desplazamiento del operando fuente al operando de destino. El operando de destino debe ser un registro general de palabras.

LEAVE
Salida de procedimiento de alto nivel: Deshace los cambios realizados por la instruccion ENTER. Esta instruccion se usa para salir de subrutinas de lenguajes de alto nivel.

LODSB
Cargar un byte de cadena en AL: Esta instruccion carga AL con el contenido de la direccion apuntada por SI. Despues SI cambia en incrementos o decrementos de 1, dependiendo de la activacion de la bandera de direccion.

LODSW
Cargar una palabra de cadena de AX: Lo mismo que arriba pero en incrementos o decrementos de 2.

LOOP
Ciclo: Basandose en el contenido de CX, la ejecucion del programa se ramifica hacia la direccion del operando de destino. Si CX no es igual a 0, CX cambia en decrementos de 1 y ocurre la ramificacion. Si CX es 0 no ocurre decremento o ramificacion y la ejecucion continua en la siguiente instruccion.

LOOPE
Ciclo mientras es igual: Basandose en el contenido de CX y en la bandera de cero, la ejecucion del programa se ramifica hacia la direccion del operando de destino. Si CX no es igual a 0 y la bandera de cero esta activada, CX cambia en decrementos de 1 y ocurre la ramificacion. Si CX es 0 o si la bandera de cero esta limpia, no ocurre decemento o ramificacion, y la ejecucion continua en la sgte. instruccion

LOOPNE
Ciclo mientras no es igual: Si CX no es igual a 0 y la bandera de cero esta limpia, CX cambia en decremenos de 1 y ocurre la ramificacion. Si CX es cero o la bandera de cero esta activada, no pasa nada.

LOOPNZ
Ciclo mientras no es cero: Si CX esta no es igual a cero y la bandera de cero esta limpia, CX cambia en decrementos de 1 y ocurre la ramificacion.

LOOPZ
Ciclo mientras es cero: Lo mismo que LOOPE

MOV
Transferir: MOV copia el contenido del operando fuente en el operando de destino. Ambos operandos deben tener la misma longitud.

MOVSB
Transferir una cadena, byte por byte: Los valores de SI y DI cambian en incrementos o decrementos de 1, dependiendo de la activacion de la bandera de direccion. Normalmente, esta instruccion se usa con la instruccion REP a fin de repetir la transferencia para un maximo de bytes de CX.

MOVSW
Multiplicar:Transferir una cadena, palabra por palabra: Lo mismo que arriba pero en incrementos de 2

MUL
Si el operando es un valor de byte, MUL multiplica el contenido de AL por el contenido del operando y almacena el resultado en AX. Si el operando es un valor de de palabra, MUL multiplica el contenido de AX por el contenido del operando y almacena el resultado en DX:AX. Si el operando es un valor de palabra doble, multiplica el contenido de EAX por el contenido del operando y almacena el resultado en EDX:EAX

NEG
Negar: NEG calcula el complemento a dos del operando de destino y almacena el resultado en ese operando.Este calculo es efectivamente igual que restar el operando de destino de 0.

NOP
Ninguna operacion: NOP simplemente toma espacio y tiempo y ocaciona que la UCP no haga nada.

NOT
NO logico en bits: Invierte los bits en el operando destino (0 se convierte en 1 y viceversa) y almacena los bits invertidos en el operando de destino.

OR
O logico en bits: Esta instruccion realiza un O logico de los operandos y almacena el resultado en el operando de destino.Cada bit del byte o palabra resultante se pone en 1 si uno o ambos bits correspondientes a cada operando se ponen en 1.

OUT
Salir a puerto: OUT envia un byte (AL) o palabra (AX) o palabra doble (EAX) a la direccion de puerto de E/S de hardware especificada. Un numero de puerto menor que 256 puede especificarse como una constante o como una variable en el registro DX. Sin embargo, un numero de puerto mayor que 255 debe especificarse en el registro DX.

OUTSD
Salida de una palabra doble de cadena a puerto: Envia una palabra de la direccion especificada por DS:[ESI] a la direccion de puerto de E/S de hardware especificada en DX. Despues de la transferencia DI cambia en incrementos o decrementos de 4, dependiendo de la activacion de la bandera de direccion.

POP
Sacar datos de la pila: POP traslada una palabra o una palabra doble (dependiendo del tamaño del operando) de la pila y la coloca en el operando de destino deseado.

POPAD
Sacar todos los registros generales de palabras dobles: Traslada y carga los registros de proposito general de la pila en este orden: EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX.

POPFD
Trasladar banderas extendidas de la pila: Traslada una palabra doble de la pila y la coloca en el registro de banderas extendidas.

PUSH
Coloca datos en la pila: Coloca una copia del valor del operando en la pila.

PUSHAD
Meter todos los registros generales de palabra doble: Mete en la pila los egistros de palabra doble en este orden:EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI.

PUSHFD
Colocar banderas extendidas en la pila: Coloca una copia del registro de banderas extendidas en la pila.

RCL
Rotar a la izquierda a traves del acarreo: Rota todos los bits del operando de destino a la izquierda tantos lugares como indique el operando fuente. La rotacion se hace a traves de la bandera de acarreo en un orden que rota el bit mas significativo del operando de destino hacia la bandera de acarreo, y esta hacia el bit menos significativo del operando de destino.

RCR
Rotar a la derecha a traves del acarreo: Rota todos los bits del operando de destino a la derecha tantos lugares como indique el operando fuente. La rotacion se hace a traves de la banera de acarreo en un orden que rota el bit menos significativo del operando de destino hacia la bandera de acarreo, y esta hacia el bit mas significativo

REP
Repetir: Ocasiona que las instrucciones de manipulacion de cadenas se repitan tantas veces como se indique en CX (si esta instruccion se usa con operandos de byte o de palabra) o en ECX (si esta instruccion se usa con operandos de palabra doble)

REPE
Repetir si es igual: Lo mismo que arriba pero si se usa con CMPSB,CMPSW,SCASB o SCASW, esta instruccion solo se repite cuando la bandera de cero esta activada.

REPNE
Repetir si no es igual: Lo mismo que REPE pero se repite cuando la bandera de cero esta limpia.

REPNZ
Repetir si no es cero: Igual que REPNE

REPZ
Repetir si es cero: Igual a REPE

RET
Volver de la subrutina: Al sacar a IP de la pila, RET transfiere el control del programa de vuelta al punto en que se emitio un CALL. Si CALL fuera una llamada a un procedimiento far, tanto CS como IP serian sacados de la pila. Si RET tiene un valor de retorno especificado, la pila se ajusta segun ese numero de bytes.

ROL
Rotar a la izquierda: Rota todos los bits del operando de destino a la izquierda tantos lugares como indique el operando fuente.

ROR
Rotar a la derecha: Rota todos los bits del operando de destino a la dercha tantos lugares como indique el operando fuente.

SAL
Desplazamiento aritmetico a la izquierda: Desplaza todos los bits del operando de destino a la izquierda tantos lugares como indique el operando fuente. Los bits de alto orden se pierden, mientras que los de orden inferior se limpian.

SAR
Desplazamiento aritmetico a la derecha: Desplaza todos los bits del operando de destino a la derecha tantos lugares como indique el operando fuente.
Los bits de orden inferior se pierden, mientras que los de alto orden se activan igual que el bit de alto orden existente.

SBB
Restar con acarreo: Resta el contenido del operando fuente del operando de destino (y almacena el resultado en este). Si la bandera de acarreo esta activada, el resultado cambia en decrementos de 1.

SCASB
Examinar una cadena por byte: Resta el byte de cadena del operando destino del valor de AL. No se almacena el resultado pero se actualizan las banderas. Entonces el valor de DI cambia en incrementos o decrementos de 1, dependiendo de la activacion de la bandera de direccion.
Normalmente esta instruccion se usa con las instrucciones REPE,REPNE,REPNZ o REPZ para repetir el examen un maximo de CX bytes, o hasta que SCASB encuentre una concordancia o una diferencia.

SCASW
Examinar una cadena por palabra: Resta la palabra de cadena del operando destino del valor de AX.. Entonces el valor de DI cambia en incrementos o decrementos de 2. dependiendo de la bandera de direccion.

SCASD
Examinar una cadena por palabra doble: Resta la palabra de cadena del operando de destino del valor de EAX. Despues cambia el valor de EDI en incrementos o decrementos de 4.

SHL
Desplazar a la izqierda: Desplaza todos los bits del operando de destino a la izquierda tantos lugares como indique el operando fuente. Los bits de alto orden se pierden y los de orden inferior se limpian.

SHR
Desplazar a la derecha: Desplaza todos los bits del operando de destino a la derecha tantos lugares como indique el operando fuente. Los bits de orden inferior se pierden y los de alto orden se limpian

STC
Activar la bandera de acarreo: Activa la bandera de acarreo sin importar la condicion presente de esta.

STD
Activar la bandera de direccion: Activa la bandera de direccion. Tal activacion afecta las instrucciones de cadenas.

STOSB
Almacenar el byte de AL en la cadena: Esta instruccion copia el contenido de AL en la direccion de byte apuntada por DI. Entonces DI cambia en incrementos o decrementos de 1, dependiendo de la activacion de la bandera de direccion.

STOSW
Almacenar palabra de AX en la cadena: Esta instruccion copia el contenido de AX en la direccion de palabras apuntada por DI. Entonces DI cambia en incrementos o decrementos de 2.

STOSD
Almacenar la palabra doble en EAX: Copia el contenido de EAX en la direccion de palabra apuntada por EDI. Luego DI cambia en incrementos o decrementos de 4.

SUB
Restar: Resta el contenido del operando fuente del operando de destino y almacena el resultado en este.

TEST
Probar bits: Realiza un Y logico de los operandos, pero el resultado no se almacena. Solo las banderas se afectan. Cada bit del byte o palabra resultante se activa en 1 solo si el bit correspondiente de cada operando es 1.

WAIT
Esperar: Ocasiona que la UCP espere una interrupcion externa en la linea de TEST antes de continuar.

XCHG
Intercambiar: Intercambia el contenido de los operandos fuente y destino. La longitud de ambos operandos debe ser la misma.

XOR
O exclusivo logico sobre bits: Esta instruccion realiza un XOR logico de los operandos y almacena el resultado en el operando de destino. Cada bit del byte o palabra resultante se pone en 1 solo si el bit correspondiente de cada operando contiene valors opuestos.


Compilado por D.A

Tutorial Descargado de Karpoff Spanis Tutor

www.000webhost.com