CAL

Top 

Realiza un salto incondicional a otra parte del programa y memoriza el punto de retorno. Puede ser dentro de la misma porción de código o de alguna otra subrutina. Esta se identifica por una etiqueta (label), y es siempre hacia adelante (no es prudente hacer saltos hacia atrás). Es el punto a partir del cual se seguirá ejecutando el programa. Use la instrucción RET para volver a seguir ejecutando el programa en la línea siguiente a la que se hizo el llamado.

 

        CAL Sub1         ;Salta (o llama) a la subrutina de nombre "Sub1"

        ST q0.0          ;Instrucción siguiente o punto de retorno de la subrutina

        LD sm0.4

        CALC Sub1        ;Salta (o llama) a la subrutina de nombre "Sub1" si el bit 0 del acumulador es 1

        LD sm0.5

             CALNC Sub1       ;Salta a la subrutina de nombre "Sub1" si el bit 0 del acumulador es 0

        END              ;Termina el programa y vuelve a ejecutar desde el principio

 

Sub1:   LD i0.0          ;Primera instrucción de la subrutina

        RETC             ;Retorno condicional (si el bit 0 del acumulador es 1)

        AND i0.1

        RETNC            ;Retorno condicional (si el bit 0 del acumulador es 0)

        XOR i0.2

        RET              ;Retorno incondicional de la subrutina

 

 Esta instrucción se ubica en el sector de salidas


Sintaxis

 Nótese que termina con los ":", y que éstos no aparecen cuando está con la instrucción. Así es como se distingue entre destino de salto y argumento.
 Supongamos que hay varias máquinas iguales controladas por un solo equipo. Repetir la rutina por cada una adaptando los nombres de los saltos es para errores. Se puede organizar poniendo el código de control de cada una en una pestaña. Esto reduce a copiar y pegar con mucho menos cambios. Entonces, para que las etiquetas no se confundan se les añade el nombre de la pestaña correspondiente:
  

NombrePestaña@Etiqueta

   

  Entonces el programa (principal) quedaría de esta forma:

  

        CAL Main@Sub1   ;Salta (o llama) a la subrutina de nombre "Sub1"

        ST q0.0         ;Instrucción siguiente o punto de retorno de la subrutina

        LD sm0.4

        CALC Main@Sub1  ;Salta (o llama) a la subrutina de nombre "Sub1" si el bit 0 del acumulador es 1

        LD sm0.5

        CALNC Main@Sub1 ;Salta a la subrutina llamada "Sub1" si el bit 0 del acumulador es 0

        END             ;Termina el programa y vuelve a ejecutar desde el principio

 

Sub1:   LD i0.0         ;Primera instrucción de la subrutina

        RETC            ;Retorno condicional (si el bit 0 del acumulador es 1)

        AND i0.1

        RETNC           ;Retorno condicional (si el bit 0 del acumulador es 0)

        XOR i0.2

        RET             ;Retorno incondicional de la subrutina

  

 Descargar ejemplo (español) (inglés)

  

CALC

CALNC

JMP

RET

 

Lista de instrucciones
Índice