Найти букву "m" и номер буквы в строке вывести на экран - Assembler
Формулировка задачи:
Дана строка. "Predmet assembler"
Нужно найти букву "m" и номер буквы в строке вывести на экран.
Решение задачи: «Найти букву "m" и номер буквы в строке вывести на экран»
textual
Листинг программы
sub di,offset Txt ;di = номер символа (отсчёт с 1... если нужен отсчёт с 0, то offset Txt меняем на (offset Txt + 1) )
Объяснение кода листинга программы
sub di, offset Txt- выполняет вычитание значения регистраoffset Txtиз регистраdi, сохраняя результат в регистреdi. Это действие может быть интерпретировано как получение номера символа в строке, с которой работает программа. Если отсчёт начинается с 0, то нужно изменитьoffset Txtна(offset Txt + 1).mov si, offset Txt- перемещает значение регистраoffset Txtв регистрsi. Это действие может быть интерпретировано как получение адреса символа в строке, с которой работает программа.mov bx, byte ptr [si]- перемещает байт из памяти, адресуемой регистромsi, в регистрbx. В данном контексте это вероятно получение значения символаmиз строки.cmp bx, 'm'- сравнивает значение регистраbxс символомm. Если они равны, то переходит к следующему шагу, иначе возвращается к началу цикла.jne continue- если значение регистраbxне равно символуm, то происходит переход к следующей итерации цикла.inc si- увеличивает значение регистраsiна 1. Это действие может быть интерпретировано как переход к следующему символу в строке.cmp di, 0- сравнивает значение регистраdiс 0. Если они равны, то это означает, что мы достигли конца строки, и цикл завершается.jne loop- если значение регистраdiне равно 0, то происходит переход к следующей итерации цикла.mov ax, si- перемещает значение регистраsiв регистрax. Это действие может быть интерпретировано как сохранение адреса последнего найденного символаmв регистреax.mov dx, offset Txt- перемещает значениеoffset Txtв регистрdx. Это действие может быть интерпретировано как получение адреса строки в памяти.add ax, dx- складывает значение регистраaxс значением регистраdx. Результат сохраняется в регистреax. Это действие может быть интерпретировано как смещение регистраaxотносительно адреса строки в памяти для получения номера символаm.mov bx, ax- перемещает значение регистраaxв регистрbx. Это действие может быть интерпретировано как сохранение номера символаmв регистреbx.mov cx, 2- перемещает значение 2 в регистрcx. Это действие может быть интерпретировано как установка счётчика для цикла вывода информации.mov dx, offset Txt- перемещает значениеoffset Txtв регистрdx. Это действие может быть интерпретировано как получение адреса строки в памяти.add bx, dx- складывает значение регистраbxс значением регистраdx. Результат сохраняется в регистреbx. Это действие может быть интерпретировано как смещение регистраbxотносительно адреса строки в памяти для получения адреса следующего символаm.mov dx, bx- перемещает значение регистраbxв регистрdx. Это действие может быть интерпретировано как сохранение адреса следующего символаmв регистреdx.mov ah, 0- перемещает значение 0 в регистрah. Это действие может быть интерпретировано как установка регистраahдля последующего использования в оператореint.int 21h- выполняет interrupt 21h, который обычно используется для вывода информации на экран. В данном контексте это вероятно вывод адреса следующего символаmна экран.loop- переход к следующей итерации цикла.continue- переход к следующей итерации цикла.