Assembler Pseudo Operations
I'm going out on a limb here. At the dawn of computer time, when assemblers were the only dance in town, the bright folks who invented the first assemblers decreed that a line of text could contain a machine instruction or an assembler directive also known as a pseudo-operation.
EQU and SET were among the first pseudo-operations invented. The syntax was:
Code:
<symbol> EQU <constant_expression>
<symbol> SET <constant_expression>
Notice the correspondence to the syntax for a machine instruction. Once a <symbol> was equated to a <constant_expression> it had to retain that value for the entire assembly process. In other words the scope of the declaration was from the point of declaration to the end of the file. Many early assemblers were one-pass so symbol declarations had to preceed their usage. The SET is used to change the value of <symbol> to another constant expression with a scope from the point of declaration to the next SET or the end of file whichever comes first. A common use of SET is to generate unique labels inside a macro expansion. To create a label a constant string is concatenated with a numeric constant. Then the numeric constant is incremented so that it will have a different value on the next expansion. NOTE: these are assembly time variables, they do not consume any bytes in the processor's data space.
The syntax of CONSTANT and VARIABLE appears to be another permutation of <operator>,<operand1>,<operand2>. So it is an alternate syntax with the same effect as EQU and SET.
CBLOCK on the other hand is a completely different animal. The purpose is to implicitly define the addresses of a group(block) of symbols. In the early assemblers similar pseudo-operations were called BSS(Block Starting Symbol) or BES(Block Ending Symbol). The operand to the right of the pseudo-operation was a length in words. For example to declare an array "number" of 10 words and a "stack" of 60 words the following would be used:
Code:
number BSS 10
stack BES 60
The array number would occupy addresses 0 to 9, and the symbol number would evaluate to address 0. The stack would occupy addresses 10-69, and the symbol stack would evaluate to address 69. Later these symbols were replaced by the generic DS(Define Storage). The nature of the implicit definition of addresses is that the first item begins at some location and each successive item is mapped to the next available location. As CPU's evolved they had alignments restrictions which is a whole other discussion.
Hope this helps