SWAP
Syntax |
SWAP var1,var2 or SWAP var1$,var2$ |
Location |
SWAP, Math Package |
This command exchanges the values of the two variables. The parameters can be either numeric variables (integer and floating point) or strings. Arrays are not allowed and both variables have to be the same type: SWAP a$,b is illegal, even if a$ contained a valid number. Also, constant expressions such as SWAP a%,3 are not allowed, since this would not make any sense. Unfortunately, it is not possible to SWAP two elements of an array, the example shows why this would be practicable. The Math Package variant also allows you to swap whole arrays.
Example
In most kinds of sorting routines, a lot of swapping is necessary and an assembler routine which takes over this work makes the process quicker. Here is a Quicksort algorithm as a general subroutine. field$ is sorted from the left element to the right.
100 DEFine PROCedure QSort (field$,left,right)
110 LOCal i,j,last$
120 i=left: j=right: last$=field$(j)
130 REPeat SortLoop1
140 REPeat SortLoop2:IF field$(i)<last$:i=i+1:ELSE EXIT SortLoop2
150 REPeat SortLoop2:IF field$(j)>last$:j=j-1:ELSE EXIT SortLoop2
160 IF i<=j THEN
170 f1$=field$(i): f2$=field$(j): SWAP f1$,f2$
180 field$(i)=f1$: field$(j)=f2$
190 i=i+1: j=j-1
200 END IF
210 IF i>j THEN EXIT SortLoop1
220 END REPeat SortLoop1
230 IF left<j THEN QSort field$,left,j
240 IF right>i THEN QSort field$,i,right
250 END DEFine QSort
Compilers have a fixed stack size - you might have to raise this because this procedure iterates (ie. calls itself), which is something which eats up the stack very quickly. The SuperBASIC interpreter uses a flexible stack.
CROSS-REFERENCE