Você está na página 1de 5

PILAS

La pila es una zona de la memoria sobre la que se pueden escribir y leer datos de forma convencional. Esta zona tiene una posicin especial que se denomina la cima de la pila. El procesador contiene dos instrucciones de su lenguaje mquina para realizar las operaciones de apilar y desapilar datos de la pila. Los datos que se pueden apilar y desapilar, en el caso del Intel Pentium son siempre de tamao 4 bytes. INSTRUCCIONES DE MANEJO DE LA PILA La instruccin para apilar un dato en la pila tiene el formato push dato. Es una instruccin con un nico operando que deposita el dato especificado como parmetro en la cima de la pila. Supngase que la cima de la pila est en la posicin @cima. La instruccin push dato produce el siguiente efecto. Se resta 4 a la direccin de la cima de la pila, se obtiene, por tanto @cima - 4. Se escribe el dato de 32 bits dado como nico operando en la posicin de memoria indicada por @cima - 4 y la direccin de la cima se asigna a este nuevo valor. El dato que estaba previamente almacenado en esas posiciones se ha perdido. De la descripcin de la instruccin push se deduce que efecta una operacin de escritura en memoria RAM. Si a continuacin de esta instruccin se ejecuta otra del mismo tipo, el dato se almacena a partir de la cuarta posicin de memoria antes del ltimo valor depositado en de la pila. La instruccin pop destino ejecuta el procedimiento complementario al de push dato. Tiene un nico operando que, en este caso, especifica el lugar en el que almacenar el dato que se encuentra en la cima de la pila. Supngase que la cima de la pila est en la posicin de memoria @code. La ejecucin de la instruccin pop destino tiene el siguiente efecto. Se lee el dato de 32 bits almacenado en la posicin de memoria indicada por la direccin de la cima @cima y se almacena en el lugar especificado como operando de la instruccin. Se suma 4 a la direccin de la cima de la pila, se obtiene, por tanto @cima + 4. Los destinos posibles que se pueden especificar en la instruccin pop dependen del lenguaje mquina del procesador, pero en el Pentium se permite especificar cualquier registro de propsito general de 32 bits como operando de esta instruccin. Por ejemplo, la instruccin pop edx y ajusta la direccin de la cima.

COMPARACION
Instruccin genrica para comparar La instruccin es CMP, sta permite comparar 2 operandos, la sintaxis es la siguiente: CMP <Operador 1>, <Operador 2> El operador 1, se compara con el 2. Los operandos pueden ser cualquier direccionamiento vlido, cumpliendo las reglas de la instruccin MOV con respecto a los operandos. sta instruccin compara 2 operandos y luego cambia el registro de banderas en base al resultado de la comparacin.

SALTOS INCONDICIONALES
Saltos incondicionales: La instruccin JMP es la que se utiliza para un salto no condicional; esto, significa que cuando se ejecuta una instruccin JMP, el registro EIP que contiene la direccin de la siguiente instruccin a ejecutar va a apuntar a la direccin indicada por el JMP. Existen bsicamente tres tipos de salto: -Salto cercano o Near Jump: Es un salto a una instruccin dentro del segmento actual (el segmento al que apunta el registro CS). -Salto lejano o Far Jump: Se trata de un salto a una instruccin situada en un segmento distinto al del segmento de cdigo actual. -Cambio de Tarea o Task Switch: Este salto se realiza a una instruccin situada en una tarea distinta, y slo puede ser ejecutado en modo protegido. Cuando estemos programando, lo normal es que utilicemos etiquetas y saltos cercanos. En todo compilador, si escribimos la instruccin JMP , al compilar el fichero la etiqueta ser sustituida por el valor numrico de la direccin de memoria en que se encuentra el lugar donde queremos saltar.

SALTO CONDICIONAL
El ensamblador permite usar una variedad de instrucciones de salto condicional que transfieren el control dependiendo de las configuraciones en el registro de banderas. Por ejemplo, puede comparar dos campos y despus saltar de acuerdo con los valores de las banderas que la comparacin establece. El formato general para el salto condicional es: | [etiqueta:] | Jnnn | direccin corta | Como ya se explico la instruccin LOOP disminuye el registro CX; si es diferente de cero, transfiere el control a la direccin del operando. podra reemplazar el enunciado LOOP A20 de la figura anterior con dos enunciados - uno que decremente el CX y otro que realice un salto condicional: DEC CX ;Equivalente a LOOP JNZ A20 ... DEC y JNZ realizan exactamente lo que hace LOOP. DEC decrementa en 1 CX y pone a 1 o a 0 la bandera de cero (ZF) en el registro de banderas. Despus JNZ prueba la configuracin de la bandera de cero; si el CX es diferente de cero, el control pasa a A20, y si el CX es cero el control pasa a la siguiente instruccin hacia abajo DATOS CON SIGNO Y SIN SIGNO Distinguir el propsito de los saltos condicionales debe clarificar su uso. El tipo de datos (sin signo o con signo) sobre los que se realizan las comparaciones o la aritmtica puede determinar cual es la instruccin a utilizar. Un dato sin signo trata todos los bits como bits de datos; ejemplos tpicos son las cadenas de caracteres, tal como nombres o direcciones, y valores numricos tal como nmeros de cliente. Un dato con signo trata el bit de mas a la izquierda como un signo, en donde 0 es positivo y 1 es negativo. En el ejemplo siguiente, el AX contiene 11000110 y el BX contiene 00010110. La siguiente instruccin CMP AX, BX

compara el contenido de AX con el contenido del BX. Para datos sin signo, el valor AX es mayor; sin embargo, para datos con signo el valor AX es menor a causa del signo negativo.

BANDERAS
BANDERAS las banderas son espacios de memoria. Las banderas mas comunes son las siguientes: OF (overflow, desbordamiento): Indica desbordamiento del bit de mayor orden despus de una operacin aritmtica de nmeros signados (1=existe overflow; 0=no existe overflow). Para operaciones sin signo, no se toma en cuenta esta bandera. DF (direccin): Controla la seleccin de incremento o decremento de los registros SI o DI en las operaciones con cadenas de caracteres (1=decremento automtico; 0=incremento). La bandera DF se controla con las instrucciones STD y CLD. IF (interrupcin): Indica que una interrupcin externa sea procesada o ignorada (1=habilita la interrupcin; 0=deshabilita la interrupcin). El estado de la bandera IF se controla con las instrucciones STI y CLI. TF (trampa): Permite la operacin del procesador en modo de depuracin (paso a paso) SF (signo): Contiene el signo resultante de una operacin aritmtica (0=positivo; 1=negativo). ZF (cero): Indica el resultado de una operacin aritmtica o de comparacin (0=resultado diferente de cero; 1=resultado igual a cero). AF (acarreo auxiliar): Contiene un acarreo externo del bit 3 en un dato de 8 bits, para aritmtica especializada. Esta bandera se prueba con las instrucciones DAA y DAS para ajustar el valor de AL despus de una suma o resta BCD. PF (paridad): Indica paridad par o impar en una operacin de datos de ocho bits (0=paridad impar; 1=paridad par). CF (acarreo): Contiene el acarreo de los bits de mayor orden despus de una operacin aritmtica; tambin almacena el contenido del ltimo bit en una operacin de corrimiento o de rotacin.

CADENAS
CMPS/CMPSB/CMPSW (Compara cadenas). Sintaxis: CMPS cadena_destino, cadena_origen CMPSB (bytes) CMPSW (palabras) OF DF IF TF SF ZF AF PF CF x---xxxxx

INDICADORES: Compara dos cadenas restando al origen el destino. Ninguno de los operandos se alteran, pero los indicadores resultan afectados. La cadena origen se direcciona con registro SI sobre el segmento de datos DS y la cadena destino se direcciona con el registro DI sobre el segmento extra ES. Los registros DI y SI se autoincrementan o autodecrementan segn el valor del indicador DF (vanse CLD y STD) en una o dos unidades, dependiendo de si se trabaja con bytes o con palabras. Cadena origen y cadena destino son dos operandos redundantes que slo indican el tipo del dato (byte o palabra) a comparar, es ms cmodo colocar CMPSB o CMPSW para indicar bytes/palabras. Si se indica un registro de segmento, ste sustituir en la cadena origen al DS ordinario. Ejemplo: LEA SI, ORIGEN LEA DI, DESTINO CMPSB LODS/LODSB/LODSW (Cargar cadena). LODS cadena_origen LODSB (bytes) LODSW (palabras) INDICADORES: OF DF IF TF SF ZF AF PF CF --------Copia en AL o AX una cadena de longitud byte o palabra direccionada sobre el segmento de datos (DS) con el registro SI. Tras la transferencia, SI se incrementa o decrementa segn el indicador DF (vanse CLD y STD) en una o dos unidades, segn se estn manejando bytes o palabras. Cadena_origen es un operando redundante que slo indica el tipo del dato (byte o palabra) a cargar, es ms cmodo colocar LODSB o LODSW para indicar bytes/palabras. Ejemplo: CLD LEA SI, ORIGEN LODSB Sintaxis: MOVS/MOVSB/MOVSW (Mover cadena). Sintaxis: MOVS cadena_destino, cadena_origen MOVSB (bytes) MOVSW (palabras) OF DF IF TF SF ZF AF PF CF ------INDICADORES: Transfiere un byte o una palabra de la cadena origen direccionada por DS:SI a la cadena destino direccionada por ES:DI, incrementando o decrementando a continuacin los registros SI y DI segn el valor de DF (vanse CLD y STD) en una o dos unidades, dependiendo de si se trabaja con bytes o con palabras. Cadena origen y cadena destino son dos operandos redundantes que slo indican el tipo del dato (byte o palabra) a comparar, es ms cmodo colocar MOVSB o MOVSW para indicar bytes/palabras. Si se indica un registro de segmento, ste sustituir en la cadena origen al DS ordinario. Ejemplo: LEA SI, ORIGEN LEA DI, DESTINO MOVSW SCAS/SCASB/SCASW (Explorar cadena). Sintaxis: SCAS cadena_destino SCASB (bytes) SCASW (palabras) OF DF IF TF SF ZF AF PF CF x ---xxxxx INDICADORES: Resta de AX o AL una cadena destino direccionada por el registro DI sobre el segmento extra. Ninguno de los valores es alterado pero los indicadores se ven afectados. DI se incrementa o decrementa segn el valor de DF (vanse CLD y STD) en una o dos unidades -segn se est trabajando con bytes o palabras- para apuntar al

siguiente elemento de la cadena. Cadena_destino es un operando redundante que slo indica el tipo del dato (byte o palabra), es ms cmodo colocar SCASB o SCASW para indicar bytes/palabras. Ejemplo: LEA DI, DESTINO MOV AL, 50 SCASB STOS/STOSB/STOSW (Almacena cadena). Sintaxis: STOS cadena_destino STOSB (bytes) STOSW (palabras) OF DF IF TF SF ZF AF PF CF ------INDICADORES: Transfiere el operando origen almacenado en AX o AL, al destino direccionado por el registro DI sobre el segmento extra. Tras la operacin, DI se incrementa o decrementa segn el indicador DF (vanse CLD y STD) para apuntar al siguiente elemento de la cadena. Cadena_destino es un operando redundante que slo indica el tipo del dato (byte o palabra) a cargar, es ms cmodo colocar STOSB o STOSW para indicar bytes/palabras. Ejemplo: LEA DI, DESTINO MOV AX, 1991 STOSW REP/REPE/REPZ/REPNE/REPNZ (Repetir). REP repetir operacin de cadena REPE/REPZ repetir operacin de cadena si igual/si cero REPNE/REPNZ repetir operacin de cadena si no igual (si no 0) Estas instrucciones se pueden colocar como prefijo de otra instruccin de manejo de cadenas, con objeto de que la misma se repita un nmero determinado de veces incondicionalmente o hasta que se verifique alguna condicin. El nmero de veces se indica en CX. Por sentido comn slo deben utilizarse las siguientes combinaciones: Prefijo -------------------REP REPE/REPZ REPNE/REPNZ Ejemplos: 1) Buscar el byte 69 entre las 200 primeras posiciones de tabla (se supone tabla en el segmento ES): LEA MOV MOV CLD REPNE JE Funcin ------------------------------------------Repetir CX veces Repetir CX veces mientras ZF=1 Repetir CX veces mientras ZF=0 Instrucciones -----------------MOVS, STOS CMPS, SCAS CMPS, SCAS DI, tabla CX, 200 AL, 69 SCASB ENCONTRADO

Você também pode gostar