Source: assembly/MR.js

SmallDivOrMultOperation = require("./small_div_or_mult").SmallDivOrMult

/**
 * reduced multiplication
 */
class MR extends SmallDivOrMultOperation {
  constructor(AD, OD, OF, bullGamma) {
    if (AD == 1) {
      throw Error("Invalid instruction C1xx");
    }
    super(12, AD, OD, OF, bullGamma);
  }

  _compute(mb) {
    this.bullGamma.getMemory(1).multiply(mb, this.OD, this.OF);
  }

  _computeValue() {
    this.bullGamma.getMemory(1).multiplyValue(this.OF, this.OD);
  }

  getDescription() {
    if (this.AD == 0) {
      return "Multipplie le nombre contenu dans M1 par " + this.OF
      + " en position " + this.AD
      + ", le résultat est en M1";
    }
    if (this.AD > 1) {
      return "Multipplie le nombre contenu dans M1 par M" + this.AD
      + " entre les positions " + this.OD + " et " + this.OF
      + ", le résultat est en M1";
    }
    throw Error("Cannot describe invalid instruction");
  }

  getShortType() {
    return "MR";
  }

  getLongType() {
    return "Multiplication Réduite";
  }

}

module.exports.MR = MR