ХАНДЫФАР

Программа, которая считет количество всех гласных букв в строке.

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____string db "Intel 8086. Microsoft "
  6. ___________db "Macro Assembler"
  7. ____vowels db "aeiouAEIOU"
  8. ____output db "Number of vowels: $"
  9. ____result dw 0
  10. data ends
  11. code segment public
  12. ____assume ds:data, cs:code
  13. ____main proc
  14. ________mov ____ax, seg data
  15. ________mov ____ds, ax
  16. ________mov ____es, ax
  17. ________mov ____cx, 37
  18. ________lea ____di, es:[vowels]
  19. ________lea ____si, ds:[string]
  20. ____OuterLoop:
  21. ________push ___cx
  22. ________mov ____cx, 10
  23. ________lodsb
  24. ________push ___di
  25. __repnz scasb
  26. ________jne ____Skip
  27. ________inc ____result
  28. ____Skip:
  29. ________pop ____cx
  30. ________pop ____cx
  31. ________loop ___OuterLoop
  32. ________mov ____ah, 09h
  33. ________lea ____dx, ds:[output]
  34. ________int ____21h
  35. ________mov ____dx, result
  36. ________call ___PrintNumber
  37. ________mov ____ax, 4C00h
  38. ________int ____21h
  39. ____main endp
  40. ____PrintNumber proc
  41. ________mov ____ax, dx
  42. ________mov ____bx, 10
  43. ________cwd
  44. ________div ____bx
  45. ________mov ____cl, 8
  46. ________shl ____ax, cl
  47. ________xchg ___al, dl
  48. ________or _____ax, 3030h
  49. ________xchg ___ax, bx
  50. ________mov ____ah, 02h
  51. ________cmp ____bh, 30h
  52. ________je _____PrintOneDigit
  53. ________mov ____dl, bh
  54. ________int ____21h
  55. ____PrintOneDigit:
  56. ________mov ____dl, bl
  57. ________int ____21h
  58. ________ret
  59. ____PrintNumber endp
  60. code ends
  61. end main
Программа, которая считет количество всех гласных букв в строке.

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____string db "Intel 8086. Microsoft Macro Assembler"
  6. ____vowels db "aeiouAEIOU"
  7. ____output db "Number of vowels: $"
  8. ____result dw 0
  9. data ends
  10. code segment public _____________; Начало сегмента кода
  11. ____assume ds:data, cs:code
  12. ____main proc ___________________; Начало процедуры main
  13. ________mov ____ax, seg data_____; Получаем адрес сегмента памяти данных и сохраняем его в ax
  14. ________mov ____ds, ax___________; Передаём адрес сегмента памяти данных из регистра ax в ds
  15. ________mov ____es, ax___________; Передаём адрес сегмента памяти данных из регистра ax в es
  16. ________mov ____cx, 37___________; Копируем значение 37 в регистр cx (длина строки string)
  17. ________lea ____di, es:[vowels]__; Загружаем адрес массива vowels в регистр es:di
  18. ________lea ____si, ds:[string]__; Загружаем адрес массива string в регистр ds:si
  19. ____OuterLoop:
  20. ________push ___cx_______________; Сохраняем значение регистра cx в стеке
  21. ________mov ____cx, 10___________; Копируем значение 10 в регистр cx (количество гласных)
  22. ________lodsb____________________; Загружаем байт из регистра-источника si в регистр al
  23. ________push ___di_______________; Сохраняем значение регистра di в стеке
  24. __repnz scasb____________________; Сканируем байт в регистре al с байтами в регистре di пока CX≠0
  25. ________jne ____Skip_____________; Если ZF=0, то прыгаем на метку Skip
  26. ________inc ____result___________; Увеличиваем значение переменной result
  27. ____Skip:
  28. ________pop ____cx_______________; Выталкиваем значение из стека в регистр di
  29. ________pop ____cx_______________; Выталкиваем значение из стека в регистр cx
  30. ________loop ___OuterLoop________; Выполняем цикл пока CX≠0
  31. ________mov ____ah, 09h__________; Копируем значение функции вывода строки в регистр ah
  32. ________lea ____dx, ds:[output]__; Загружаем адрес переменной output в регистр ds:dx
  33. ________int ____21h______________; Вызываем прерывание
  34. ________mov ____dx, result_______; Копируем значение переменной result в регистр dx
  35. ________call ___PrintNumber______; Вызываем процедуру PrintNumber
  36. ________mov ____ax, 4C00h________; Копируем значение функции завершения в ah а значение в al
  37. ________int ____21h______________; Вызываем прерывание DOS
  38. ____main endp ___________________; Конец процедуры main
  39. ____PrintNumber proc
  40. ________mov ____ax, dx___________; Копируем значение регистра dx в регистр ax
  41. ________mov ____bx, 10___________; Копируем число 10 в регистр bx
  42. ________cwd______________________; Выполняем знаковое расширение регистра dx
  43. ________div ____bx_______________; Выполняем деление значения в регистре ax на bx (10)
  44. ________mov ____cl, 8____________; Копируем число 8 в регистр cl
  45. ________shl ____ax, cl___________; Выполняем логический сдвиг влево на количество в регистре cl
  46. ________xchg ___al, dl___________; Выполняем обмен содержимого регистров al и dl
  47. ________or _____ax, 3030h________; Выполняем логическое ИЛИ над ax с 3030
  48. ________xchg ___ax, bx___________; Выполняем обмен содержимого регистров ax и bx
  49. ________mov ____ah, 02h__________; Копируем значение функции вывода на консоль в регистр ah
  50. ________cmp ____bh, 30h__________; Сравниваем значение в регистре bh c 30h
  51. ________je _____PrintOneDigit____; Если ZF=1, то прыгаем на метку PrintOneDigit
  52. ________mov ____dl, bh___________; Копируем значение регистра bh в регистр dl
  53. ________int ____21h______________; Вызываем прерывание
  54. ____PrintOneDigit:
  55. ________mov ____dl, bl___________; Копируем значение регистра bl в регистр dl
  56. ________int ____21h______________; Вызываем прерывание
  57. ________ret______________________; Возврат из процедуры
  58. ____PrintNumber endp
  59. code ends _______________________; Конец сегмента кода
  60. end main ________________________; Конец файла. Точкой входа указывается процедура main



















8E D8
8E C0

8D 3E 0025__
8D 36 0000
B9 0025


51
B9 000A

AC

57

F2 AE
75 04

FF 06 0042


5F
59
E2 EE

B4 09
8D 16 002F
CD 21

8B 16 0042


B8 4C00
CD 21



8B C2
BB 000A
99
F7 F3

B1 08
D3 E0
86 C2
0D 3030
93

B4 02
80 FF 30
74 04

8A D7
CD 21


8A D3
CD 21
C3
Made on
Tilda