1 / 55

CLASE 11 INSTRUCCIONES DE SALTO Y SENTENCIAS CONDICIONALES

CLASE 11 INSTRUCCIONES DE SALTO Y SENTENCIAS CONDICIONALES. TEMA 1 INSTRUCCIONES DE SALTO.

taurus
Download Presentation

CLASE 11 INSTRUCCIONES DE SALTO Y SENTENCIAS CONDICIONALES

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. CLASE 11INSTRUCCIONES DE SALTOYSENTENCIAS CONDICIONALES

  2. TEMA 1INSTRUCCIONES DE SALTO

  3. Una instrucción de salto tiene por objetivo continuar la ejecución del programa en una instrucción diferente a la siguiente, alterando la secuencia normal del programa. Esto permite crear ciclos y condiciones. Físicamente, una orden de salto realiza su labor cambiando el contenido del registro IP (y si se requiere también el de CS), el cual contiene el desplazamiento de la próxima instrucción a ejecutar.

  4. Se habla de dos clases de saltos, de acuerdo a su alcance: a. Salto cercano (NEAR): Sólo se cambia el valor de IP, así que el salto es restringido al interior del segmento actual. b. Salto lejano (FAR): Se cambian IP y CS, así que la nueva instrucción estará en un segmento diferente.

  5. MEMORIA Segmento 1 100 Segmento 2 700 Segmento 2 20 Saltar a 50 Salto NEAR: La flecha indicala siguiente ordena ejecutar. 21 50

  6. MEMORIA Segmento 1 100 35 Segmento 2 Segmento 2 700 Salto FAR: La flecha indicala siguiente ordena ejecutar. 20 Saltar a 100:35 21

  7. Según su tipo, el salto puede ser: a. Condicional: El salto se hace si se cumple una condición predeterminada, en caso contrario se continúa con la instrucción siguiente. b. Incondicional: El salto se realiza sin más requisitos.

  8. INSTRUCCIÓN DE SALTO INCONDICIONAL (JMP): Sintaxis: JMP etiqueta Propósito:Salta a la instrucción cuya dirección esta dada por etiqueta.

  9. Ejemplo: MOV AX, 5 MOV BL, 2 SEGUIR: DIV BL INC AX JMP SEGUIR

  10. INSTRUCCIONES DE SALTO CONDICIONAL (Jx): Es un conjunto de instrucciones, cada una de las cuales evalúa una condición que corresponde al último resultado dado por la ALU. La clasificación se hace según el tipo de operandos que se asociarán a la operación aritmética u operación lógica realizada:

  11. a. OPERANDOS SIN SIGNO: JA = Salta si superior JAE = Salta si superior o igual JE = Salta si igual JBE = Salta si inferior o igual JB = Salta si inferior JNE = Salta si diferente

  12. b. OPERANDOS CON SIGNO: JG = Salta si mayor JGE = Salta si mayor o igual JE = Salta si igual JLE = Salta si menor o igual JL = Salta si menor JNE = Salta si diferente

  13. c. OTROS: JC = Salta si hay acarreo (flag carry = 1) JNC = Salta si no hay acarreo (flag carry = 0) JZ = Salta si cero (flag zero = 1) JNZ = Salta si no cero (flag zero = 0)

  14. Al comparar dos cantidades pueden obtenerse resultados diferentes si se asumen con o sin signo: Sean los números 0111 y 1010. a. Tomándolos sin signo: 0111 = 7 y 1010 = 10 como 7 < 10 0111 < 1010 (Considerados sin signo)

  15. b. Tomándolos con signo: 0111 = +7 y 1010 = -6como +7 > -6 0111 > 1010 ( Considerados con signo) ¡Las mismas dos cantidades dan comparaciones diferentes!

  16. Si se sabe que los operandos no son signados (por ejemplo, caracteres) se debe usar el grupo de saltos (a), pero si los operandos corresponden a valores númericos con signo, el grupo a usar es el (b). Es el programador quien decide qué tipos de operandos usa y qué comparación es la adecuada.

  17. TEMA 2SENTENCIAS CONDICIONALES

  18. Todas las sentencias de control en un HLL pueden catalogarse como iterativas o condicionales. En principio, todas pueden transformarse en una operación if acompañada, en algunos casos, de órdenes de salto. SENTENCIAS CONDICIONALES:

  19. SENTENCIAS CONDICIONALES IF: La sentencia if tiene la sintaxis: if (expr1 && expr 2 || expr3 ... exprn) { /* bloque para condición verdadera*/ } else { /*bloque para condición falsa */ }

  20. Las herramientas en ensamblador para construirla son: • Instrucciones aritméticas y lógicas para crear las expresiones • Instrucciones de comparación para implementar las condiciones • Instrucciones de salto para seleccionar el código a ejecutar

  21. INSTRUCCIÓN DE COMPARACIÓN (CMP): Sintaxis: CMP operando1, operando2 Propósito:Hace una resta de operando2 a operando1, pero no guarda el resultado. Ejemplos: CMP AL, cte8 CMP CX, 2500 CMP var8[SI], BL

  22. La instrucción se ha diseñado para hacer una evaluacion lógica de una expresión (Verdadero, Falso) y poder implementar sentencias de decisión. Usualmente, después de esta instrucción, vendrá inmediatamente una instrucción de salto.

  23. SENTENCIA IF SIMPLE: Sintaxis: if (condición) instrucción; La instrucción se ejecuta si la condición es VERDADERA (diferente de 0). Ejemplo: if (a > b) c = 5;

  24. Implementación: IF10: MOV AL, a ; AL = 1er. operando CMP AL, b ; a > b? JLE ENDIF10 ; no: salirTHEN10: MOV c, 5 ; si: ejecutarENDIF10:

  25. Los nombres de las etiquetas no son palabras especiales, se usan éstas para que sea fácil seguir la lógica del salto. Observe que se utiliza un salto que evalúa la condición contraria a la que aparece en el lenguaje de alto nivel, es decir, el salto indica cuándo salir de la sentencia.

  26. LISTADO DE CONDICIONES Y SUS CONTRARIOS: (para operandos con signo) Condición Salto Normal Salto Contrario > JG JLE > = JGE JL = = JE JNE < = JLE JG < JL JGE ! = JNE JE

  27. SENTENCIA IF-ELSE SIMPLE: Sintaxis:if (condición) instrucción1; else instrucción2; Ejemplo: if (a > b) c = 5; else c++;

  28. Implementación: IF11: MOV AL, a ; AL = 1er. operando CMP AL, b ; a es mayor que b? JLE ELSE11THEN11: MOV c, 5 ; ejecutar para siJMP ENDIF11ELSE11: INC c ; ejecutar para noENDIF11:

  29. SENTENCIA IF CONDICIÓN AND: La intrucción se ejecuta si todas las condiciones son VERDADERAS. Sintaxis: if (condición1 and condición2) instrucción; Ejemplo: if (a > b && a != -7) c = 5;

  30. Implementación:IF11: MOV AL, a ; AL = 1er. operando CMP AL, b ; a no mayor que b? JLE ENDIF11; no: salirAND11: CMP a, -7 ; a es diferente a -7? JE ENDIF11THEN11: MOV c, 5 ; ejecutar la ordenENDIF11:

  31. SENTENCIA IF CONDICIÓN NOT: La instrucción se ejecuta si la condición es FALSA. Sintaxis: if (!condición) instrucción; Ejemplo: if ( !(a > b) ) c = 5;

  32. Implementación: IF11: MOV AL, a ; AL = 1er. operando CMP AL, b ; a es mayor que b? JG ENDIF11 ; si: salir ( es negada) THEN11: MOV c, 5 ; ejecutar la orden ENDIF11:

  33. SENTENCIA IF CONDICIÓN OR: La instrucción se ejecuta si una o más de las condiciones son VERDADERAS. Sintaxis: if ( condición1 or condición2) instrucción; Ejemplo: if ( a > b || a != -7) c = 5;

  34. Implementación: IF11: MOV AL, a ; AL = 1er. operando CMP AL, b ; a es mayor que b? JG THEN11 ; si: ejecutar la orden OR11: CMP a, -7 ; a es diferente a -7? JE ENDIF11 ; no: salir THEN11: MOV c, 5 ; ejecutar la orden ENDIF11:

  35. SENTENCIA IF GENÉRICA: Los ejemplos anteriores han buscado resaltar la forma en que se implementa cada posibilidad básica. Ahora es posible unirlas todas, junto con la creación de expresiones, para formar sentencias condicionales de alta complejidad:

  36. if ( (a+b) > c*d && ( ! b || (a-5)<c/(3+a) ) ){ a = 3; b = c+2;}else{ c--; d = a*b;}

  37. IF11: MOV BL, a ADD BL, b ; BL = 1er. operando MOV AL, c IMUL d ; AL = 2do. operando CMP BL, AL ; a+b > c*d? JLE ELSE11 ; no: ejecutar para no AND11: CMP b, 0 ; b diferente a 0? JE THEN11 ; si: ejecutar para si

  38. OR11: MOV BL, a SUB BL, 5 ; BL = 1er. operando MOV CL, 3 ADD CL, a MOV AL, c CBW IDIV CL ; AL = 2do. operando CMP BL, AL ; a - 5 < c/(3+a)? JGE ELSE11 ; no: ejecutar para no

  39. THEN11: MOV a, 3 ; a = 3 MOV AL, c ADD AL, 2 MOV b, AL ; b = c + 2 JMP ENDIF11 ELSE11: DEC c ; c-- MOV AL, a IMUL b MOV d, AL ; d = a * b ENDIF11:

  40. TEMA 3SENTENCIAS IFANIDADAS Y EN ESCALERA

  41. Ocurre cuando el cuerpo de una instrucción if es, a su vez, otra sentencia if. Este esquema puede, eventualmante, repetirse en cuantos niveles de anidamiento se requiera: SENTENCIA IF ANIDADA:

  42. if ( a>b ) if ( b>c ) if ( c>d ) a = 0; else a = 1; else a = 2;else a = 3;

  43. IF11: MOV AL, a CMP AL, b JLE ELSE11THEN11:IF12: MOV AL, b CMP AL, c JLE ELSE12THEN12: ...<sigue>...

  44. IF13: MOV AL, c CMP AL, d JLE ELSE13THEN13: MOV a, 0 JMP ENDIF13ELSE13: MOV a, 1ENDIF13: JMP ENDIF12ELSE12: MOV a, 2ENDIF12: JMP ENDIF11ELSE11: MOV a, 3ENDIF11:

  45. Se produce cuando después del elsese sigue otroifel cual también posee su propio else con un ifsubsiguiente: SENTENCIA IF EN ESCALERA:

  46. if ( a>b ) x = 0;else if ( a>c ) x = 1; else if ( a>d ) x = 2; else x = 3;

  47. IF11: MOV AL, a CMP AL, b JLE ELSE11THEN11: MOV x, 0 JMP ENDIF11ELSE11:IF12: MOV AL, a CMP AL, c JLE ELSE12THEN12: MOV x, 1 JMP ENDIF12 ...<sigue>...

  48. ELSE12:IF13: MOV AL, a CMP AL, d JLE ENDIF13THEN13: MOV x, 2 JMP ENDIF13ELSE13: MOV x, 3ENDIF13:ENDIF12:ENDIF11:

  49. Una sentencia switches muy similar a una escalera if-else. La diferencia radica en que, en el switch, se compara la expresión condicional contra un conjunto de constantes, en tanto que en la escalera se puede comparar contra otras expresiones: SENTENCIA SWITCH:

  50. switch ( a+b ) {case 7: x = 0; break;case 1: x++; break;case -8: x--; break;case 6:case 4: x = 1; break;default: x = -1; }

More Related