ХАНДЫФАР

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

  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___________________; Вызываем прерывание DOS
  37. ________mov ____ax, 4C00h_____________; Копируем значение функции завершения в ah а значение в al
  38. ________int ____21h___________________; Вызываем прерывание DOS
  39. ____main endp ________________________; Конец процедуры main
  40. code ends ____________________________; Конец сегмента кода
  41. end main _____________________________; Конец файла. Точкой входа указывается процедура main
Made on
Tilda