ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

CONCEPTOS DIGITALES II


Enviado por   •  1 de Febrero de 2015  •  9.076 Palabras (37 Páginas)  •  112 Visitas

Página 1 de 37

SALTOS

Una instrucción de salto produce un cambio en la ejecución del programa pasando a una nueva posición, no secuencial. La dirección del salto se representa con una etiqueta.

Hay más de 30 instrucciones de salto, vamos a nombrar las más usadas:

Instrucción Descripción

jmp etiqueta Salto incondicional directo

je etiqueta Salto por igual

jne etiqueta Salto por no igual

jg etiqueta Salto por mayor

jng etiqueta Salto por no mayor

jge etiqueta Salto por mayor igual

jnge etiqueta Salto por no mayor igual

jl etiqueta Salto por menor

jnl etiqueta Salto por no menor

jle etiqueta Salto por menor igual

jnle etiqueta Salto por no menor igual

js etiqueta Salto negativo

Ejemplo de salto incondicional directo:

addl %eax, %ebx

jmp etiq1 # salto incondicional a etiq1

subl %edx, %ebx

etiq1: addl %edx, %ebx

En este caso la tercera instrucción no se ejecuta ya que al ejecutarse el salto el programa pasa a ejecutar la instrucción 4.

Las otras instrucciones de salto son condicionales lo cual significa que la máquina revisa los códigos de condición antes de realizar el salto, si la condición se cumple realiza el salto a la etiqueta especificada, si la condición no se cumple continúa la ejecución de manera secuencial.

Ejemplo de salto condicional:

movl valor1, %eax # %eax=valor1

movl valor2, %ebx # %ebx=valor2

cmpl %ebx, %eax # compara valor1 con valor2

jl menor # si valor1 < valor2 salta a etiq1

subl $5,%eax # si valor1 >= valor2 resta 5 a %eax

jmp fin # salta a fin

menor: addl $5,%eax # si valor1 < valor2 suma 5 a %eax

fin:

En el ejemplo anterior que si se cumple la condición de comparación valor1 < valor2 el programa salta a la instrucciónmenor: addl $5,%eax sin pasar por las instrucciones subl $5,%eax y jmp fin. En caso de no cumplirse la condición, es decir valor1 >= valor2, entonces continúa la ejecución en la instrucción siguiente, en este caso, la instrucción subl $5,%eax. Es importante destacar la necesidad de introducir la instrucción jmp fin, un salto incondicional a la etiqueta fin ya que de no estar presente la máquina seguiría el orden secuencial y luego de realizar la resta ejecutaría la suma lo cual arrojaría un resultado erróneo. En este programa sólo se ejecuta una de las dos operaciones aritméticas, la resta en caso de cumplirse la condición o la suma en caso de que no se cumpla.

PILA

La pila es un área de memoria que crece desde una dirección inicial hacia direcciones menores. El último elemento colocado en la pila es el que está disponible para ser retirado.

Las instrucciones para el manejo de la pila son dos, una para apilar un operando fuente y una para desapilar el valor que está en el tope de la pila y colocarlo en un operando destino.

push (apilar)

Instrucción Efecto Descripción

pushw Fuente R[%esp] ← R[%esp]-2 y M[R[%esp]] ← Fuente Actualiza el apuntador %esp y luego coloca Fuente en el tope de la pila (2 bytes)

pushl Fuente R[%esp] ← R[%esp]-4 y M[R[%esp]] ← Fuente Actualiza el apuntador %esp y luego coloca Fuente en el tope de la pila (4 bytes)

Operandos válidos Ejemplo

inmediato pushw $7

registro pushl %eax

memoria pushl etiqueta

pop (desapilar)

Instrucción Efecto Descripción

popw Destino Destino ← M[R[%esp]] y R[%esp] ← R[%esp]+2 Lee el valor del tope de la pila, lo guarda en Destino y luego actualiza %esp (dato de 2 bytes)

ppol Destino Destino ← M[R[%esp]] y R[%esp] ← R[%esp]+4 Lee el valor del tope de la pila, lo guarda en Destino y luego actualiza %esp (dato de 4 bytes)

Ejemplo de uso de las instrucciones pushl y popl

Dados los valores iniciales   %esp=0x108   %eax=15   %ebx=43   %ecx=28, la dirección expresada en hexadecimal y los contenidos de los registros en decimal, al ejecutarse las instrucciones:

pushl %eax

pushl %ebx

popl %eav

pushl %ecx

popl %ebx

popl %ecx

Ocurre lo siguiente en la pila:

pushl %eax

%esp Dirección Contenido

     

     

→ 0x104 15

  0x108  

Al apilar el contenido de %eax se decrementa %esp en 4 bytes y se coloca el valor contenido en %eax en la pila, en este caso 15.

pushl %ebx

%esp Dirección Contenido

     

→ 0x100 43

0x104 15

  0x108  

Al apilar %ebx, se decrementa %esp otros 4 bytes y se coloca el valor, 43 en la pila.

popl %eax

%esp Dirección Contenido

     

  0x100 43

→ 0x104 15

...

Descargar como (para miembros actualizados)  txt (53 Kb)  
Leer 36 páginas más »
Disponible sólo en Clubensayos.com