Beispiel #1
0
        // СЧИТАЕМ КОЛИЧЕСТВО БАЙТ В ДИРЕКТИВЕ ******************************************************

        public static int CountDirective()
        {
            int result = 0;

            AnalysisSyntaxy.DoOperands();

            if (Result.Current().Error != null)
            {
                return(0);
            }

            switch (TableSentence.Item.Mnem)
            {
            case "SEGMENT":
                DoSegment(TableLexeme.Label().Name);
                break;

            case "ASSUME":
                DoAssume();
                break;

            case "ENDS":
                TableSegment.ActiveSegmentNumber = 0;
                break;

            case "DB":
                result += CountData();
                break;

            case "DW":
                result += 2;
                break;

            case "DD":
                result += 4;
                break;

            case "LABEL":
                DoLabel();
                break;

            default:
                Result.Current().isOffset = false;
                break;
            }
            return(result);
        }
Beispiel #2
0
        // СЧИТАЕМ КОЛИЧЕСТВО БАЙТ В ИНСТРУКЦИИ ******************************************************

        public static int CountInstruction()
        {
            string MnemName = TableSentence.Item.Mnem;

            AnalysisSyntaxy.DoOperands();

            if (Result.Current().Error != null)
            {
                return(0);
            }

            //if (TableSegment.ActiveSegmentNumber == 0 && !(MnemName == ".386") && !(MnemName == "ENDS") && !(MnemName == "END"))
            //    Errors.Add(2);//@error команда вне сегмента

            TableCurrInstruct CurrInstr = new TableCurrInstruct(MnemName);

            CurrInstr.IncByteCount(TableInstruction.GetByName(MnemName).ByteCount, TableCurrInstruct.Types.пусто);//размер кода операции
            CountPrefix(CurrInstr);
            CountModRm(CurrInstr);
            CountSib(CurrInstr);
            CountOffset(CurrInstr);

            return(CurrInstr.ByteCount);
        }