У меня есть назначение в C ++ для чтения файла в строковую переменную, которая содержит цифры (без пробелов), и с помощью встроенной сборки программе необходимо суммировать цифры строки.Для этого я хочу выполнить цикл до конца строки (NULL) и каждую итерацию копировать 1 регистр (то есть 1 цифра) в регистр, чтобы я мог использовать сравнение и вычитание по нему.Проблема в том, что каждый раз вместо копирования символа в регистр копируется случайное значение.
Я использую Visual Studio для отладки.Переменная Y - это строка, и я пытаюсь скопировать каждую итерацию цикла текущего символа в регистр AL.
// read from txt file
string y;
cout << "\n" << "the text is \n";
ifstream infile;
infile.open("1.txt");
getline(infile, y);
cout << y;
infile.close();
// inline assembly
_asm
{
mov edx, 0 // counter
mov ebx, 0
mov eax, 0
loop1:
movzx AL, y[ebx]
cmp AL, 0x00
jz finished
sub AL, 48 // convert ascii to number, assuming digit
add edx, eax // add digit to counter
add ebx, 1 // move pointer to the next byte
loop loop1
finished:
mov i, edx
}
Например, предположим, что Y равен «123», и это первая итерация цикла,ebx равно 0. Я ожидаю, что y [ebx] будет указывать на значение 49 ('1'), и действительно в отладке я вижу, что значение y [ebx] равно 49. Я хочу скопировать указанное значение в регистр, поэтому, когда я использую инструкцию:
movzx AL, y [ebx]
Я ожидаю, что регистр AL изменится на 49 ('1'), но вместо этого значение изменится на нечто случайное, напримерв последнем сеансе отладки оно изменилось на 192 ('А').