ХАНДЫФАР

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

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____string db _"TheQuickBrownFox$"
  6. ____strlen equ ($-string)
  7. ____newstr db _strlen+4 dup(24h)
  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, strlen
  16. ________lea ____di, es:[newstr]
  17. ________lea ____si, ds:[string]
  18. ________call____ChangeString
  19. ________mov ____ah, 09h
  20. ________lea ____dx, ds:[newstr]
  21. ________int ____21h
  22. ________mov ____ax, 4C00h
  23. ________int ____21h
  24. ____main endp
  25. ____ChangeString proc
  26. ________push ___ax
  27. ________push ___cx
  28. ________push ___si
  29. ________push ___di
  30. ________jmp ____Continue
  31. ____CheckStringLoop:
  32. ________cmp ____byte ptr[si], 41h
  33. ________jb _____Continue
  34. ________cmp ____byte ptr[si], 5Ah
  35. ________ja _____Continue
  36. ________cmp ____byte ptr[si-1], 61h
  37. ________jb _____Continue
  38. ________cmp ____byte ptr[si-1], 7Ah
  39. ________ja _____Continue
  40. ________mov ____byte ptr[di], 20h
  41. ________mov ____al, byte ptr[si]
  42. ________mov ____byte ptr[di+1], al
  43. ________inc ____si
  44. ________add ____di, 2
  45. ________loop ___CheckStringLoop
  46. ____Continue:
  47. ________movsb
  48. ________loop ___CheckStringLoop
  49. ________pop ____di
  50. ________pop ____si
  51. ________pop ____cx
  52. ________pop ____ax
  53. ________ret
  54. ____ChangeString endp
  55. code ends
  56. end main
Программа, которая вставляет пробел, когда символ в верхнем регистре следует за символом в нижнем.

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____string db _"TheQuickBrownFox$"
  6. ____strlen equ ($-string)
  7. ____newstr db _strlen+4 dup(24h)
  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, strlen___________; Копируем длину байтового массива string в регистр cx
  16. ________lea ____di, es:[newstr]______; Загружаем адрес переменной newstr в регистр es:di
  17. ________lea ____si, ds:[string]______; Загружаем адрес переменной string в регистр ds:si
  18. ________call____ChangeString_________; Вызываем процедуру ChangeString
  19. ________mov ____ah, 09h______________; Копируем значение функции вывода строки в регистр ah
  20. ________lea ____dx, ds:[newstr]______; Загружаем адрес переменной newstr в регистр ds:dx
  21. ________int ____21h__________________; Вызываем прерывание
  22. ________mov ____ax, 4C00h____________; Копируем значение функции завершения в ah а значение в al
  23. ________int ____21h__________________; Вызываем прерывание
  24. ____main endp _______________________; Конец процедуры main
  25. ____ChangeString proc________________; Начало процедуры ChangeString
  26. ________push ___ax___________________; Сохраняем значение регистра ax в стеке
  27. ________push ___cx___________________; Сохраняем значение регистра cx в стеке
  28. ________push ___si___________________; Сохраняем значение регистра si в стеке
  29. ________push ___di___________________; Сохраняем значение регистра di в стеке
  30. ________jmp ____Continue_____________; Выполняем безусловный переход на метку Continue
  31. ____CheckStringLoop:
  32. ________cmp ____byte ptr[si], 41h____; Сравниваем значение в регистре si с 'A'
  33. ________jb _____Continue_____________; Если значение в si ниже чем 'A', то прыгаем на Continue
  34. ________cmp ____byte ptr[si], 5Ah____; Сравниваем значение в регистре si с 'Z'
  35. ________ja _____Continue_____________; Если значение в si выше чем 'Z', то прыгаем на Continue
  36. ________cmp ____byte ptr[si-1], 61h__; Сравниваем значение в регистре si-1 с 'a'
  37. ________jb _____Continue_____________; Если значение в si-1 ниже чем 'a', то прыгаем на Continue
  38. ________cmp ____byte ptr[si-1], 7Ah__; Сравниваем значение в регистре si-1 с 'z'
  39. ________ja _____Continue_____________; Если значение в si-1 выше чем 'z', то прыгаем на Continue
  40. ________mov ____byte ptr[di], 20h____; Копируем значение пробела в регистр di
  41. ________mov ____al, byte ptr[si]_____; Копируем значение в регистре si в регистр al
  42. ________mov ____byte ptr[di+1], al___; Копируем значение регистра al в регистр di+1
  43. ________inc ____si___________________; Увеличиваем индекс si на 1
  44. ________add ____di, 2________________; Увеличиваем индекс di на 2
  45. ________loop ___CheckStringLoop______; Выполняем цикл пока регистр CX≠0
  46. ____Continue:
  47. ________movsb________________________; Копируем значение из ds:si в es:di. SI++, DI++
  48. ________loop ___CheckStringLoop______; Выполняем цикл пока регистр CX≠0
  49. ________pop ____di___________________; Выталкиваем значение из стека в регистр di
  50. ________pop ____si___________________; Выталкиваем значение из стека в регистр si
  51. ________pop ____cx___________________; Выталкиваем значение из стека в регистр cx
  52. ________pop ____ax___________________; Выталкиваем значение из стека в регистр ax
  53. ________ret__________________________; Возврат из процедуры
  54. ____ChangeString endp________________; Конец процедуры ChangeString
  55. code ends ___________________________; Конец сегмента кода
  56. end main ____________________________; Конец файла. Точкой входа указывается процедура main


















8E D8
8E C0

B9 0010
8D 3E 0010
8D 36 0000


B4 09
8D 16 0010
CD 21

B8 4C00
CD 21



50
51
56
57

EB 25 90


80 3C 41
72 1F

80 3C 5A
77 1A

80 7C FF 61__
72 14

80 7C FF 7A
77 0E

C6 05 20

8A 04
88 45 01

46
83 C7 02
E2 DC


A4
E2 D9

5F
5E
59
58
C3
Made on
Tilda