ХАНДЫФАР

Программа которая сравнивает две строки.

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____aString ____db _"Hello students!$"
  6. ____aStrLen ____equ ($-aString)
  7. ____bString ____db _"Hello children!$"
  8. ____bStrLen ____equ ($-bString)
  9. ____equalMsg ___db _"Strings are equal!$"
  10. ____notEqualMsg db _"Strings are not "
  11. ________________db _"equal!$"
  12. ____lenNotEqual db "The lengths of the "
  13. ________________db "strings are not "
  14. ________________db "equal!$"
  15. data ends
  16. code segment public
  17. ____assume ds:data, cs:code
  18. ____main proc
  19. ________mov ____ax, seg data
  20. ________mov ____ds, ax
  21. ________mov ____es, ax
  22. ________mov ____dx, bStrLen
  23. ________mov ____cx, aStrLen
  24. ________lea ____di, es:[bString]
  25. ________lea ____si, ds:[aString]
  26. ________cmp_____dx,_cx
  27. ________jne ____LengthNotEqual
  28. ___repz cmpsb
  29. ________jne ____NotEqual
  30. ________lea ____dx, ds:[equalMsg]
  31. ________jmp ____Done
  32. ____NotEqual:
  33. ________lea ____dx, ds:[notEqualMsg]
  34. ________jmp ____Done
  35. ____LengthNotEqual:
  36. ________lea ____dx, ds:[lenNotEqual]
  37. ____Done:
  38. ________mov ____ah, 09h
  39. ________int ____21h
  40. ________mov ____ax, 4C00h
  41. ________int ____21h
  42. ____main endp
  43. code ends
  44. end main
Программа которая сравнивает две строки.

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____aString ____db _"Hello students!$" __________________________; Здравствуйте, студенты!
  6. ____aStrLen ____equ ($-aString) _________________________________; Вычисляем длину строки aString
  7. ____bString ____db _"Hello children!$" __________________________; Здравствуйте, дети!
  8. ____bStrLen ____equ ($-bString) _________________________________; Вычисляем длину строки bString
  9. ____equalMsg ___db _"Strings are equal!$" _______________________; Строки равны!
  10. ____notEqualMsg db _"Strings are not equal!$" ___________________; Строки не равны!
  11. ____lenNotEqual db__"The lengths of the strings are not equal!$"_; Строки не равной длины!
  12. data ends
  13. code segment public __________________; Начало сегмента кода
  14. ____assume ds:data, cs:code
  15. ____main proc ________________________; Начало процедуры main
  16. ________mov ____ax, seg data__________; Получаем адрес сегмента памяти данных и сохраняем его в ax
  17. ________mov ____ds, ax________________; Передаём адрес сегмента памяти данных из регистра ax в ds
  18. ________mov ____es, ax________________; Передаём адрес сегмента памяти данных из регистра ax в es
  19. ________mov ____dx, bStrLen___________; Копируем значение переменной bStrLen в регистр dx
  20. ________mov ____cx, aStrLen___________; Копируем значение переменной aStrLen в регистр cx
  21. ________lea ____di, es:[bString]______; Загружаем адрес переменной bString в регистр-источник es:di
  22. ________lea ____si, ds:[aString]______; Загружаем адрес переменной aString в регистр-приёмник ds:si
  23. ________cmp_____dx,_cx________________; Сравниваем длины обеих строк
  24. ________jne ____LengthNotEqual________; Если ZF=0, то прыгаем на метку LengthNotEqual
  25. ___repz cmpsb_________________________; Выполняем сравнение байта в регистре si с байтом в регистре di
  26. ________jne ____NotEqual______________; Если ZF=0, то прыгаем на метку NotEqual
  27. ________lea ____dx, ds:[equalMsg]_____; Загружаем адрес переменной equalMsg в регистр ds:dx
  28. ________jmp ____Done__________________; Выполняем безусловный переход на метку Done
  29. ____NotEqual:
  30. ________lea ____dx, ds:[notEqualMsg]__; Загружаем адрес переменной notEqualMsg в регистр ds:dx
  31. ________jmp ____Done__________________; Выполняем безусловный переход на метку Done
  32. ____LengthNotEqual:
  33. ________lea ____dx, ds:[lenNotEqual]__; Загружаем адрес переменной lenNotEqual в регистр ds:dx
  34. ____Done:
  35. ________mov ____ah, 09h_______________; Копируем значение функции вывода строки в регистр ah
  36. ________int ____21h___________________; Вызываем прерывание
  37. ________mov ____ax, 4C00h_____________; Копируем значение функции завершения в ah а значение в al
  38. ________int ____21h___________________; Вызываем прерывание
  39. ____main endp ________________________; Конец процедуры main
  40. code ends ____________________________; Конец сегмента кода
  41. end main _____________________________; Конец файла. Точкой входа указывается процедура main






















8E D8
8E C0

BA 0010
B9 0010
8D 3E 0010__
8D 36 0000

3B D1
75 12

F3 A6
75 07

8D 16 0020
EB 0C 90


8D 16 0033
EB 05 90


8D 16 004A


B4 09
CD 21

B8 4C00
CD 21
Made on
Tilda