Unidad 2
SENTENCIAS CONDICIONALES.
En programación, una sentencia condicional es una instrucción o grupo de instrucciones que se pueden ejecutar o no en función del valor de una condición.
Los tipos más conocidos de sentencias condicionales son el SI..ENTONCES (if..then), el SI..ENTONCES..SI NO (if..then..else) y el SEGÚN (case o switch), aunque también podríamos mencionar al manejo de excepciones como una alternativa más moderna para evitar el "anidamiento" de sentencias condicionales.
Las sentencias condicionales constituyen, junto con los bucles, los pilares de la programación estructurada, y su uso es una evolución de una sentencia en lenguaje ensamblador que ejecutaba la siguiente línea o no en función del valor de una condición.
2.- PROGRAMACIÓN BÁSICA.
2.1 ENSAMBLADOR (Y LIGADOR) A UTILIZAR.
Aunque todos los ensambladores realizan básicamente las mismas tareas,podemos clasificarlos de acuerdo a características.
Así podemos clasificarlos en:
*Ensambladores Cruzados (Cross-Assembler).
Se denominan así los ensambladores que se utilizan en una computadora que posee un procesador diferente al que tendrán las computadoras donde va a ejecutarse el programa objeto producido.
El empleo de este tipo de traductores permite aprovechar el soporte de mediosfísicos (discos, impresoras, pantallas, etc.), y de programación que ofrecen lasmáquinas potentes para desarrollar programas que luego los van a ejecutarsistemas muy especializados en determinados tipos de tareas.
*Ensambladores Residentes.
Son aquellos que permanecen en la memoria principal de la computadora y cargan, para su ejecución, al programa objeto producido. Este tipo deensamblador tiene la ventaja de que se puede comprobar inmediatamente el programa sin necesidad de transportarlo de un lugar a otro, como se hacía encross-assembler, y sin necesidad de programas simuladores.
*Ensambladores de una fase.
Estos ensambladores leen una línea del programa fuente y la traducen directamente para producir una instrucción en lenguaje máquina o la ejecuta si se
trata de una pseudoinstrucción. También va construyendo la tabla de símbolos a medida que van apareciendo las definiciones de variables, etiquetas, etc.
*Ensambladores de dos fases.
Los ensambladores de dos fases se denominan así debido a que realizan la traducción en dos etapas. En la primera fase, leen el programa fuente y construyen una tabla de símbolos; de esta manera, en la segunda fase, vuelven a leer el programa fuente y pueden ir traduciendo totalmente, puesto que conocen la totalidad de los símbolos utilizados y las posiciones que se les ha asignado.
Así podemos clasificarlos en:
*Ensambladores Cruzados (Cross-Assembler).
Se denominan así los ensambladores que se utilizan en una computadora que posee un procesador diferente al que tendrán las computadoras donde va a ejecutarse el programa objeto producido.
El empleo de este tipo de traductores permite aprovechar el soporte de mediosfísicos (discos, impresoras, pantallas, etc.), y de programación que ofrecen lasmáquinas potentes para desarrollar programas que luego los van a ejecutarsistemas muy especializados en determinados tipos de tareas.
*Ensambladores Residentes.
Son aquellos que permanecen en la memoria principal de la computadora y cargan, para su ejecución, al programa objeto producido. Este tipo deensamblador tiene la ventaja de que se puede comprobar inmediatamente el programa sin necesidad de transportarlo de un lugar a otro, como se hacía encross-assembler, y sin necesidad de programas simuladores.
*Ensambladores de una fase.
Estos ensambladores leen una línea del programa fuente y la traducen directamente para producir una instrucción en lenguaje máquina o la ejecuta si se
trata de una pseudoinstrucción. También va construyendo la tabla de símbolos a medida que van apareciendo las definiciones de variables, etiquetas, etc.
*Ensambladores de dos fases.
Los ensambladores de dos fases se denominan así debido a que realizan la traducción en dos etapas. En la primera fase, leen el programa fuente y construyen una tabla de símbolos; de esta manera, en la segunda fase, vuelven a leer el programa fuente y pueden ir traduciendo totalmente, puesto que conocen la totalidad de los símbolos utilizados y las posiciones que se les ha asignado.
2.2 Ciclos numéricos
La arquitectura de los procesadores x86 obliga al uso de segmentos de memoria para manejar la información, el tamaño de estos segmentos es de 64kb.
Para que el ensamblador pueda manejar los datos es necesario que cada dato o instrucción se encuentren localizados en el área que corresponde a sus respectivos segmentos. El ensamblador accesa a esta información tomando en cuenta la localización del segmento, dada por los registros DS, ES, SS y CS, y dentro de dicho registro la dirección del dato específico.
2.3 Captura básica de cadenas
2.4 Comparación y prueba
La instrucción CMP pro lo común es utilizada para comparar dos campos de datos, uno de los cuales están contenidos en un registro. El formato general para CMP es:| [etiqueta:] | CMP | {registro/memoria}, {registro/memoria/inmediato} |
Observe que la operación compara el primer operando con el segundo; por ejemplo, el valor del primer operando es mayor que, igual o menor que el valor del segundo operando?
La instrucción CMPS compara el contenido de una localidad de memoria (direccionada por DS:SI). Dependiendo de la bandera de dirección, CMPS incrementa o disminuye también losregistros SI y DI en 1 para bytes, en 2 para palabras y en 4 para palabras dobles. La operación establece las banderas AF, CF, OF, PF, SF y ZF.
2.5 Saltos
La mayoría de los programas constan de varios ciclos en los que una serie de pasos se repite hasta alcanzar un requisito específico y varias pruebas para determinar qué acción se realiza de entre varias posibles.
Una instrucción usada comúnmente para la transferencia de control es la instrucción JMP (jump, salto, bifurcación). Un salto es incondicional, ya que la operación transfiere el control bajo cualquier circunstancia. También JMP vacía el resultado de la
instrucción previamente procesada; por lo que, un programa con muchas operaciones de salto puede perder velocidad de procesamiento.
La instrucción LOOP, requiere un valor inicial en el registro CX.
2.6 Ciclos condicionales
Sintaxis:
LOOP etiqueta
La instrucción loop decrementa CX en 1, y transfiere el flujo del programa a la etiqueta dada como operando si CX es diferente a 1.
*Instrucción LOOPE
Propósito: Generar un ciclo en el programa considerando el estado de ZF
Sintaxis:
LOOPE etiqueta
Esta instrucción decrementa CX en 1. Si CX es diferente a cero y ZF es igual a 1,
entonces el flujo del programa se transfiere a la etiqueta indicada como operando.
*Instrucción LOOPNE
Propósito: Generar un ciclo en el programa, considerando el estado de ZF
Sintaxis:
LOOPNE etiqueta
Esta instrucción decrementa en uno a CX y transfiere el flujo del programa solo si
ZF es diferente a 0.
2.7 Incremento y decremento
Son las instrucciones más básicas a la hora de hacer operaciones con registros:
INC incrementa el valor de un registro, o de cualquier posición en memoria, en una
unidad, y DEC lo decrementa.
Instrucción INC
INC AX
Incrementa en uno el valor de AX
IN WORD PTR
Incrementa la palabra situada en CS.
Instrucción DEC
DEC AX
Decremento AX, le resta uno.
DEC WORD PTR
Decrementa la palabra situada en CS.
2.11 Obtención de cadena con representación decimal
En este modo, los datos son proporcionados directamente como parte de la instrucción.
Ejemplo:
Mov AX,34h ;Copia en AX el número 34h hexadecimal
Mov CX,10 ;Copia en CX el número 10 en decimal
2.14 Obtención de una cadena con la representación hexadecimal
La conversión entre numeración binaria y hexadecimal es sencilla. Lo primero que se hace para una conversión de un número binario a hexadecimal es dividirlo en grupos de 4 bits, empezando de derecha a izquierda. En caso de que el último
grupo (el que quede más a la izquierda) sea menor de 4 bits se rellenan los faltantes con ceros.
2.15 Captura y almacenamiento de datos numéricos
Esta representación esta basada en la notación científica, esto es, representar unnúmero en dos partes: su mantisa y su exponente.
La arquitectura de los procesadores x86 obliga al uso de segmentos de memoria para manejar la información, el tamaño de estos segmentos es de 64kb.
Para que el ensamblador pueda manejar los datos es necesario que cada dato o instrucción se encuentren localizados en el área que corresponde a sus respectivos segmentos. El ensamblador accesa a esta información tomando en cuenta la localización del segmento, dada por los registros DS, ES, SS y CS, y dentro de dicho registro la dirección del dato específico.
2.3 Captura básica de cadenas
2.4 Comparación y prueba
La instrucción CMP pro lo común es utilizada para comparar dos campos de datos, uno de los cuales están contenidos en un registro. El formato general para CMP es:| [etiqueta:] | CMP | {registro/memoria}, {registro/memoria/inmediato} |
Observe que la operación compara el primer operando con el segundo; por ejemplo, el valor del primer operando es mayor que, igual o menor que el valor del segundo operando?
La instrucción CMPS compara el contenido de una localidad de memoria (direccionada por DS:SI). Dependiendo de la bandera de dirección, CMPS incrementa o disminuye también losregistros SI y DI en 1 para bytes, en 2 para palabras y en 4 para palabras dobles. La operación establece las banderas AF, CF, OF, PF, SF y ZF.
2.5 Saltos
La mayoría de los programas constan de varios ciclos en los que una serie de pasos se repite hasta alcanzar un requisito específico y varias pruebas para determinar qué acción se realiza de entre varias posibles.
Una instrucción usada comúnmente para la transferencia de control es la instrucción JMP (jump, salto, bifurcación). Un salto es incondicional, ya que la operación transfiere el control bajo cualquier circunstancia. También JMP vacía el resultado de la
instrucción previamente procesada; por lo que, un programa con muchas operaciones de salto puede perder velocidad de procesamiento.
La instrucción LOOP, requiere un valor inicial en el registro CX.
2.6 Ciclos condicionales
Sintaxis:
LOOP etiqueta
La instrucción loop decrementa CX en 1, y transfiere el flujo del programa a la etiqueta dada como operando si CX es diferente a 1.
*Instrucción LOOPE
Propósito: Generar un ciclo en el programa considerando el estado de ZF
Sintaxis:
LOOPE etiqueta
Esta instrucción decrementa CX en 1. Si CX es diferente a cero y ZF es igual a 1,
entonces el flujo del programa se transfiere a la etiqueta indicada como operando.
*Instrucción LOOPNE
Propósito: Generar un ciclo en el programa, considerando el estado de ZF
Sintaxis:
LOOPNE etiqueta
Esta instrucción decrementa en uno a CX y transfiere el flujo del programa solo si
ZF es diferente a 0.
2.7 Incremento y decremento
Son las instrucciones más básicas a la hora de hacer operaciones con registros:
INC incrementa el valor de un registro, o de cualquier posición en memoria, en una
unidad, y DEC lo decrementa.
Instrucción INC
INC AX
Incrementa en uno el valor de AX
IN WORD PTR
Incrementa la palabra situada en CS.
Instrucción DEC
DEC AX
Decremento AX, le resta uno.
DEC WORD PTR
Decrementa la palabra situada en CS.
2.11 Obtención de cadena con representación decimal
En este modo, los datos son proporcionados directamente como parte de la instrucción.
Ejemplo:
Mov AX,34h ;Copia en AX el número 34h hexadecimal
Mov CX,10 ;Copia en CX el número 10 en decimal
2.14 Obtención de una cadena con la representación hexadecimal
La conversión entre numeración binaria y hexadecimal es sencilla. Lo primero que se hace para una conversión de un número binario a hexadecimal es dividirlo en grupos de 4 bits, empezando de derecha a izquierda. En caso de que el último
grupo (el que quede más a la izquierda) sea menor de 4 bits se rellenan los faltantes con ceros.
2.15 Captura y almacenamiento de datos numéricos
Esta representación esta basada en la notación científica, esto es, representar unnúmero en dos partes: su mantisa y su exponente.
Comentarios
Publicar un comentario