iNSTRuCCioNeS BaSiCaS De eNSaMBLaDoR

 

En este apartado os presentare unas cuantas instrucciones básicas de ensamblador. No espereis saber programar en este lenguaje con lo que os voy a presentar (para ello debereis seguir otros tutoriales, como los que estoy haciendo yo y que podras encontrar en mi web, ;-)), esto tan solo es una pequeña ayuda para que entendais como funciona un programa y no os perdais en el codigo. Para ello empezare con los diferentes tipos de saltos que existen en Ensamblador (Asm de ahora en adelante).

Empezaremos diciendo que en ensamblador no existen las instrucciones IF (bueno, si que existen pero no con la misma utilidad que tienes para lenguajes de alto nivel como C), FOR, WHILE ... en sustitucion a esto, existen todo tipo de saltos condicionales. Por ejemplo:

mov ax,05 <-- AX = 5

mov bx,06 <-- BX = 6

cmp ax,bx <-- Compara AX com BX

je Bien <-- JE (Jump if Equal) Salta a "Bien" si AX y BX son iguales
[Mal] <-- Si son diferentes, continua con la siguiente instruccion

Despues de esto os presentare una serie de saltos:

JA

Salto si esta encima de

JAE

Salto si esta encima de o igual

JB

Salto si debajo de

JBE

Salto si debajo de o igual

JC

Salto si lleva (acarreo)

JCXZ

Salto si CX = 0

JECXZ

Salto si ECX = 0

JE

Salto si igual

JG

Salto si mayor

JGE

Salto si mayor o igual

JL

Salto si menor

JLE

Salto si menor o igual

JNA

Salto si no encima de

JNAE

Salto si no encima de o igual

JNC

Salto si no hay acarreo

JNE

Salto si no igual

JNG

Salto si no mayor

JNGE

Salto si no mayor o igual

JNL

Salto si no menor

JNLE

Salto si no menor o igual

JNO

Salto si no Overflow (dividido entre 0)

JNP

Salto si no paridad

JNS

Salto si no signo (es decir igual a cero)

JNZ

Salto si no es cero

JO

Salto si Overflow

JP

Salto si paridad

JPE

Salto si la paridad es igual

JPO

Salto si la parida es impar

JS

Salto si hay signo

JZ

Salto si es cero

JMP

Salto incondicional (es decir salta siempre)

Bueno esta es la lista (creo que completa) de los salto que existen en ensamblador. Ya es hora de que vayamos a por los registros básicos:


Los registros internos son 14, cuyos Bits se numeran de derecha a izquierda, siendo 0 el Bit menos significativo. Los registros que ahora indico son los de 16 bits, para los registros de 32 bits (los usados hoy en dia) debemos poner una "E" delante.


Registros de Datos


AX (EAX) = Acumulador. Registro principalutilizado en la instruccuiones aritméticas

BX (EBX) = Base. Se usa para indicar un desplazamiento (Offset)

CX (ECX) = Contador. Se utiliza como contador en los bucles y en operaciones repetitivas

DX (EDX) = Dato. Se usa también en operaciones aritméticas


Registros de Segmentos


CS = Registro de segmento de código (Code Segment). Contiene la dirección del segmento de código

DS = Registro de segmento de datos (Data Segment). Contiene la dirección del segmento de datos

SS = Registro de segmento de pila (Stak Segment). Contiene la dirección del segmento de pila

ES = Registro de segmento extra (Extra Segment). Contiene la dirección del segmento extra


Registros Punteros de la Pila

SP (ESP) = Puntero de la pila (Stak Pointer) Contiene la dirección relativa al segmento de la pila

BP (EBP) = Puntero base (Base Pointer) Se usa para fijar el puntero de la pila


Registro de Instrucción

IP (EIP) = Puntero de Instrucción (Instructuion Pointer). También llamado contador de programa. Contiene el desplazamiento de la instrucción siguiente a ejecutar respecto al segmento de código del programa en ejecución. Unido a CS (CS:IP) indica la dirección completa de la siguiente instrucción a ejecutar.


Despues de esto tenemos los registros de banderas:


Registro de Banderas (de estado)

CF = Bandera de Acarreo (Carry Flag) Indica el acarreo en intrucciones aritméticas

OF = Bandera de desbordamiento (Overflow Flag)

ZF = Bandera de resultado cero o comparación igual (Zero Flag)

SF = Bandera de resultado o comparación negativa (Sign Falg)

PF = Bandera de paridad (Parity Falg)

AF = Bandera auziliar (Auxiliar Falg)


Registro de Banderas (de control)

DF = Bandera de dirección (Direction Flag)

IF = Bandera de interrupciones (Interrupt Flag)

TF = Bandera de atrape (Trap Flag) Controla la operación modo paso a paso


Debemos indicar que los registros de datos poseen dos "partes" (por asi decirlo). La parte alta (High) y la parte baja (Low) por ello pueden ser divididos asi:

AX = AH (High) + AL (Low)

Si AX es de 16 bits, AH es de 8 bits y AL tambien de 8 Bits, pero si es EAX (32 Bits), logicamente AH y AL seran de 16 Bits cada una.


Se que esta introduccion de Ensamblador es un poco floja pero creo que es suficiente para defenderte algo en el cracking, si quereis saber mas mirad en la seccion de "Direcciones a tener en cuenta".