This is the instruction set of the intermediate code -- Commands are in one of these forms: is the operation to be performed. , , and are three memory addresses. Sometimes , , or is a number. The portion usually has the format of xxyy where xx is the basic operation and yy specifies the type. instruction type action --------------------- --------- ---------------------------------- LD#I integer [ma1] <-- number LD#C cardinal [ma1] <-- number LD#CH char [ma1] <-- number LD#R real [ma1] <-- number LD#BS bitset [ma1] <-- number LDI integer [ma1] <-- [ma2] LDC cardinal [ma1] <-- [ma2] LDCH char [ma1] <-- [ma2] LDR real [ma1] <-- [ma2] LDBS bitset [ma1] <-- [ma2] LD@I integer [ma1] <-- [[ma2]+off] LD@C cardinal [ma1] <-- [[ma2]+off] LD@R real [ma1] <-- [[ma2]+off] LD@CH char [ma1] <-- [[ma2]+off] LD@BS bitset [ma1] <-- [[ma2]+off] ST@I integer [[ma1]+off] <-- [ma2] ST@C cardinal [[ma1]+off] <-- [ma2] ST@R real [[ma1]+off] <-- [ma2] ST@CH char [[ma1]+off] <-- [ma2] ST@BS bitset [[ma1]+off] <-- [ma2] ST@B boolean [[ma1]+off] <-- [ma2] MULI integer [ma1] <-- [ma1] * [ma2] MULC cardinal [ma1] <-- [ma1] * [ma2] (unsigned) MULR real [ma1] <-- [ma1] * [ma2] MULBS bitset [ma1] <-- [ma1] * [ma2] (set intersection) ADDI integer [ma1] <-- [ma1] + [ma2] ADDC cardinal [ma1] <-- [ma1] + [ma2] (unsigned) ADDR real [ma1] <-- [ma1] + [ma2] ADDBS bitset [ma1] <-- [ma1] + [ma2] (set union) INDX mixed [ma1] <-- ma2(addr) + [ma3](card) SUBI integer [ma1] <-- [ma1] + [ma2] SUBC cardinal [ma1] <-- [ma1] + [ma2] (unsigned) SUBR real [ma1] <-- [ma1] + [ma2] SUBBS bitset [ma1] <-- [ma1] + [ma2] (set difference) CPI integer set flags by : [ma1] - [ma2] CPC cardinal set flags by : [ma1] - [ma2] CPCH char set flags by : [ma1] - [ma2] CPR real set flags by : [ma1] - [ma2] CPB boolean set flags by : [ma1] - [ma2] CPBS bitset set flags by : [ma1] - [ma2] DIVI integer [ma1] <-- [ma1] / [ma2] (integer div) DIVC cardinal [ma1] <-- [ma1] / [ma2] (unsigned int div) DIVR cardinal [ma1] <-- [ma1] / [ma2] MODI integer [ma1] <-- [ma1] MOD [ma2] MODC cardinal [ma1] <-- [ma1] MOD [ma2] (unsigned) ANDB boolean [ma1] <-- [ma1] AND [ma2] ORB boolean [ma1] <-- [ma1] OR [ma2] NEGI integer [ma1] <-- - [ma1] NEGR real [ma1] <-- - [ma1] INCC cardinal [ma1] <-- [ma1] + DECC cardinal [ma1] <-- [ma1] - SCALE cardinal [ma1] <-- [ma1] * CTOI mixed [ma1] (int) <-- [ma2] (card) ITOC mixed [ma1] (card) <-- [ma2] (int) CHTOC mixed [ma1] (card) <-- [ma2] (char) BTOC mixed [ma1] (card) <-- [ma2] (boolean) * note that the action taken depends on the type of the compare operation * immediately preceeding the jump. JUN jump jump to ma1 unconditional JLT jump jump to ma1 if less than JGT jump jump to ma1 if greater than JLE jump jump to ma1 if less than or equal JGE jump jump to ma1 if greater than or equal JEQ jump jump to ma1 if equal JNE jump jump to ma1 if not equal