ХАНДЫФАР

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

  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. ________xor_____si, si
  15. ________mov ____cx, strlen
  16. ________lea ____bx, ds:[string]
  17. ________jmp ____ToUpper
  18. ____MainLoop:
  19. ________cmp ____byte ptr[bx+si-1], 20h
  20. ________jne ____Skip
  21. ____ToUpper:
  22. ________cmp ____byte ptr[bx+si], 61h
  23. ________jb _____Skip
  24. ________cmp ____byte ptr[bx+si], 7Ah
  25. ________ja _____Skip
  26. ________and ____byte ptr[bx+si], 0DFh
  27. ____Skip:
  28. ________inc ____si
  29. ________loop ___MainLoop
  30. ________mov ____ah, 09h
  31. ________mov ____dx, bx
  32. ________int ____21h
  33. ________mov ____ax, 4C00h
  34. ________int ____21h
  35. ____main endp
  36. code ends
  37. end main
Программа, которая записывает с заглавной буквы первую букву каждого слова в заданной строке. Слова могут быть разделены множеством пробелов. Обратите внимание что, значение регистра bx в данной программе не разрушается внутри цикла.

  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. ________xor_____si, si__________________; Обнуляем регистр-счётчик si
  14. ________mov ____cx, strlen______________; Копируем значение переменной strlen в регистр cx
  15. ________lea ____bx, ds:[string]_________; Загружаем адрес переменной string в регистр ds:bx
  16. ________jmp ____ToUpper_________________; Выполняем безусловный переход на метку ToUpper
  17. ____MainLoop:
  18. ________cmp ____byte ptr[bx+si-1], 20h__; Сравниваем значение в bx под индексом si-1 с пробелом
  19. ________jne ____Skip____________________; Если ZF=0, то прыгаем нам метку Skip
  20. ____ToUpper:
  21. ________cmp ____byte ptr[bx+si], 61h____; Сравниваем значение в регистре bx под индексом si с 'a'
  22. ________jb _____Skip____________________; Если значение ниже, чем 61h ('a'), то прыгаем на метку Skip
  23. ________cmp ____byte ptr[bx+si], 7Ah____; Сравниваем значение в регистре bx под индексом si с 'z'
  24. ________ja _____Skip____________________; Если значение выше, чем 7Ah ('z'), то прыгаем на метку Skip
  25. ________and ____byte ptr[bx+si], 0DFh___; Переводим значение верхний регистр снимая 5-й бит в al
  26. ____Skip:
  27. ________inc ____si______________________; Увеличиваем значение регистра-индеска si на 1
  28. ________loop ___MainLoop________________; Выполняем цикл пока значение в регистре CX≠0
  29. ________mov ____ah, 09h_________________; Копируем значение функции вывода строки в регистр ah
  30. ________mov ____dx, bx__________________; Копируем значение регистра bx в регистр dx
  31. ________int ____21h_____________________; Вызываем прерывание
  32. ________mov ____ax, 4C00h_______________; Копируем значение функции завершения в ah а значение в al
  33. ________int ____21h_____________________; Вызываем прерывание
  34. ____main endp __________________________; Конец процедуры main
  35. code ends ______________________________; Конец сегмента кода
  36. end main _______________________________; Конец файла. Точкой входа указывается процедура main



















8E D8

33 F6
B9 0026
8D 1E 0000

EB 07 90


80 78 FF 20__
75 0D


80 38 61
72 08

80 38 7A
77 03

80 20 DF


46
E2 EA

B4 09
8B D3
CD 21

B8 4C00
CD 21
Made on
Tilda