Assembly interpreter code на С#

302
11 ноября 2017, 10:36

Я пишу assembly interpreter code в C#.

Когда в Ассемблере вводят в строку DB, DW, DD (макс char символ 31), то как проверить на q(octal), b(binary), h(hexaadecimal)?

Черновик кода:

if (str[i] == "DB")
{
    char[] ch = new char[31];
        if ()
        {
                switch (chr[chr.Length - 1])
                {
                    case 'q':
                        {
                            break;
                        }
                    case 'b':
                        {
                            break;
                        }
                    case 'h':
                        {
                           break;
                        }
                }
            }
            else Console.WriteLine("Variable wrong");
        }
    }
Answer 1

Ассемблер интерпретер на С шарп очень прост. Ваш код приблизительно такой логики, можно и так. Точно такой же для dw и dd.

i++;
string[] strg = str.Split(' ');
for (int i= 0; i< strg.Length; i++)
{
    if (strg[m] == "DB")
    {
        char[] ch = new char[31];
        if (prog.ContainsKey(strg[i- 1]))
        { Console.WriteLine("Variable here"); }
        else
        {
            if (strg[i- 1].Length <= 31)
            {
                ch = strg[i- 1].ToCharArray();
                bool key = true;
                for (int n = 0; n < ch.Length; n++)
                {
                    if ((ch[n] == '&') || (ch[n] == '^') || (ch[n] == ' ') || (ch[n] == ';') || (ch[n] == '.') || (Char.IsDigit(ch[0]))) { key = false; }
                    else key = true;
                }
                if (key == true)
                {
                    char[] sign = new char[strg[i+ 1].Length];
                    sign = strg[i+ 1].ToCharArray();
                    switch (sign[sign.Length - 1])
                    {
                        case 'q':
                            {
                                q = true;
                                int temp = Convert.ToInt32(strg[i+ 1].Substring(0, strg[i+ 1].Length - 1), 8);
                                strg[i+ 1] = Convert.ToString(temp);
                                prog.Add(String.Format(strg[i- 1]), Convert.ToString(strg[i+ 1]));
                                Console.WriteLine(prog[strg[i- 1]]);
                                break;
                            }
                        case 'b':
                            {
                                b = true;
                                int temp = Convert.ToInt32(strg[i+ 1].Substring(0, strg[i+ 1].Length - 1), 2);
                                strg[i+ 1] = Convert.ToString(temp);
                                prog.Add(String.Format(strg[i- 1]), Convert.ToString(strg[i+ 1]));
                                Console.WriteLine(prog[strg[i- 1]]);
                                break;
                            }
                        case 'h':
                            {
                                h = true;
                                int temp = Convert.ToInt32(strg[i+ 1].Substring(0, strg[i+ 1].Length - 1), 16);
                                strg[i+ 1] = Convert.ToString(temp);
                                prog.Add(String.Format(strg[i- 1]), Convert.ToString(strg[i+ 1]));
                                Console.WriteLine(prog[strg[i- 1]]);
                                break;
                            }
                        default:
                            {
                                prog.Add(String.Format(strg[i- 1]), Convert.ToString(strg[i+ 1]));
                                Console.WriteLine(prog[strg[i- 1]]);
                                break;
                            }
                    }
                }
                else Console.WriteLine("Variable is wrong");
            }
            else
            {
                Console.WriteLine("variable out of range{0} ", strg[i- 1]);
            }
        }
    }
    else if (strg[m] == "DW")
    {
READ ALSO
Как правильно создавать объекты?

Как правильно создавать объекты?

Слышал что не рекомендуется использовать оператор new где попалоЕго необходимо изолировать в отдельном классе который будет отвечать за создания...

257
Свойства-расширения в C#

Свойства-расширения в C#

Возможно ли сделать свойство-расширение для класса? Например у меня есть такой метод-расширение:

234
c# не работают стандартные библиотеки в CUDA проекте

c# не работают стандартные библиотеки в CUDA проекте

Среда Visual Studio 2017Изучаю CUDA программирование, делаю по этому уроку https://www

303
Как определить параметры цветов в MahApps?

Как определить параметры цветов в MahApps?

На данном сайте посоветовали использовать библиотеку MahAppsMetro для удобного преобразования стиля и цвета окна

254