domingo, 10 de enero de 2016

Seudocódigo para resta de binarios.

Sistema para realizar resta de dos números binarios en 16 bits
Escriba el primer numero binario.
Leer "n1 - n16"
Escribir el segundo numero binario
Leer "b1 - b16"
Escribir n1-n16

Operación
Repetir "b1>b16" Si "b1>b16"=0 Escribir b
hasta que b=1

Si b=0 entonces Escribir 1

Sino Escribir 0

Resultado= n1>n16 + b1>b16

Si Resultado = 17 núm. = Resultado+1
Sino Entonces 1=0 y 0=1

Escribir Resultado.


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.