ХАНДЫФАР

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

  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. ____char ________db _?
  14. data ends
  15. code segment public
  16. ____assume ds:data, cs:code
  17. ____main proc
  18. ________mov ____ax, seg data
  19. ________mov ____ds, ax
  20. ________xor_____si, si
  21. ________mov ____cx, strlen
  22. ________lea ____bx, ds:[string]
  23. ____MainLoop:
  24. ________mov ____al, byte ptr[bx+si]
  25. ________cmp ____al, byte ptr[bx+si+1]
  26. ________jne ____Continue
  27. ________mov ____char, al
  28. ________jmp ____Found
  29. ____Continue:
  30. ________inc ____si
  31. ________loop ___MainLoop
  32. ________mov ____ah, 09h
  33. ________lea ____dx, ds:[charNotFound]
  34. ________int ____21h
  35. ________jmp ____Done
  36. ____Found:
  37. ________mov ____ah, 09h
  38. ________lea ____dx, ds:[charFound]
  39. ________int ____21h
  40. ________mov ____ah, 02h
  41. ________mov ____dl, char
  42. ________int ____21h
  43. ____Done:
  44. ________mov ____ax, 4C00h
  45. ________int ____21h
  46. ____main endp
  47. code ends
  48. 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. ____char ________db _?
  10. data ends
  11. code segment public ___________________; Начало сегмента кода
  12. ____assume ds:data, cs:code
  13. ____main proc _________________________; Начало процедуры main
  14. ________mov ____ax, seg data___________; Получаем адрес сегмента памяти данных и сохраняем его в ax
  15. ________mov ____ds, ax_________________; Передаём адрес сегмента памяти данных из регистра ax в ds
  16. ________xor_____si, si_________________; Обнуляем регистр-счётчик si
  17. ________mov ____cx, strlen_____________; Копируем значение переменной strlen в регистр cx
  18. ________lea ____bx, ds:[string]________; Загружаем адрес переменной string в регистр ds:bx
  19. ____MainLoop:
  20. ________mov ____al, byte ptr[bx+si]____; Копируем значение в регистре bx под индексом si в регистр al
  21. ________cmp ____al, byte ptr[bx+si+1]__; Сравниваем значение в al со значением в bx под индексом si+1
  22. ________jne ____Continue_______________; Если ZF=0, то прыгаем на метку Continue
  23. ________mov ____char, al_______________; Копируем значение регистра al в переменную char
  24. ________jmp ____Found__________________; Выполняем безусловный переход на метку Found
  25. ____Continue:
  26. ________inc ____si_____________________; Увеличиваем значение индекса si на 1
  27. ________loop ___MainLoop_______________; Выполняем цикл пока CX≠0
  28. ________mov ____ah, 09h________________; Копируем значение функции вывода строки в регистр ah
  29. ________lea ____dx, ds:[charNotFound]__; Загружаем адрес переменной charNotFound в регистр ds:dx
  30. ________int ____21h____________________; Вызываем прерывание DOS
  31. ________jmp ____Done___________________; Выполняем безусловный переход на метку Done
  32. ____Found:
  33. ________mov ____ah, 09h________________; Копируем значение функции вывода строки в регистр ah
  34. ________lea ____dx, ds:[charFound]_____; Загружаем адрес переменной charFound в регистр ds:dx
  35. ________int ____21h____________________; Вызываем прерывание DOS
  36. ________mov ____ah, 02h________________; Копируем значение функции вывода на консоль в регистр ah
  37. ________mov ____dl, char_______________; Копируем значение переменной char в регистр dl
  38. ________int ____21h____________________; Вызываем прерывание DOS
  39. ____Done:
  40. ________mov ____ax, 4C00h______________; Копируем значение функции завершения в ah а значение в al
  41. ________int ____21h____________________; Вызываем прерывание DOS
  42. ____main endp _________________________; Конец процедуры main
  43. code ends _____________________________; Конец сегмента кода
  44. end main ______________________________; Конец файла. Точкой входа указывается процедура main
Made on
Tilda