Я работаю над программой, использующей встроенную сборку (должна использовать ее) и 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
}
}
};