Консультация № 192205
21.12.2017, 23:05
0.00 руб.
0 2 1
Здравствуйте! Прошу помощи в следующем вопросе:
Есть код программы на асм. Нужно написать программу на с++ с использованием программы на асм
не понимаю, почему мне программа выдает строку без обработки.
Пожалуйста, помогите разобраться

Приложение:
#include <iostream>
#include <string>
using namespace std;

void main()
{
char *Stroka = new char[80];
char symbol1;
char symbol2;
int number;
cout << "Enter string: ";
cin.getline(Stroka, 80, '\n');
cout << "Enter char 1: ";
cin >> symbol1;
cout << "Enter char 2: ";
cin >> symbol2;
_asm
{
mov edx, Stroka
mov bl, symbol1
mov bh, symbol2

lea esi, Stroka; указываем источник(строку) для обработки

sleduiushii_simvol :
mov al, [esi]; сохраняем символ в регистр
cmp al, 0; сравнение с "концом" строки
je exitmacr; выход, если конец строки

proverka :
cmp al, bl; сравниваем символы
je naiden; если равны, то символ найден, переход для замены
inc esi; если не равны, то переходим к следующему символу строки
jmp sleduiushii_simvol

naiden :
; символ найден
mov[esi], bh; заменили
inc esi; переходим к следующему символу строки
jmp sleduiushii_simvol


exitmacr :
}
cout << Stroka << endl;
system("pause");
}

Обсуждение

давно
Посетитель
7438
7205
22.12.2017, 11:53
общий
это ответ
Здравствуйте, bukety.sedobnye!
Stroka в программе C++ - это адрес строки. поэтому надо грузить в регистр esi не адрес, а само значение
[code lang=asm]
mov edx, Stroka ; лишняя строка, можно убрать
mov esi, Stroka; а вот здесь должно быть так
[/code]
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
401611
4
22.12.2017, 12:41
общий
Игорь Витальевич, спасибо! Все работает! В упор не видела эту ошибку
Форма ответа