Как вывести данные кода сборки обратно в массив C ++? - PullRequest
0 голосов
/ 08 ноября 2019

Я работаю над программой, использующей встроенную сборку (должна использовать ее) и c ++, где я ввожу строку и сохраняю ее в буферном массиве, а затем код сборки подсчитывает, сколько экземпляров каждого символа в строкеесть, а затем вставляет эти данные обратно в другой массив с именем CountBuffer.

Поскольку я использую только az, AZ и 0-9, если вычесть десятичные значения наименьшего символа (48,65,97) из текущего десятичного значения символа, которое я рассчитывал, я могу получить индекс массиваа затем просто вставьте и увеличьте время появления этого символа в этом индексе.

Но как мне вставить это значение вхождения обратно в массив CountBuffer c ++? Я использую Леа или Мов? Кроме того, поскольку AZ, az, 0-9 не полностью расположены рядом друг с другом в таблице ascii, как мне поместить их в массив, чтобы не было пустых индексов?

Это мой первый раз, когда я работаю со встроенной сборкой, поэтому я могу быть совершенно не в том направлении в этом проекте, поэтому любая помощь будет принята с благодарностью! Спасибо за ваше время!

//C++ INPUT STRING FUNCTION

class BaseClass
{
private:
     const int characterNumber = 127; //Max number of characters
     cont int asciiNumber = 59; //59 because A-Z, a-z, 0-9
     char InputBuffer[characterNumber];
     char CountBuffer[asciiNumber];
public:

     InputData()
     {
          string sentence;
          cout << "Enter a sentence to have its characters counted: " << endl;
          cin.getline(InputBuffer, characterNumber);
     }
//FUNCTION TO COUNT INSTANCES OF EACH CHARACTER 

     CountData()
     {
          char LocalBuffer[characterNumber];
          char LocalCountBuffer[asciiNumber];

//CREATING LOCAL BUFFERS SO ASSEMBLY CAN WORK WITH IT?

          for (int i = 0; i < characterNumber; i++)
          {
               LocalBuffer[i] = InputBuffer[i];
          }

          for (int i = 0; i < asciiNumber; i++)
          {
               CountBuffer[i] = LocalCountBuffer[i];
          }


//ASSEMBLY CODE PART
          _asm
          {
               mov ecx, 127
               lea si, [LocalBuffer]
           loop1:
               mov ax, [si]
               cmp ax, 'a'
               ja lowercase
               cmp ax, 'z'
               jb lowercase
               cmp ax, 'A'
               ja uppercase
               cmp ax, 'Z'
               jb uppercase
               cmp ax, '0'
               ja number
               cmp ax, '9'
               jb number
               inc si
               loop loop1

//PART WHERE I ACTUALLY COUNT INSTANCES AND RECORD BACK INTO ARRAY

               lowercase:
                    sub ax, 97

                    ;Want to do something like mov dl, [CountBuffer+ax]
                    ; Then inc dl
                    ;Then mov [CountBuffer+ax],dl

                    ;How do i access the CountBuffer array?


                    ; uppercase:
                    ;same for this label

                    ; number:
                    ; as well as for this label

                    ;HOW DO I GET THEM TO BE NEXT TO BE CONSECUTIVE INDEXES IN THE COUNT ARRAY
          }
     }


};
...