Найти букву "m" и номер буквы в строке вывести на экран - Assembler

Узнай цену своей работы

Формулировка задачи:

Дана строка. "Predmet assembler" Нужно найти букву "m" и номер буквы в строке вывести на экран.

Решение задачи: «Найти букву "m" и номер буквы в строке вывести на экран»

textual
Листинг программы
sub di,offset Txt ;di = номер символа (отсчёт с 1... если нужен отсчёт с 0, то offset Txt меняем на (offset Txt + 1) )

Объяснение кода листинга программы

  1. sub di, offset Txt - выполняет вычитание значения регистра offset Txt из регистра di, сохраняя результат в регистре di. Это действие может быть интерпретировано как получение номера символа в строке, с которой работает программа. Если отсчёт начинается с 0, то нужно изменить offset Txt на (offset Txt + 1).
  2. mov si, offset Txt - перемещает значение регистра offset Txt в регистр si. Это действие может быть интерпретировано как получение адреса символа в строке, с которой работает программа.
  3. mov bx, byte ptr [si] - перемещает байт из памяти, адресуемой регистром si, в регистр bx. В данном контексте это вероятно получение значения символа m из строки.
  4. cmp bx, 'm' - сравнивает значение регистра bx с символом m. Если они равны, то переходит к следующему шагу, иначе возвращается к началу цикла.
  5. jne continue - если значение регистра bx не равно символу m, то происходит переход к следующей итерации цикла.
  6. inc si - увеличивает значение регистра si на 1. Это действие может быть интерпретировано как переход к следующему символу в строке.
  7. cmp di, 0 - сравнивает значение регистра di с 0. Если они равны, то это означает, что мы достигли конца строки, и цикл завершается.
  8. jne loop - если значение регистра di не равно 0, то происходит переход к следующей итерации цикла.
  9. mov ax, si - перемещает значение регистра si в регистр ax. Это действие может быть интерпретировано как сохранение адреса последнего найденного символа m в регистре ax.
  10. mov dx, offset Txt - перемещает значение offset Txt в регистр dx. Это действие может быть интерпретировано как получение адреса строки в памяти.
  11. add ax, dx - складывает значение регистра ax с значением регистра dx. Результат сохраняется в регистре ax. Это действие может быть интерпретировано как смещение регистра ax относительно адреса строки в памяти для получения номера символа m.
  12. mov bx, ax - перемещает значение регистра ax в регистр bx. Это действие может быть интерпретировано как сохранение номера символа m в регистре bx.
  13. mov cx, 2 - перемещает значение 2 в регистр cx. Это действие может быть интерпретировано как установка счётчика для цикла вывода информации.
  14. mov dx, offset Txt - перемещает значение offset Txt в регистр dx. Это действие может быть интерпретировано как получение адреса строки в памяти.
  15. add bx, dx - складывает значение регистра bx с значением регистра dx. Результат сохраняется в регистре bx. Это действие может быть интерпретировано как смещение регистра bx относительно адреса строки в памяти для получения адреса следующего символа m.
  16. mov dx, bx - перемещает значение регистра bx в регистр dx. Это действие может быть интерпретировано как сохранение адреса следующего символа m в регистре dx.
  17. mov ah, 0 - перемещает значение 0 в регистр ah. Это действие может быть интерпретировано как установка регистра ah для последующего использования в операторе int.
  18. int 21h - выполняет interrupt 21h, который обычно используется для вывода информации на экран. В данном контексте это вероятно вывод адреса следующего символа m на экран.
  19. loop - переход к следующей итерации цикла.
  20. continue - переход к следующей итерации цикла.

Оцени полезность:

11   голосов , оценка 4.364 из 5
Похожие ответы