ХАНДЫФАР

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

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____string1 db _"Microsoft $", 20 dup(?)
  6. ____string2 db _"Macro Assembler$"
  7. ____strlen2 equ ($-string2)
  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 ____es, ax
  15. ________mov ____cx, 0FFFFh
  16. ________mov ____al, 24h
  17. ________lea ____di, es:[string1]
  18. ________lea ____si, ds:[string2]
  19. __repnz scasb
  20. ________dec ____di
  21. ________mov ____cx, strlen2
  22. __repnz movsb
  23. ________mov ____ah, 09h
  24. ________lea ____dx, ds:[string1]
  25. ________int ____21h
  26. ________mov ____ax, 4C00h
  27. ________int ____21h
  28. ____main endp
  29. code ends
  30. end main
Программа которая объединяет две строки в одну.

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____string1 db _"Microsoft $", 20 dup(?)
  6. ____string2 db _"Macro Assembler$"
  7. ____strlen2 equ ($-string2)
  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 ____es, ax____________; Передаём адрес сегмента памяти данных из регистра ax в es
  15. ________mov ____cx, 0FFFFh________; Устанавливаем счётчик равным -1
  16. ________mov ____al, 24h___________; Копируем значение завершения строки ($) в регистр al
  17. ________lea ____di, es:[string1]__; Загружаем адрес переменной string1 в регистр-приёмник es:di
  18. ________lea ____si, ds:[string2]__; Загружаем адрес переменной string2 в регистр-источник ds:si
  19. __repnz scasb_____________________; Сканируем байт в регистре al с байтом в регистре es:di
  20. ________dec ____di________________; Уменьшаем значение регистра di на 1. Становимся там, где был ($)
  21. ________mov ____cx, strlen2_______; Устанавливаем счётчик равным длине строки string2
  22. __repnz movsb_____________________; Выполняем копирование из ds:si в es:di пока CX≠0
  23. ________mov ____ah, 09h___________; Копируем значение функции вывода строки в регистр ah
  24. ________lea ____dx, ds:[string1]__; Загружаем адрес переменной string1 в регистр ds:dx
  25. ________int ____21h_______________; Вызываем прерывание DOS
  26. ________mov ____ax, 4C00h_________; Копируем значение функции завершения в ah а значение в al
  27. ________int ____21h_______________; Вызываем прерывание DOS
  28. ____main endp ____________________; Конец процедуры main
  29. code ends ________________________; Конец сегмента кода
  30. end main _________________________; Конец файла. Точкой входа указывается процедура main


















8E D8
8E C0

B9 FFFF
B0 24
8D 3E 0000__
8D 36 001F

F2 AE

4F
B9 0010

F2 A4

B4 09
8D 16 0000
CD 21

B8 4C00
CD 21
Made on
Tilda