ХАНДЫФАР

Программа, которая записывает с заглавной буквы первую букву каждого слова в заданной строке. Слова могут быть разделены множеством пробелов.

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____string db _"intel 8086. microsoft "
  6. ___________db _"macro assembler$"
  7. ____strlen equ ($-string)
  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. ________lea ____bx, ds:[string]
  15. ________mov ____cx, strlen
  16. ________jmp ____ToUpper
  17. ____MainLoop:
  18. ________cmp ____byte ptr[bx+si-1], 20h
  19. ________jne ____Skip
  20. ____ToUpper:
  21. ________cmp ____byte ptr[bx+si], 61h
  22. ________jb _____Skip
  23. ________cmp ____byte ptr[bx+si], 7Ah
  24. ________ja _____Skip
  25. ________and ____byte ptr[bx+si], 0DFh
  26. ____Skip:
  27. ________inc ____si
  28. ________loop ___MainLoop
  29. ________mov ____ah, 09h
  30. ________lea ____dx, ds:[string]
  31. ________int ____21h
  32. ________mov ____ax, 4C00h
  33. ________int ____21h
  34. ____main endp
  35. code ends
  36. end main
Программа, которая записывает с заглавной буквы первую букву каждого слова в заданной строке. Слова могут быть разделены множеством пробелов.

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____string db _"intel 8086. microsoft macro assembler$"
  6. ____strlen equ ($-string)
  7. data ends
  8. code segment public ____________________; Начало сегмента кода
  9. ____assume _ds:data, cs:code
  10. ____main proc __________________________; Начало процедуры main
  11. ________mov ____ax, seg data____________; Получаем адрес сегмента памяти данных и сохраняем его в ax
  12. ________mov ____ds, ax__________________; Передаём адрес сегмента памяти данных из регистра ax в ds
  13. ________lea ____bx, ds:[string]_________; Загружаем адрес переменной string в регистр ds:bx
  14. ________mov ____cx, strlen______________; Копируем значение переменной strlen в регистр cx
  15. ________jmp ____ToUpper_________________; Выполняем безусловный переход на метку ToUpper
  16. ____MainLoop:
  17. ________cmp ____byte ptr[bx+si-1], 20h__; Сравниваем значение в bx под индексом si-1 с пробелом
  18. ________jne ____Skip____________________; Если ZF=0, то прыгаем нам метку Skip
  19. ____ToUpper:
  20. ________cmp ____byte ptr[bx+si], 61h____; Сравниваем значение в регистре bx под индексом si с 'a'
  21. ________jb _____Skip____________________; Если значение ниже, чем 61h ('a'), то прыгаем на метку Skip
  22. ________cmp ____byte ptr[bx+si], 7Ah____; Сравниваем значение в регистре bx под индексом si с 'z'
  23. ________ja _____Skip____________________; Если значение выше, чем 7Ah ('z'), то прыгаем на метку Skip
  24. ________and ____byte ptr[bx+si], 0DFh___; Переводим значение верхний регистр снимая 5-й бит в al
  25. ____Skip:
  26. ________inc ____si______________________; Увеличиваем значение регистра-индеска si на 1
  27. ________loop ___MainLoop________________; Выполняем цикл пока значение в регистре CX≠0
  28. ________mov ____ah, 09h_________________; Копируем значение функции вывода строки в регистр ah
  29. ________lea ____dx, ds:[string]_________; Загружаем адрес переменной string в регистр ds:dx
  30. ________int ____21h_____________________; Вызываем прерывание DOS
  31. ________mov ____ax, 4C00h_______________; Копируем значение функции завершения в ah а значение в al
  32. ________int ____21h_____________________; Вызываем прерывание DOS
  33. ____main endp __________________________; Конец процедуры main
  34. code ends ______________________________; Конец сегмента кода
  35. end main _______________________________; Конец файла. Точкой входа указывается процедура main
Made on
Tilda