TODAS LAS CATEGORIAS

PARTE III. TUTORIAL ENSAMBLADOR BASICO

Fecha actualización el 2016-3-30. Fecha publicación el . Categoría: Programación, Ensamblador. Autor: Mapa del sitio

Indice de temas que encontraras en esta pagina: estructuras de control, comparaciones, instrucciones de ramificación.

ESTRUCTURAS DE CONTROL

Los lenguajes de alto nivel suministran estructuras del alto nivel como instrucciones if while, que controlan el flujo de ejecución. El lenguaje ensamblador NO suministra estas complejas estructuras de control. En lugar de ello usa el GOTO Sin embargo es posible escribir programas estructurados en ensamblador. El procedimiento básico es diseñar la lógica del programa usando las estructuras de control de alto nivel y traducir el diseño en lenguaje ensamblador apropiado.

COMPARACIONES

Las estructuras de control deciden que hacer basados en la comparación de datos. En ensamblador, el resultado de una comparación se almacenan en el registro FLAGS para usarlas luego.

Tambien esta disponible la instrucción CMP para realizar comparaciones. El registro FLAGS se fija basado en la diferencia de los dos operandos de la instrucción CMP.

Los operandos se restan y se fija el registro FLAGS basado en el resultado, pero el resultado no se almacena en ninguna parte. Si necesita el resultado use la instrucción SUB en lugar de la instrucción CMP.

Para enteros sin signos hay dos banderas (bits en el registro FLAGS) que son importante: cero ZF y carry CF. La bandera cero se fija a 1 si el resultado de la resta es cero. La bandera carry se usa como bandera de préstamo para la resta.

Considere una comparación como: cmp vleft, vright. Se calcula la diferencia de vleft - vright y las banderas se fijan de acuerdo al resultado. Si la diferencia de CMP es cero, vleft = vright, entonces ZF se fija ZF=1 y CF se borra CF=0.

Si vleft > vright, entonces ZF se borra y CF también (no hay préstamo). Si vleft vright, entonces ZF se borrará y CF se fijaría (hay préstamo).

INSTRUCCIONES DE RAMIFICACIÓN

Las instrucciones de ramificación pueden transferir la ejecución del programa a un punto arbitrario. En otras palabras funcionan como goto. Hay dos tipos de ramificaciones: condicionales e incondicionales. Una ramificación incondicional es tal cual como goto, siempre hace el salto.

Una ramificación condicional puede o no hacer el salto dependiendo de las banderas del registro FLAGS. Si una ramificación condicional no hace el salto, el control pasa a la siguiente instrucción.

La instrucción JMP acrónimo de jump) hace ramificaciones incondicionales. Su argumento normalmente es la etiqueta de código de la instrucción a la cual debe saltar. El ensamblador o el encadenador reemplazará la etiqueta con la dirección correcta de la instrucción.

Es importante tener en cuenta que la instrucción inmediatamente después de la instrucción JMP nunca se ejecutará a menos que otra instrucción salte a ella.

VARIACIONES DE LAS INSTRUCCIONES DE SALTO

  • SHORT: Este salto es de tamaño muy limitado, solo se puede mover arriba o abajo 128 bytes en memoria. La ventaja de este tipo es que usa menos memoria que otros. Usa un byte con signo para almacenar el desplazamiento del salto. El desplazamiento es cuántos bytes se mueve adelante o atr´as. El desplazamiento se añade a EIP. Para especificar un salto corto, use la palabra SHORT inmediatamente antes de la etiqueta en la instrucción JMP.
  • NEAR: Este salto es el tipo por omisión en las ramificaciones condicionales e incondicionales y se puede usar para saltar a cualquier lugar del segmento. Uno usa dos bytes para el desplazamiento. Esto le permite a uno moverse aproximadamente 32000 bytes arriba o abajo. El otro tipo usa cuatro bytes para el desplazamiento, que le permite a uno moverse a cualquier lugar en el segmento de código. El tipo de 2 bytes se puede especificar colocando la palabra WORD antes de la etiqueta en la instrucción JMP.
  • FAR: Este salto permite moverse a otro segmento de código.
https://www.clasesordenador.com/tutorial-de-ensamblador-basico/pag3.html" onclick="javascript:window.open(this.href, '', 'menubar=no,toolbar=no,resizable=yes,scrollbars=yes,height=600,width=600');return false;">Compartir en Google+ programacion