ХАНДЫФАР

Программа, которая удаляет определённый символ из заданной строки. Возвращает обновлённую строку. В данном примере мы будем удалять символ 'o'.

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____string db _"Microsoft Macro Assembler"
  6. ____strlen equ ($-string)
  7. ____newstr db _strlen dup(24h)
  8. data ends
  9. code segment public
  10. ____assume ds:data, cs:code
  11. ____main proc
  12. ________mov ____ax, seg data
  13. ________mov ____ds, ax
  14. ________mov ____es, ax
  15. ________mov ____cx, strlen
  16. ________lea ____di, es:[newstr]
  17. ________lea ____si, ds:[string]
  18. ____MainLoop:
  19. ________lodsb
  20. ________cmp ____al, 6Fh
  21. ________je _____Skip
  22. ________stosb
  23. ____Skip:
  24. ________loop ___MainLoop
  25. ________mov ____ah, 09h
  26. ________lea ____dx, ds:[newstr]
  27. ________int ____21h
  28. ________mov ____ax, 4C00h
  29. ________int ____21h
  30. ____main endp
  31. code ends
  32. end main
Программа, которая удаляет определённый символ из заданной строки. Возвращает обновлённую строку.
В данном примере мы будем удалять символ 'o'.

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____string db _"Microsoft Macro Assembler"
  6. ____strlen equ ($-string) ; Вычисляем длину массива string
  7. ____newstr db _strlen dup(24h)
  8. data ends
  9. code segment public _____________; Начало сегмента кода
  10. ____assume ds:data, cs:code
  11. ____main proc ___________________; Начало процедуры main
  12. ________mov ____ax, seg data_____; Получаем адрес сегмента памяти данных и сохраняем его в ax
  13. ________mov ____ds, ax___________; Передаём адрес сегмента памяти данных из регистра ax в ds
  14. ________mov ____es, ax___________; Передаём адрес сегмента памяти данных из регистра ax в es
  15. ________mov ____cx, strlen_______; Копируем значение переменной strlen в регистр cx
  16. ________lea ____di, es:[newstr]__; Загружаем адрес переменной newstr в регистр-приёмник es:di
  17. ________lea ____si, ds:[string]__; Загружаем адрес переменной string в регистр-источник ds:si
  18. ____MainLoop:
  19. ________lodsb____________________; Загружаем байт из регистра-источника si в регистр al
  20. ________cmp ____al, 6Fh__________; Выполняем сравнение значения в регистре al c символом 'o'
  21. ________je _____Skip_____________; Если ZF=1, то прыгаем на метку Skip
  22. ________stosb____________________; Сохраняем байт из регистра al в регистре-приёмнике di
  23. ____Skip:
  24. ________loop ___MainLoop_________; Выполняем цикл пока CX≠0
  25. ________mov ____ah, 09h__________; Копируем значение функции вывода строки в регистр ah
  26. ________lea ____dx, ds:[newstr]__; Загружаем адрес переменной newstr в регистр ds:dx
  27. ________int ____21h______________; Вызываем прерывание DOS
  28. ________mov ____ax, 4C00h________; Копируем значение функции завершения в ah а значение в al
  29. ________int ____21h______________; Вызываем прерывание DOS
  30. ____main endp ___________________; Конец процедуры main
  31. code ends _______________________; Конец сегмента кода
  32. end main ________________________; Конец файла. Точкой входа указывается процедура main
Made on
Tilda