Ejemplo n.º 1
0
 public Instruction(Mnemonic mnemonic, Operand? operand, byte opcode, int length)
 {
     this.Mnemonic = mnemonic;
     this.Operand = operand;
     this.Opcode = opcode;
     this.Length = length;
 }
Ejemplo n.º 2
0
 public Instruction(Mnemonic mnemonic, int length, byte[] opcode, params Operand[] operands)
 {
     Mnemonic = mnemonic;
     Length = length;
     Opcode = opcode;
     Operands = operands;
 }
Ejemplo n.º 3
0
 public Instruction(string mnemonic, string arg1, string arg2, string arg3)
 {
     this.mnemonic = (Mnemonic)Enum.Parse(typeof(Mnemonic), mnemonic.ToUpper());
     this.arg1 = arg1;
     this.arg2 = arg2;
     this.arg3 = arg3;
 }
Ejemplo n.º 4
0
 public Instruction(Mnemonic mnemonic, Operand[] operands, byte[] opcode, int length)
 {
     this.Mnemonic = mnemonic;
     this.Operands = operands;
     this.Opcode = opcode;
     this.Length = length;
 }
Ejemplo n.º 5
0
 private Instruction TryCompile(Mnemonic mnemonic, params Argument[] arguments)
 {
     File.WriteAllText(inputFile.Name, GetSourceCode(mnemonic, arguments));
     if (File.Exists(outputFile.Name)) File.Delete(outputFile.Name);
     Process.Start(processStartInfo).WaitForExit();
     if (!File.Exists(outputFile.Name)) return null;
     return ParseInstruction(mnemonic, arguments);
 }
Ejemplo n.º 6
0
 public Instruction(BitArray machine_code ,bool isAlias = false)
 {
     this.machine_code = machine_code;
     this.mnemonic = Mnemonic.NULL;
     this.isAlias = isAlias;
     this.arg1 = string.Empty;
     this.arg2 = string.Empty;
     this.arg3 = string.Empty;
 }
Ejemplo n.º 7
0
        private string GetSourceCode(Mnemonic mnemonic, params Argument[] arguments)
        {
            var builder = new StringBuilder()
                .AppendLine("cpu 8086")
                .Append(mnemonic);

            for (int i = 0; i < arguments.Length; i++)
            {
                if (i > 0) builder.Append(",");
                builder.Append(" ").Append(arguments[i].Text);
            }

            return builder.ToString();
        }
Ejemplo n.º 8
0
 private Instruction ParseInstruction(Mnemonic mnemonic, params Argument[] arguments)
 {
     var byteCode = File.ReadAllBytes(outputFile.Name).ToList();
     var length = byteCode.Count;
     foreach (var argument in arguments.Reverse())
     {
         if (!argument.Check(byteCode)) return null;
         argument.Read(byteCode);
     }
     return new Instruction(mnemonic, 
         length, 
         byteCode.ToArray(), 
         arguments.Select(x => x.Operand).ToArray());
 }
Ejemplo n.º 9
0
        public IEnumerable<Instruction> Compile(Mnemonic mnemonic)
        {
            yield return TryCompile(mnemonic);

            foreach (var argument in Reflection.CreateSubClasses<Argument>())
            {
                yield return TryCompile(mnemonic, argument);
            }

            foreach (var left in Reflection.CreateSubClasses<Argument>())
            {
                foreach (var right in Reflection.CreateSubClasses<Argument>())
                {
                    yield return TryCompile(mnemonic, left, right);
                }
            }
        }
Ejemplo n.º 10
0
 public PICInstructionMem2Mem(Mnemonic mnemonic, byte srcidx, uint dstaddr)
     : base(mnemonic,
            new PICOperandFSRIndexation(Constant.Byte(srcidx)),
            new PICOperandDataMemoryAddress(dstaddr))
 {
 }
Ejemplo n.º 11
0
 public PICInstructionMemF(Mnemonic mnemonic, ushort memaddr)
     : base(mnemonic, new PICOperandBankedMemory(memaddr))
 {
 }
Ejemplo n.º 12
0
 public PICInstructionImmedByte(Mnemonic mnemonic, ushort imm)
     : base(mnemonic, new PICOperandImmediate(imm, PrimitiveType.Byte))
 {
 }
Ejemplo n.º 13
0
 public override void Render(MachineInstructionWriter writer, MachineInstructionWriterOptions options)
 {
     writer.WriteMnemonic(Mnemonic.ToString());
     writer.Tab();
     Operands[0].Write(writer, options);
 }
Ejemplo n.º 14
0
 public Expression(Mnemonic expression) : base(null)
 {
     this.SubExpression = expression;
 }
Ejemplo n.º 15
0
 public Immed8Decoder(Mnemonic mnemonic)
 {
     this.mnemonic = mnemonic;
 }
Ejemplo n.º 16
0
        public void RunRule_ProvenHeadersActive_And_ValidProvenHeader_NoErrorsAreThrown()
        {
            // Setup private key.
            var mnemonic   = new Mnemonic(Wordlist.English, WordCount.Twelve);
            Key privateKey = mnemonic.DeriveExtKey().PrivateKey;

            // Setup previous chained header.
            PosBlock          prevPosBlock          = new PosBlockBuilder(this.network, privateKey).Build();
            ProvenBlockHeader prevProvenBlockHeader = new ProvenBlockHeaderBuilder(prevPosBlock, this.network).Build();
            var previousChainedHeader = new ChainedHeader(prevProvenBlockHeader, prevProvenBlockHeader.GetHash(), null);

            previousChainedHeader.SetPrivatePropertyValue("Height", this.provenHeadersActivationHeight + 1);

            // Setup proven header with valid coinstake.
            PosBlock posBlock = new PosBlockBuilder(this.network, privateKey).Build();

            posBlock.UpdateMerkleRoot();
            posBlock.Header.HashPrevBlock = prevProvenBlockHeader.GetHash();
            posBlock.Header.Bits          = 16777216;

            // Update signature.
            ECDSASignature signature = privateKey.Sign(posBlock.Header.GetHash());

            posBlock.BlockSignature = new BlockSignature {
                Signature = signature.ToDER()
            };

            ProvenBlockHeader provenBlockHeader = new ProvenBlockHeaderBuilder(posBlock, this.network).Build(prevProvenBlockHeader);

            provenBlockHeader.HashPrevBlock = prevProvenBlockHeader.GetHash();
            if (provenBlockHeader.Coinstake is IPosTransactionWithTime posTrx)
            {
                posTrx.Time = provenBlockHeader.Time;
            }

            // Set invalid coinstake script pub key
            provenBlockHeader.Coinstake.Outputs[1].ScriptPubKey = privateKey.PubKey.ScriptPubKey;

            // Setup chained header and move it to the height higher than proven header activation height.
            this.ruleContext.ValidationContext.ChainedHeaderToValidate = new ChainedHeader(provenBlockHeader, provenBlockHeader.GetHash(), previousChainedHeader);
            this.ruleContext.ValidationContext.ChainedHeaderToValidate.SetPrivatePropertyValue("Height", this.provenHeadersActivationHeight + 2);

            // Setup coinstake transaction with a valid stake age.

            uint unspentOutputsHeight = (uint)this.provenHeadersActivationHeight + 10;
            var  res            = new FetchCoinsResponse();
            var  unspentOutputs = new UnspentOutput(prevPosBlock.Transactions[1].Inputs[0].PrevOut,
                                                    new Coins(unspentOutputsHeight, new TxOut(new Money(100), privateKey.PubKey), false));

            res.UnspentOutputs.Add(unspentOutputs.OutPoint, unspentOutputs);

            this.coinView
            .Setup(m => m.FetchCoins(It.IsAny <OutPoint[]>()))
            .Returns(res);

            // Setup stake validator to pass stake age check.
            this.stakeValidator
            .Setup(m => m.IsConfirmedInNPrevBlocks(It.IsAny <UnspentOutput>(), It.IsAny <ChainedHeader>(), It.IsAny <long>()))
            .Returns(false);

            // Setup stake validator to pass signature validation.
            this.stakeValidator
            .Setup(m => m.VerifySignature(It.IsAny <UnspentOutput>(), It.IsAny <Transaction>(), It.IsAny <int>(), It.IsAny <ScriptVerify>()))
            .Returns(true);

            // Setup stake validator to pass stake kernel hash validation.
            this.stakeChain.Setup(m => m.Get(It.IsAny <uint256>())).Returns(new BlockStake());
            this.stakeValidator
            .Setup(m => m.CheckStakeKernelHash(It.IsAny <PosRuleContext>(), It.IsAny <uint>(), It.IsAny <uint256>(), It.IsAny <UnspentOutput>(), It.IsAny <OutPoint>(), It.IsAny <uint>())).Returns(true);

            // When we run the validation rule, we should not hit any errors.
            Action ruleValidation = () => this.consensusRules.RegisterRule <ProvenHeaderCoinstakeRule>().Run(this.ruleContext);

            ruleValidation.Should().NotThrow();
        }
Ejemplo n.º 17
0
        protected Safe(string password, string walletFilePath, Network network, DateTimeOffset creationTime, Mnemonic mnemonic = null)
        {
            Network        = network;
            WalletFilePath = walletFilePath;
            CreationTime   = creationTime > EarliestPossibleCreationTime ? creationTime : EarliestPossibleCreationTime;

            if (mnemonic != null)
            {
                SetSeed(password, mnemonic);
            }
        }
Ejemplo n.º 18
0
        public void RunRule_ProvenHeadersActive_And_InvalidCoinstakeKernelSignature_BadBlockSignatureErrorIsThrown()
        {
            // Setup private key.
            var mnemonic   = new Mnemonic(Wordlist.English, WordCount.Twelve);
            Key privateKey = mnemonic.DeriveExtKey().PrivateKey;

            // Setup previous chained header.
            PosBlock          prevPosBlock          = new PosBlockBuilder(this.network, privateKey).Build();
            ProvenBlockHeader prevProvenBlockHeader = new ProvenBlockHeaderBuilder(prevPosBlock, this.network).Build();
            var previousChainedHeader = new ChainedHeader(prevProvenBlockHeader, prevProvenBlockHeader.GetHash(), null);

            previousChainedHeader.SetPrivatePropertyValue("Height", this.provenHeadersActivationHeight + 1);

            // Setup proven header with valid coinstake.
            PosBlock posBlock = new PosBlockBuilder(this.network, privateKey).Build();

            posBlock.UpdateMerkleRoot();
            ProvenBlockHeader provenBlockHeader = new ProvenBlockHeaderBuilder(posBlock, this.network).Build(prevProvenBlockHeader);

            provenBlockHeader.HashPrevBlock = prevProvenBlockHeader.GetHash();
            if (provenBlockHeader.Coinstake is IPosTransactionWithTime posTrx)
            {
                posTrx.Time = provenBlockHeader.Time;
            }

            // Set invalid coinstake script pub key.
            provenBlockHeader.Coinstake.Outputs[1].ScriptPubKey = new Script("03cdac179a3391d96cf4957fa0255e4aa8055a993e92df7146e740117885b184ea OP_CHECKSIG");

            // Setup chained header and move it to the height higher than proven header activation height.
            this.ruleContext.ValidationContext.ChainedHeaderToValidate = new ChainedHeader(provenBlockHeader, provenBlockHeader.GetHash(), previousChainedHeader);
            this.ruleContext.ValidationContext.ChainedHeaderToValidate.SetPrivatePropertyValue("Height", this.provenHeadersActivationHeight + 2);

            // Setup coinstake transaction with a valid stake age.
            uint unspentOutputsHeight = (uint)this.provenHeadersActivationHeight + 10;

            var res            = new FetchCoinsResponse();
            var unspentOutputs = new UnspentOutput(prevPosBlock.Transactions[1].Inputs[0].PrevOut,
                                                   new Coins(unspentOutputsHeight, new TxOut(new Money(100), privateKey.PubKey), false));

            res.UnspentOutputs.Add(unspentOutputs.OutPoint, unspentOutputs);

            this.coinView
            .Setup(m => m.FetchCoins(It.IsAny <OutPoint[]>()))
            .Returns(res);

            // Setup stake validator to pass signature validation.
            this.stakeValidator
            .Setup(m => m.VerifySignature(It.IsAny <UnspentOutput>(), It.IsAny <Transaction>(), It.IsAny <int>(), It.IsAny <ScriptVerify>()))
            .Returns(true);

            // Setup stake validator to pass stake kernel hash validation.
            this.stakeChain.Setup(m => m.Get(It.IsAny <uint256>())).Returns(new BlockStake());
            this.stakeValidator
            .Setup(m => m.CheckStakeKernelHash(It.IsAny <PosRuleContext>(), It.IsAny <uint>(), It.IsAny <uint256>(), It.IsAny <UnspentOutput>(), It.IsAny <OutPoint>(), It.IsAny <uint>())).Returns(true);

            // Setup stake validator to pass stake age check.
            this.stakeValidator
            .Setup(m => m.IsConfirmedInNPrevBlocks(It.IsAny <UnspentOutput>(), It.IsAny <ChainedHeader>(), It.IsAny <long>()))
            .Returns(false);

            // When we run the validation rule, we should hit bad merkle proof error.
            Action ruleValidation = () => this.consensusRules.RegisterRule <ProvenHeaderCoinstakeRule>().Run(this.ruleContext);

            ruleValidation.Should().Throw <ConsensusErrorException>()
            .And.ConsensusError
            .Should().Be(ConsensusErrors.BadBlockSignature);
        }
Ejemplo n.º 19
0
 public TargetAbs11Decoder(Mnemonic mnemonic)
 {
     this.mnemonic = mnemonic;
 }
Ejemplo n.º 20
0
 public MoviIncDecDecoder(Mnemonic mnemonic)
 {
     this.mnemonic = mnemonic;
 }
Ejemplo n.º 21
0
 public FSRIndexedDecoder(Mnemonic mnemonic)
 {
     this.mnemonic = mnemonic;
 }
Ejemplo n.º 22
0
        private void LoadRegularData(string filename)
        {
            //AsmDudeToolsStatic.Output_INFO("MnemonicStore:loadRegularData: filename=" + filename);
            try
            {
                System.IO.StreamReader file = new System.IO.StreamReader(filename);
                string line;
                while ((line = file.ReadLine()) != null)
                {
                    if ((line.Length > 0) && (!line.StartsWith(";")))
                    {
                        string[] columns = line.Split('\t');
                        if (columns.Length == 4)
                        { // general description
                            #region
                            Mnemonic mnemonic = AsmSourceTools.ParseMnemonic(columns[1]);
                            if (mnemonic == Mnemonic.NONE)
                            {
                                // ignore the unknown mnemonic
                                //AsmDudeToolsStatic.Output_WARNING("MnemonicStore:loadRegularData: unknown mnemonic in line: " + line);
                            }
                            else
                            {
                                if (!this._description.ContainsKey(mnemonic))
                                {
                                    this._description.Add(mnemonic, columns[2]);
                                }
                                else
                                {
                                    // this happens when the mnemonic is defined in multiple files, using the data from the first file
                                    //AsmDudeToolsStatic.Output_WARNING("MnemonicStore:loadRegularData: mnemonic " + mnemonic + " already has a description");
                                }
                                if (!this._htmlRef.ContainsKey(mnemonic))
                                {
                                    this._htmlRef.Add(mnemonic, columns[3]);
                                }
                                else
                                {
                                    // this happens when the mnemonic is defined in multiple files, using the data from the first file
                                    //AsmDudeToolsStatic.Output_WARNING("MnemonicStore:loadRegularData: mnemonic " + mnemonic + " already has a html ref");
                                }
                            }
                            #endregion
                        }
                        else if ((columns.Length == 5) || (columns.Length == 6))
                        { // signature description, ignore an old sixth column
                            #region
                            Mnemonic mnemonic = AsmSourceTools.ParseMnemonic(columns[0]);
                            if (mnemonic == Mnemonic.NONE)
                            {
                                AsmDudeToolsStatic.Output_WARNING("MnemonicStore:loadRegularData: unknown mnemonic in line: " + line);
                            }
                            else
                            {
                                AsmSignatureElement se = new AsmSignatureElement(mnemonic, columns[1], columns[2], columns[3], columns[4]);
                                if (this.Add(se))
                                {
                                    AsmDudeToolsStatic.Output_WARNING("MnemonicStore:loadRegularData: signature already exists" + se.ToString());
                                }
                            }
                            #endregion
                        }
                        else
                        {
                            AsmDudeToolsStatic.Output_WARNING("MnemonicStore:loadRegularData: s.Length=" + columns.Length + "; funky line" + line);
                        }
                    }
                }
                file.Close();

                #region Fill Arch
                foreach (KeyValuePair <Mnemonic, IList <AsmSignatureElement> > pair in this._data)
                {
                    ISet <Arch> archs = new HashSet <Arch>();
                    foreach (AsmSignatureElement signatureElement in pair.Value)
                    {
                        foreach (Arch arch in signatureElement.Arch)
                        {
                            if (arch == Arch.ARCH_NONE)
                            {
                                AsmDudeToolsStatic.Output_WARNING("MnemonicStore:loadRegularData: found ARCH NONE.");
                            }
                            else
                            {
                                archs.Add(arch);
                            }
                        }
                    }
                    IList <Arch> list = new List <Arch>();
                    foreach (Arch a in archs)
                    {
                        list.Add(a);
                    }
                    this._arch[pair.Key] = list;
                }
                #endregion
            }
            catch (FileNotFoundException)
            {
                AsmDudeToolsStatic.Output_ERROR("MnemonicStore:loadRegularData: could not find file \"" + filename + "\".");
            }
            catch (Exception e)
            {
                AsmDudeToolsStatic.Output_ERROR("MnemonicStore:loadRegularData: error while reading file \"" + filename + "\"." + e);
            }
        }
Ejemplo n.º 23
0
        void GetInstructionTypeSpecial1(Mnemonic mne)
        {
            Register r;

            if (passnum == 1)
            {
                codegen.AdvancePC(mne);
                return;
            }

            scanner.Get(out sym);
            if (sym != Token.Register)
            {
                scanner.Mark(ErrorType.RegisterExpected);
                return;
            }
            r = scanner.Register;
            scanner.Get(out sym);
            switch (mne)
            {
                case Mnemonic.NOT:
                    codegen.PutF1(Mnemonic.XOR, r, r, -1);
                    break;
                case Mnemonic.CLR:
                    codegen.PutF1(Mnemonic.MOV, r, Register.R0, 0);
                    break;
                case Mnemonic.RDH:
                    codegen.PutF0(Mnemonic.RDH, r, Register.R0, Register.R0);
                    break;
                case Mnemonic.RDF:
                    codegen.PutF0(Mnemonic.RDF, r, Register.R0, Register.R0);
                    break;
                case Mnemonic.INC:
                    codegen.PutF1(Mnemonic.ADD, r, r, 1);
                    break;
                case Mnemonic.DEC:
                    codegen.PutF1(Mnemonic.SUB, r, r, 1);
                    break;
            }
        }
Ejemplo n.º 24
0
        private void LoadHandcraftedData(string filename)
        {
            //AsmDudeToolsStatic.Output_INFO("MnemonicStore:load_data_intel: filename=" + filename);
            try
            {
                System.IO.StreamReader file = new System.IO.StreamReader(filename);
                string line;
                while ((line = file.ReadLine()) != null)
                {
                    if ((line.Length > 0) && (!line.StartsWith(";")))
                    {
                        string[] columns = line.Split('\t');
                        if (columns.Length == 4)
                        { // general description
                            #region
                            Mnemonic mnemonic = AsmSourceTools.ParseMnemonic(columns[1]);
                            if (mnemonic == Mnemonic.NONE)
                            {
                                AsmDudeToolsStatic.Output_WARNING("MnemonicStore:loadHandcraftedData: unknown mnemonic in line" + line);
                            }
                            else
                            {
                                if (this._description.ContainsKey(mnemonic))
                                {
                                    this._description.Remove(mnemonic);
                                }
                                this._description.Add(mnemonic, columns[2]);

                                if (this._htmlRef.ContainsKey(mnemonic))
                                {
                                    this._htmlRef.Remove(mnemonic);
                                }
                                this._htmlRef.Add(mnemonic, columns[3]);
                            }
                            #endregion
                        }
                        else if ((columns.Length == 5) || (columns.Length == 6))
                        { // signature description, ignore an old sixth column
                            #region
                            Mnemonic mnemonic = AsmSourceTools.ParseMnemonic(columns[0]);
                            if (mnemonic == Mnemonic.NONE)
                            {
                                AsmDudeToolsStatic.Output_WARNING("MnemonicStore:loadHandcraftedData: unknown mnemonic in line" + line);
                            }
                            else
                            {
                                AsmSignatureElement se = new AsmSignatureElement(mnemonic, columns[1], columns[2], columns[3], columns[4]);
                                this.Add(se);
                            }
                            #endregion
                        }
                        else
                        {
                            AsmDudeToolsStatic.Output_WARNING("MnemonicStore:loadHandcraftedData: s.Length=" + columns.Length + "; funky line" + line);
                        }
                    }
                }
                file.Close();

                #region Fill Arch
                foreach (KeyValuePair <Mnemonic, IList <AsmSignatureElement> > pair in this._data)
                {
                    ISet <Arch> archs = new HashSet <Arch>();
                    foreach (AsmSignatureElement signatureElement in pair.Value)
                    {
                        foreach (Arch arch in signatureElement.Arch)
                        {
                            archs.Add(arch);
                        }
                    }
                    IList <Arch> list = new List <Arch>();
                    foreach (Arch a in archs)
                    {
                        list.Add(a);
                    }
                    this._arch[pair.Key] = list;
                }
                #endregion
            }
            catch (FileNotFoundException)
            {
                AsmDudeToolsStatic.Output_ERROR("MnemonicStore:LoadHandcraftedData: could not find file \"" + filename + "\".");
            }
            catch (Exception e)
            {
                AsmDudeToolsStatic.Output_ERROR("MnemonicStore:LoadHandcraftedData: error while reading file \"" + filename + "\"." + e);
            }
        }
Ejemplo n.º 25
0
 public override void Render(MachineInstructionWriter writer, MachineInstructionWriterOptions options)
 {
     writer.WriteMnemonic(Mnemonic.ToString());
 }
Ejemplo n.º 26
0
 public bool HasElement(Mnemonic mnemonic)
 {
     return(this._data.ContainsKey(mnemonic));
 }
Ejemplo n.º 27
0
 public PICInstructionImmedShort(Mnemonic mnemonic, short imm)
     : base(mnemonic,
            new PICOperandImmediate(imm, PrimitiveType.Int16))
 {
 }
Ejemplo n.º 28
0
 public IEnumerable <AsmSignatureElement> GetSignatures(Mnemonic mnemonic)
 {
     return((this._data.TryGetValue(mnemonic, out var list)) ? list : Enumerable.Empty <AsmSignatureElement>());
 }
Ejemplo n.º 29
0
 public PICInstructionMem2Mem(Mnemonic mnemonic, uint srcaddr, uint dstaddr)
     : base(mnemonic,
            new PICOperandDataMemoryAddress(srcaddr),
            new PICOperandDataMemoryAddress(dstaddr))
 {
 }
Ejemplo n.º 30
0
 public IEnumerable <Arch> GetArch(Mnemonic mnemonic)
 {
     return((this._arch.TryGetValue(mnemonic, out var value)) ? value : Enumerable.Empty <Arch>());
 }
Ejemplo n.º 31
0
 public PICInstructionMem2Mem(Mnemonic mnemonic, byte srcidx, byte dstidx)
     : base(mnemonic,
            new PICOperandFSRIndexation(Constant.Byte(srcidx)),
            new PICOperandFSRIndexation(Constant.Byte(dstidx)))
 {
 }
Ejemplo n.º 32
0
 public TargetRel9Decoder(Mnemonic mnemonic)
 {
     this.mnemonic = mnemonic;
 }
Ejemplo n.º 33
0
 public PICInstructionMemFB(Mnemonic mnemonic, ushort memaddr, byte bitno)
     : base(mnemonic, new PICOperandBankedMemory(memaddr), new PICOperandMemBitNo(bitno))
 {
 }
Ejemplo n.º 34
0
 public static Instruction Find(Mnemonic mnemonic, IEnumerable<Argument> arguments)
 {
     var operands = arguments.Select(argument => argument.Operands.ToArray()).ToArray();
     loading.Wait();
     return instructions[mnemonic].FirstOrDefault(instruction => CheckOperands(instruction, operands));
 }
Ejemplo n.º 35
0
 public MemoryByteWDestDecoder(Mnemonic mnemonic)
 {
     this.mnemonic = mnemonic;
 }
Ejemplo n.º 36
0
        void GetInstructionTypeR(Mnemonic mne)
        {
            Register d, s1, s2;
            int imm;
            Symbol refsym;

            scanner.Get(out sym);
            if (sym != Token.Register)
            {
                scanner.Mark(ErrorType.RegisterExpected);
                return;
            }
            d = scanner.Register;
            scanner.Get(out sym);
            if (sym != Token.Comma)
            {
                scanner.Mark(ErrorType.CommaExpected);
                return;
            }
            scanner.Get(out sym);
            if (sym != Token.Register)
            {
                scanner.Mark(ErrorType.RegisterExpected);
                return;
            }
            s1 = scanner.Register;
            scanner.Get(out sym);
            if (sym != Token.Comma)
            {
                scanner.Mark(ErrorType.CommaExpected);
                return;
            }
            scanner.Get(out sym);
            if (sym == Token.Register)
            {
                if (passnum == 1)
                {
                    codegen.AdvancePC(mne);
                    return;
                }
                s2 = scanner.Register;
                scanner.Get(out sym);
                codegen.PutF0(mne, d, s1, s2);
            }
            else
            {
                imm = GetExpression(out refsym);
                if (passnum == 1)
                {
                    codegen.AdvancePC(mne, imm);
                    return;
                }
                if (refsym != null && codegen.OutputIsRelocatable)
                {
                    scanner.Mark(ErrorType.RelocatableSymbolNotAllowed);
                    return;
                }
                codegen.PutF1(mne, d, s1, imm);
            }
        }
Ejemplo n.º 37
0
        void GetInstructionTypeBranch(Mnemonic mne)
        {
            int imm;
            Symbol refsym;

            if (passnum == 1)
            {
                codegen.AdvancePC(mne);
                return;
            }
            scanner.Get(out sym);
            if (sym == Token.Register)
            {
                Register r = scanner.Register;
                codegen.PutF3(mne, r);
            }
            else
            {
                imm = GetExpression(out refsym);
                if (refsym != null)
                {
                    imm -= (int)codegen.PC + 4;
                    if (refsym.type == SymbolType.Import)
                        scanner.Mark(ErrorType.ImportedSymbolNotAllowed);
                }
                codegen.PutF3off(mne, imm);
            }
        }
Ejemplo n.º 38
0
 public FSRArithDecoder(Mnemonic mnemonic)
 {
     this.mnemonic = mnemonic;
 }
Ejemplo n.º 39
0
 public string GetHtmlRef(Mnemonic mnemonic)
 {
     return((this._htmlRef.TryGetValue(mnemonic, out string value)) ? value : "");
 }
Ejemplo n.º 40
0
        void GetInstructionTypeMem(Mnemonic mne)
        {
            Register d, s;
            int off;
            Symbol refsym;

            scanner.Get(out sym);
            if (sym != Token.Register)
            {
                scanner.Mark(ErrorType.RegisterExpected);
                return;
            }
            d = scanner.Register;
            scanner.Get(out sym);
            if (sym != Token.Comma)
            {
                scanner.Mark(ErrorType.CommaExpected);
                return;
            }
            scanner.Get(out sym);
            if (sym != Token.Register)
            {
                scanner.Mark(ErrorType.RegisterExpected);
                return;
            }
            s = scanner.Register;
            scanner.Get(out sym);
            if (sym != Token.Comma)
            {
                scanner.Mark(ErrorType.CommaExpected);
                return;
            }
            scanner.Get(out sym);
            off = GetExpression(out refsym);
            if (passnum == 1)
            {
                codegen.AdvancePC(mne, off);
                return;
            }
            if (refsym != null && codegen.OutputIsRelocatable)
                scanner.Mark(ErrorType.RelocatableSymbolNotAllowed);
            codegen.PutF2(mne, d, s, off);
        }
Ejemplo n.º 41
0
        void GetInstructionTypeCall(Mnemonic mne)
        {
            int imm;
            Symbol refsym;

            if (passnum == 1)
            {
                codegen.AdvancePC(mne);
                return;
            }
            scanner.Get(out sym);
            if (sym == Token.Register)
            {
                Register r = scanner.Register;
                codegen.PutF3(mne, r);
            }
            else
            {
                imm = GetExpression(out refsym);
                if (refsym != null)
                {
                    imm -= (int)codegen.PC;
                }
                codegen.PutF3off(mne, imm, refsym);
            }
        }
Ejemplo n.º 42
0
 public void SetHtmlRef(Mnemonic mnemonic, string value)
 {
     this._htmlRef[mnemonic] = value;
 }
Ejemplo n.º 43
0
        void GetInstructionTypeMov(Mnemonic mne)
        {
            Register d, s;
            int imm;
            Symbol refsym;

            scanner.Get(out sym);
            if (sym != Token.Register)
            {
                scanner.Mark(ErrorType.RegisterExpected);
                return;
            }
            d = scanner.Register;
            scanner.Get(out sym);
            if (sym != Token.Comma)
            {
                scanner.Mark(ErrorType.CommaExpected);
                return;
            }
            scanner.Get(out sym);
            if (sym == Token.Register)
            {
                if (mne != Mnemonic.MOV)
                {
                    scanner.Mark(ErrorType.RegisterExpected);
                    return;
                }
                if (passnum == 1)
                {
                    codegen.AdvancePC(mne);
                    return;
                }
                s = scanner.Register;
                scanner.Get(out sym);
                codegen.PutF0(Mnemonic.MOV, d, Register.R0, s);
            }
            else
            {
                if (mne == Mnemonic.MOVA && !codegen.OutputIsRelocatable)
                    mne = Mnemonic.MOV;
                imm = GetExpression(out refsym);
                if (passnum == 1)
                {
                    codegen.AdvancePC(mne, imm);
                    return;
                }
                if (mne == Mnemonic.MOVA)
                {
                    codegen.PutMOVA(d, imm, refsym);
                }
                else
                {
                    codegen.PutF1(mne, d, Register.R0, imm);
                    if (refsym != null && codegen.OutputIsRelocatable)
                        scanner.Mark(ErrorType.RelocatableSymbolNotAllowed);
                }
            }
        }
Ejemplo n.º 44
0
 public string GetDescription(Mnemonic mnemonic)
 {
     return((this._description.TryGetValue(mnemonic, out string value)) ? value : "");
 }
Ejemplo n.º 45
0
        void GetInstructionTypeSpecial0(Mnemonic mne)
        {
            if (passnum == 1)
            {
                codegen.AdvancePC(mne);
                return;
            }

            scanner.Get(out sym);
            switch (mne)
            {
                case Mnemonic.RET:
                    codegen.PutF3(Mnemonic.BRA, Register.LNK);
                    break;
                case Mnemonic.NOP:
                    codegen.PutF0(Mnemonic.MOV, Register.R0, Register.R0, Register.R0);
                    break;
            }
        }
Ejemplo n.º 46
0
 public InstructionDecoder(InstrClass iclass, Mnemonic mnemonic, params Mutator <M6809Disassembler> [] mutators)
 {
     this.iclass   = iclass;
     this.mnemonic = mnemonic;
     this.mutators = mutators;
 }
Ejemplo n.º 47
0
 public PICInstructionNoOpnd(Mnemonic mnemonic) : base(mnemonic)
 {
 }
Ejemplo n.º 48
0
        /// <summary>
        /// begin wong's
        /// </summary>
        private void ToAsmCode()
        {
            int _imm = 0;
             this.mnemonic = getMnemonic();

             switch (this.mnemonic)
             {
                 case Mnemonic.ADD:
                 case Mnemonic.ADDU:
                 case Mnemonic.SUB:
                 case Mnemonic.SUBU:
                 case Mnemonic.AND:
                 case Mnemonic.OR:
                 case Mnemonic.XOR:
                 case Mnemonic.NOR:
                 case Mnemonic.SLT:
                 case Mnemonic.SLTU:
                 case Mnemonic.SLL:
                 case Mnemonic.SRL:
                 case Mnemonic.SRA:
                 case Mnemonic.SLLV:
                 case Mnemonic.SRLV:
                 case Mnemonic.SRAV:
                     this.arg1 = getRd();
                     this.arg2 = getRs();
                     this.arg3 = getRt();
                     break;
                 case Mnemonic.JR:
                 case Mnemonic.JALR:
                     this.arg1 = getRs();
                     break;
                 case Mnemonic.ADDI:
                 case Mnemonic.ADDIU:
                     this.arg1 = getRt();
                     this.arg2 = getRs();
                     _imm = getImm();
                     if (_imm < 32768)
                     {
                         this.arg3 = Convert.ToString(_imm);
                     }
                     else
                     {
                         this.arg3 = Convert.ToString(_imm-65536);
                     }
                     break;
                 case Mnemonic.ANDI:
                 case Mnemonic.ORI:
                 case Mnemonic.XORI:
                     this.arg1 = getRt();
                     this.arg2 = getRs();
                     this.arg3 =  Convert.ToString(getImm());
                     break;
                 case Mnemonic.LUI:
                     this.arg1 = getRt();
                     _imm = getImm();
                     if (_imm < 32768)
                     {
                         this.arg2 = Convert.ToString(_imm);
                     }
                     else
                     {
                         this.arg2 = Convert.ToString(_imm-65536);
                     }
                     break;
                 case Mnemonic.SLTI:
                 case Mnemonic.SLTIU:
                     this.arg1 = getRt();
                     this.arg2 = getRs();
                     _imm = getImm();
                     if (_imm < 32768)
                     {
                         this.arg3 = Convert.ToString(_imm);
                     }
                     else
                     {
                         this.arg3 = Convert.ToString(_imm-65536);
                     }
                     break;
                 case Mnemonic.LW:
                 case Mnemonic.SW:
                 case Mnemonic.LB:
                 case Mnemonic.LBU:
                 case Mnemonic.LH:
                 case Mnemonic.LHU:
                 case Mnemonic.SB:
                 case Mnemonic.SH:
                     this.arg1 = getRt();
                     this.arg2 = getRs();
                     _imm = getImm();
                     if (_imm < 32768)
                     {
                         this.arg3 = Convert.ToString(_imm);
                     }
                     else
                     {
                         this.arg3 = Convert.ToString(_imm-65536);
                     }
                     break;
                 case Mnemonic.BEQ:
                 case Mnemonic.BNE:
                     this.arg1 = getRt();
                     this.arg2 = getRs();
                     _imm = getImm();
                     if (_imm < 32768)
                     {
                         this.arg3 = Convert.ToString(_imm);
                     }
                     else
                     {
                         this.arg3 = Convert.ToString(_imm-65536);
                     }
                     break;
                /* case Mnemonic.BGEZ:
                 case Mnemonic.BGEZAL:
                 case Mnemonic.BGTZ:
                 case Mnemonic.BLEZ:
                 case Mnemonic.BLTZ:
                 case Mnemonic.BLTZAL:
                     mnemonicString = mnemonicString + this.mnemonic.ToString() + " ";
                     mnemonicString = mnemonicString + this.arg1;
                     mnemonicString = mnemonicString + "," + this.arg2;
                     break;*/
                 case Mnemonic.J:
                 case Mnemonic.JAL:
                     int _address = getAdress();
                     if (_imm < 33554432)
                     {
                         this.arg1 = Convert.ToString(address);
                     }
                     else
                     {
                         this.arg1 = Convert.ToString(address-67108864);
                     }
                     break;
                 default:
                     break;
             }
             //arg3 = getRd();
             //private int address;
        }