Заменить все десятичные цифры в исходной строке на заданный символ - 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

Объяснение кода листинга программы

Список элементов кода:

  1. Объявление переменных pstring и pchar типа DWORD.
  2. Ввод строки, содержащей цифры, и сохранение её в переменной pstring с помощью функции input.
  3. Ввод символа, на который необходимо заменить цифры, и сохранение его в переменной pchar с помощью функции input.
  4. Установка регистра ESI в значение pstring и регистра EDI в значение pchar.
  5. Организация цикла, который будет выполняться до тех пор, пока не будет достигнута конечная точка строки (символ null).
  6. Проверка текущего символа строки на число с помощью функции rv(isnumber, bl).
  7. Если текущий символ является числом, то замена его на символ из переменной pchar.
  8. Увеличение регистра ESI на 1, чтобы перейти к следующему символу строки.
  9. Вывод сообщения Результат замены : с помощью функции print.
  10. Ввод строки, содержащей результат замены, в регистр ESI.
  11. Вывод строки из регистра ESI с помощью функции invoke StdOut, esi.
  12. Вывод символа новой строки с помощью функции print chr$(13, 10, 13, 10).
  13. Возврат из функции main.

Оцени полезность:

13   голосов , оценка 3.923 из 5
Похожие ответы