|
CALC |
Instrucciones �ndice |
|
Realiza un salto condicional (si el bit 0 del acumulador es 1) 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 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 Encadenamiento de llamados
ld 1
;Valor 1 al acumulador (Acc)
CALC sum_xi_yi ;Ejecuta
sum_xi_yi porque el Acc está en 1
CALC suma_yi
;suma_y se ejecutará si Acc quedó en 1 después de haber ejecutado sum_xi_yi
CALC a
;a se ejecutará si Acc quedó en 1 después de haber ejecutado suma_yi
;sum_xi_yi, suma_yi y a alteran el valor del acumulador. Por eso la siguiente es dependiente de la anterior.
Para que el esquema funcione cada una de las subrutinas debería terminar con un LD 1:
sum_xi_yi: instrucción ... ... LD 1 ;Valor devuelto en el acumulador definido RET suma_yi : instrucción ... ... LD 1 ;Valor devuelto en el acumulador definido RET 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)
|