domingo, 6 de noviembre de 2011

Registros X86

Lugares donde se guardan o se visualizan los datos, con ellos se realiza toda función ejercida sobre un dato, sumar, restar, ejectar, guardar, entre otros.

AX Acumulador, de uso general. Se puede dividir en AH y AL. Obtendremos el mismo resultado si hacemos "MOV AX , FF00" que si hacemos primero "MOV AH , FF" y después "MOV AL , 00".
BX Registro base, de uso general. Se puede dividir en BH y BL.
CX Registro contador, de uso general. Se puede dividir en CH y CL.
DX Registro de datos, de uso general. Se puede dividir en DH y DL.
DS Registro del segmento de datos. Utilizado para apuntar a un segmento.
ES Registro del segmento extra. Lo mismo que DS.
SS Registro del segmento de pila. Nos indica el segmento donde se encuentra la pila (mas abajo hablaremos de ella).
CS Registro del segmento de código. Nos indica el segmento donde se encuentra el código que se está ejecutando.
BP Registro de apuntadores base. Digamos que este registro se utiliza para apuntar donde guardamos datos.
SI Registro índice fuente.
DI Registro índice destino.
SP Registro del apuntador de la pila. Este registro nos indica dónde está la pila en la que se guardan los datos que introducimos en ella.
IP Registro que apunta a la siguiente instrucción que se tiene que ejecutar.
F Registro de flags. Este registro es necesario leerlo en binario. Cada bit representa el resultado de alguna operación, por ejemplo si comparamos dos números este en este registro encontramos información sobre si uno es menor o mayor que el otro o si son iguales, etc. Los flags (o banderas) son los siguientes CF, PF, AF, ZF, SF, TF, IF y OF.


 - La pila: es utlizada en caso de qe se necesiten ejecutar una mayor cantidad de datos numericos que los que la cantidad de registros, es decir, se necesita más espacio, y para ello hacemos losiguiente:

MOV AX , PRIMER_NUMERO.... <= cargamos en Ax el número
PUSH AX ................................. <=
lo dejamos caer el número en la pila
MOV AX , SEGUNDO_NUMERO. <=
cargamos en AX el siguiente nº
PUSH AX.................................. <= y también lo descargamos en la pila.


Ya estan todos los datos colocados, pero ahora para recuperar lo introducido en la pila, hay que saber que siempre sale primero el último dato que entra, este es el motivo de que se le llame pila, se apilan los datos. 

POP AX ....................................<= Recupera de la pila EL ULTIMO DATO INTRODUCIDO y lo deposita en el registro AX.

Ahora, para guardar y recuperar un dato de la pila:


PUSH REGISTRO...................... <= Guarda en la pila un registro.
PUSH NUMERO......................... <=
Guarda en la pila un número.
PUSHF...................................... <=
Guarda en la pila los flag.
PUSHA...................................... <=
Guarda en la pila los registros AX, CX, DX, BX, SP, BP, SI y DI en este mismo orden.
POPA........................................ <= Recupera de la pila los registros DI, SI, PB, SP, BX, DX, CX y AX en este mismo orden.
POPF........................................ <= Recupera de la pila los flags.
POP REGISTRO......................... <= recupera un dato de la pila y lo deposita en "REGISTRO".

 

No hay comentarios:

Publicar un comentario