domingo, 10 de enero de 2016

Instrucciones de control.

Instrucciones de transferencia de control (No afectan los flags):

JMP label
Saltar hacia la dirección label.
CALL label
Ir al procedimiento cuyo inicio es label. Para llamadas dentro del mismo segmento equivale a PUSH IPJMP label, mientras que para llamadas entre segmentos equivale a PUSH CSPUSH IPJMP label.
RET
Retorno de procedimiento.
RET inmed
Retorno de procedimiento y SP <- SP + inmed.
Variaciones de la instrucción de retorno:
RETN [inmed]
En el mismo segmento de código. Equivale a POP IP [:SP <- SP + inmed].
RETF [inmed]
En otro segmento de código. Equivale a POP IPPOP CS [:SP <- SP + inmed]
Saltos condicionales aritméticos (usar después de CMP):
  • Aritmética signada (con números positivos, negativos y cero)
    JL etiqueta/JNGE etiqueta
    Saltar a etiqueta si es menor.
    JLE etiqueta/JNG etiqueta
    Saltar a etiqueta si es menor o igual.
    JE etiqueta
    Saltar a etiqueta si es igual.
    JNE etiqueta
    Saltar a etiqueta si es distinto.
    JGE etiqueta/JNL etiqueta
    Saltar a etiqueta si es mayor o igual.
    JG etiqueta/JNLE etiqueta
    Saltar a etiqueta si es mayor.
  • Aritmética sin signo (con números positivos y cero)
    JB etiqueta/JNAE etiqueta
    Saltar a etiqueta si es menor.
    JBE etiqueta/JNA etiqueta
    Saltar a etiqueta si es menor o igual.
    JE etiqueta
    Saltar a etiqueta si es igual.
    JNE etiqueta
    Saltar a etiqueta si es distinto.
    JAE etiqueta/JNB etiqueta
    Saltar a etiqueta si es mayor o igual.
    JA etiqueta/JNBE etiqueta
    Saltar a etiqueta si es mayor.
Saltos condicionales según el valor de los indicadores:
JC label
Saltar si hubo arrastre/préstamo (CF = 1).
JNC label
Saltar si no hubo arrastre/préstamo (CF = 0).
JZ label
Saltar si el resultado es cero (ZF = 1).
JNZ label
Saltar si el resultado no es cero (ZF = 0).
JS label
Saltar si el signo es negativo (SF = 1).
JNS label
Saltar si el signo es positivo (SF = 0).
JP/JPE label
Saltar si la paridad es par (PF = 1).
JNP/JPO label
Saltar si la paridad es impar (PF = 0).
Saltos condicionales que usan el registro CX como contador:
LOOP label
Operación: CX <- CX-1. Saltar a label si CX<>0.
LOOPZ/LOOPE label
Operación: CX <- CX-1. Saltar a label si CX <> 0 y ZF = 1.
LOOPNZ/LOOPNE label
Operación: CX <- CX-1. Saltar a label si CX <> 0 y ZF = 0.
JCXZ label
Operación: Salta a label si CX = 0.
Interrupciones:
INT número
Salva los flags en la pila, hace TF=IF=0 y ejecuta la interrupción con el número indicado.
INTO
Interrupción condicional. Si OF = 1, hace INT 4.
IRET
Retorno de interrupción. Restaura los indicadores del stack.

Entre 20 y 200 lineas de código.
Cada modulo realiza una tarea en su totalidad.


Optimización de diseño.
Programación modular: Consiste en dividir un programa en unidades mas pequeñas.


Diseño descendiente. Establecer la jerarquía de la programación modular.

                                   Diagrama estructurado.

Código estructurado.           Diagramas de flujo y seudocodigo.



No hay comentarios:

Publicar un comentario