ХАНДЫФАР

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

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____string ___db "aabcdeef$"
  6. ____msg_true _db "True$"
  7. ____msg_false db "False$"
  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 ____bl, 'e'
  15. ________mov ____bh, 'a'
  16. ________lea ____si, ds:[string]
  17. ________call ___CheckString
  18. ________jne ____NotEqual
  19. ________lea ____dx, ds:[msg_true]
  20. ________jmp ____Done
  21. ____NotEqual:
  22. ________lea ____dx, ds:[msg_false]
  23. ____Done:
  24. ________mov ____ah, 09h
  25. ________int ____21h
  26. ________mov ____ax, 4C00h
  27. ________int ____21h
  28. ____main endp
  29. ____CheckString proc
  30. ________push ___ax
  31. ________push ___dx
  32. ________push ___si
  33. ________xor ____dx, dx
  34. ____MainLoop:
  35. ________lodsb
  36. ________cmp ____al, 24h
  37. ________je _____Finish
  38. ____TestBH:
  39. ________cmp ____al, bh
  40. ________jne ____TestBL
  41. ________inc ____dh
  42. ____TestBL:
  43. ________cmp ____al, bl
  44. ________jne ____MainLoop
  45. ________inc ____dl
  46. ________jmp ____MainLoop
  47. ____Finish:
  48. ________cmp ____dh, dl
  49. ________pop ____si
  50. ________pop ____dx
  51. ________pop ____ax
  52. ________ret
  53. ____CheckString endp
  54. code ends
  55. end main
Программа, которая проверяет, одинаково ли присутствуют два символа в строке.

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____string ___db "aabcdeef$"
  6. ____msg_true _db "True$"
  7. ____msg_false db "False$"
  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 ____bl, 'e'_____________; Копируем значение символа 'e' в регистр bl
  15. ________mov ____bh, 'a'_____________; Копируем значение символа 'a' в регистр bh
  16. ________lea ____si, ds:[string]_____; Загружаем адрес переменной string в регистр ds:si
  17. ________call ___CheckString_________; Вызываем процедуру CheckString
  18. ________jne ____NotEqual____________; Если ZF=0, то прыгаем на метку NotEqual
  19. ________lea ____dx, ds:[msg_true]___; Загружаем адрес переменной msg_true в регистр ds:dx
  20. ________jmp ____Done________________; Выполняем безусловный переход на метку Done
  21. ____NotEqual:
  22. ________lea ____dx, ds:[msg_false]__; Загружаем адрес переменной msg_false в регистр ds:dx
  23. ____Done:
  24. ________mov ____ah, 09h_____________; Копируем значение функции вывода строки в регистр ah
  25. ________int ____21h_________________; Вызываем прерывание DOS
  26. ________mov ____ax, 4C00h___________; Копируем значение функции завершения в ah а значение в al
  27. ________int ____21h_________________; Вызываем прерывание DOS
  28. ____main endp ______________________; Конец процедуры main
  29. ____CheckString proc________________; Начало процедуры CheckString
  30. ________push ___ax__________________; Сохраняем значение регистра ax в стеке
  31. ________push ___dx__________________; Сохраняем значение регистра dx в стеке
  32. ________push ___si__________________; Сохраняем значение регистра si в стеке
  33. ________xor ____dx, dx______________; Обнуляем значение регистра dx
  34. ____MainLoop:
  35. ________lodsb_______________________; Загружаем байт из регистра si в регистр al
  36. ________cmp ____al, 24h_____________; Сравниваем значение в регистре al с 24h - '$'
  37. ________je _____Finish______________; Если ZF=1, то прыгаем на метку Finish
  38. ____TestBH:
  39. ________cmp ____al, bh______________; Сравниваем значение в регистре al с со значением в регистре bh
  40. ________jne ____TestBL______________; Если ZF=0, то прыгаем на метку TestBL
  41. ________inc ____dh__________________; Увеличиваем dh на 1
  42. ____TestBL:
  43. ________cmp ____al, bl______________; Сравниваем значение в регистре al с со значением в регистре bl
  44. ________jne ____MainLoop____________; Если ZF=0, то прыгаем на метку MainLoop
  45. ________inc ____dl__________________; Увеличиваем dl на 1
  46. ________jmp ____MainLoop____________; Выполняем безусловный переход на метку MainLoop
  47. ____Finish:
  48. ________cmp ____dh, dl______________; Сравниваем значение в регистре dh с со значением в регистре dl
  49. ________pop ____si__________________; Выталкиваем значение из стека в регистр si
  50. ________pop ____dx__________________; Выталкиваем значение из стека в регистр dx
  51. ________pop ____ax__________________; Выталкиваем значение из стека в регистр ax
  52. ________ret_________________________; Возврат из процедуры
  53. ____CheckString endp________________; Конец процедуры CheckString
  54. code ends __________________________; Конец сегмента кода
  55. end main ___________________________; Конец файла. Точкой входа указывается процедура main


















8E D8

B3 65
B7 61
8D 36 0000__


75 07

8D 16 0009
EB 05


8D 16 000E


B4 09
CD 21

B8 4C00
CD 21



50
52
56

33 D2


AC

3C 24
74 0E


3A C7
75 02

FE C6


3A C3
75 F1

FE C2

EB ED


3A F2

5E
5A
58
C3
Made on
Tilda