Source: assembly/MC.js

BigDivOrMult = require("./big_div_or_mult").BigDivOrMult
Memory = require("../machine/innerComponents/memory").Memory
NB_CHRS_PER_WORD = require("../machine/constants").NB_CHRS_PER_WORD

/**
 * complete multiplication
 */
class MC extends BigDivOrMult {
  constructor(AD, OD, OF, bullGamma) {
    if (AD == 1 || AD == 2) {
      throw Error("Invalid instruction E" + Instruction.getChar(AD) + "xx");
    }
    super(14, AD, OD, OF, bullGamma);
  }

  _compute(m1m2, mb) {
    m1m2.multiply(mb, this.OD, this.OF)
  }

  _computeValue(m1m2) {
    if (this.OF !== 0) {
      this.bullGamma.md = NB_CHRS_PER_WORD;
    }
    m1m2.multiplyValue(this.OF, this.OD + NB_CHRS_PER_WORD);
  }

  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-M2";
    }
    if (this.AD > 2) {
      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-M2";
    }
    throw Error("Cannot describe invalid instruction");
  }

  getShortType() {
    return "MC";
  }

  getLongType() {
    return "Multiplication Complète";
  }
}

module.exports.MC = MC;