ХАНДЫФАР

Программа для проверки того, присутствуют ли два символа в строке следующие друг за другом.

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____string ______db _"Microsoft Macro "
  6. _________________db _"Assembler$"
  7. ____strlen ______equ ($-string)
  8. ____charFound ___db _"The character is: $"
  9. ____charNotFound db _"There are no "
  10. _________________db _"consecutive "
  11. _________________db _"characters in the "
  12. _________________db _"string!$"
  13. data ends
  14. code segment public
  15. ____assume ds:data, cs:code
  16. ____main proc
  17. ________mov ____ax, seg data
  18. ________mov ____ds, ax
  19. ________mov ____cx, strlen
  20. ________lea ____si, ds:[string]
  21. ____MainLoop:
  22. ________lodsb
  23. ________cmp ____al, byte ptr[si]
  24. ________je _____Found
  25. ________loopnz__MainLoop
  26. ________mov ____ah, 09h
  27. ________lea ____dx, ds:[charNotFound]
  28. ________int ____21h
  29. ________jmp ____Done
  30. ____Found:
  31. ________mov ____ah, 09h
  32. ________lea ____dx, ds:[charFound]
  33. ________int ____21h
  34. ________mov ____ah, 02h
  35. ________mov ____dl, al
  36. ________int ____21h
  37. ____Done:
  38. ________mov ____ax, 4C00h
  39. ________int ____21h
  40. ____main endp
  41. code ends
  42. end main
Программа для проверки того, присутствуют ли два символа в строке следующие друг за другом.

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____string ______db _"Microsoft Macro Assembler$"
  6. ____strlen ______equ ($-string) ; Вычисляем длину массива string
  7. ____charFound ___db _"The character is: $"
  8. ____charNotFound db _"There are no consecutive characters in the string!$"
  9. data ends
  10. code segment public ___________________; Начало сегмента кода
  11. ____assume ds:data, cs:code
  12. ____main proc _________________________; Начало процедуры main
  13. ________mov ____ax, seg data___________; Получаем адрес сегмента памяти данных и сохраняем его в ax
  14. ________mov ____ds, ax_________________; Передаём адрес сегмента памяти данных из регистра ax в ds
  15. ________mov ____cx, strlen_____________; Копируем значение переменной strlen в регистр cx
  16. ________lea ____si, ds:[string]________; Загружаем адрес переменной string в регистр ds:si
  17. ____MainLoop:
  18. ________lodsb__________________________; Загружаем байт по адресу ds:si в регистр al. SI++
  19. ________cmp ____al, byte ptr[si]_______; Сравниваем значение в al со следующим символом в ds:si
  20. ________je _____Found__________________; Если ZF=1, то прыгаем на метку Found
  21. ________loopnz__MainLoop_______________; Выполняем цикл пока CX≠0 или ZF≠1
  22. ________mov ____ah, 09h________________; Копируем значение функции вывода строки в регистр ah
  23. ________lea ____dx, ds:[charNotFound]__; Загружаем адрес переменной charNotFound в регистр ds:dx
  24. ________int ____21h____________________; Вызываем прерывание
  25. ________jmp ____Done___________________; Выполняем безусловный переход на метку Done
  26. ____Found:
  27. ________mov ____ah, 09h________________; Копируем значение функции вывода строки в регистр ah
  28. ________lea ____dx, ds:[charFound]_____; Загружаем адрес переменной charFound в регистр ds:dx
  29. ________int ____21h____________________; Вызываем прерывание
  30. ________mov ____ah, 02h________________; Копируем значение функции вывода на консоль в регистр ah
  31. ________mov ____dl, al_________________; Копируем значение найденного символа в регистр dl
  32. ________int ____21h____________________; Вызываем прерывание
  33. ____Done:
  34. ________mov ____ax, 4C00h______________; Копируем значение функции завершения в ah а значение в al
  35. ________int ____21h____________________; Вызываем прерывание
  36. ____main endp _________________________; Конец процедуры main
  37. code ends _____________________________; Конец сегмента кода
  38. end main ______________________________; Конец файла. Точкой входа указывается процедура main



















8E D8

B9 001A
8D 36 0000__


AC
3A 04
74 0D
E0 F9

B4 09
8D 16 002D
CD 21
EB 0F 90


B4 09
8D 16 001A
CD 21

B4 02
8A D0
CD 21


B8 4C00
CD 21
Made on
Tilda