Заменить все десятичные цифры в исходной строке на заданный символ - Assembler
Формулировка задачи:
Помогите пожалуйста!! Нужна программка на MASM32, заменяющая все десятичные цифры в исходной строке на заданный символ. Цифры и символ нужно вводить с клавиатуры.. Заранее большое спасибо!!
Решение задачи: «Заменить все десятичные цифры в исходной строке на заданный символ»
textual
Листинг программы
.586 .model flat, stdcall option casemap :none ; case sensitive include windows.inc include kernel32.inc include user32.inc include masm32.inc include msvcrt.inc include macros\macros.asm ; masm32 macro file includelib kernel32.lib includelib user32.lib includelib msvcrt.lib includelib masm32.lib .code ;----------------------------------------------------------- start: call main inkey exit main proc LOCAL pstring : DWORD LOCAL pchar : DWORD cls mov pstring, input("Введите строку содержащую цифры : ") mov pchar, input("Введите заменяющий цифры символ : ") mov esi, pstring mov edi, pchar .while TRUE mov bl, [esi] .break .if !bl .if rv(isnumber, bl) mov al, [edi] mov [esi], al .endif inc esi .endw print "Результат замены : " mov esi, pstring invoke StdOut, esi print chr$(13, 10, 13, 10) ret main endp end start
Объяснение кода листинга программы
Список элементов кода:
- Объявление переменных pstring и pchar типа DWORD.
- Ввод строки, содержащей цифры, и сохранение её в переменной pstring с помощью функции input.
- Ввод символа, на который необходимо заменить цифры, и сохранение его в переменной pchar с помощью функции input.
- Установка регистра ESI в значение pstring и регистра EDI в значение pchar.
- Организация цикла, который будет выполняться до тех пор, пока не будет достигнута конечная точка строки (символ null).
- Проверка текущего символа строки на число с помощью функции rv(isnumber, bl).
- Если текущий символ является числом, то замена его на символ из переменной pchar.
- Увеличение регистра ESI на 1, чтобы перейти к следующему символу строки.
- Вывод сообщения
Результат замены :
с помощью функции print. - Ввод строки, содержащей результат замены, в регистр ESI.
- Вывод строки из регистра ESI с помощью функции invoke StdOut, esi.
- Вывод символа новой строки с помощью функции print chr$(13, 10, 13, 10).
- Возврат из функции main.