## ALP Programming Guide and Reference

[prev][next][parent][TOC]

### Operation

    IF (instruction = MOVSD) OR (instruction has doubleword operands)
    THEN OperandSize  32;
    ELSE OperandSize  16;
    IF AddressSize = 16
    THEN use SI for source-index and DI for destination-index;
    ELSE (* AddressSize = 32 *)
       use ESI for source-index and EDI for destination-index;
    FI;
    IF byte type of instruction
    THEN
       [destination-index]  [source-index]; (* byte assignment *)
       IF DF = 0 THEN IncDec  1 ELSE IncDec  -1; FI;
    ELSE
       IF OperandSize = 16
       THEN
          [destination-index]  [source-index]; (* word assignment *)
          IF DF = 0 THEN IncDec  2 ELSE IncDec  -2; FI;
       ELSE (* OperandSize = 32 *)
          [destination-index]  [source-index]; (* doubleword assignment *)
          IF DF = 0 THEN IncDec  4 ELSE IncDec  -4; FI;
       FI;
    FI;
    source-index  source-index + IncDec;
    destination-index  destination-index + IncDec;