Определение количества предложений в заданном тексте - Assembler
Формулировка задачи:
Определите количество предложений в заданном тексте (предложение заканчивается либо точкой, либо вопросительным или восклицательным знаком) в ассемблере надо
Решение задачи: «Определение количества предложений в заданном тексте»
textual
Листинг программы
.model small .386 .data count db 0 msg db 'One. Two! Three? Four! Five. Six? Seven?' len equ $-msg .stack db 256 dup(?) .code start: mov ax,@data mov ds,ax push ds pop es cld lea si,msg+1 ; предложение не может кончится не начавшись mov cx,len dec cx ; и мы сэкономим на проверке первого знака find: lodsb cmp al,'.' jz ok cmp al,'!' jz ok cmp al,'?' jz ok jmp skip ok: inc count skip: loop find exit: mov ah,4Ch mov al,00h int 21h end start
Объяснение кода листинга программы
- Объявлены две переменные: count и msg.
- Переменная len инициализируется значением -msg.
- Задается начальный адрес стека.
- Код размещается в сегменте code.
- Выполняется команда mov ax,@data для установки сегмента данных в ax.
- Выполняется команда mov ds,ax для установки ds в сегмент данных.
- Выполняется команда push ds для сохранения ds на стеке.
- Выполняется команда pop es для восстановления ds из стека.
- Выполняется команда cld для установки флага направления в csd (указатель стека).
- Выполняется команда lea si,msg+1 для инициализации si началом строки msg.
- Выполняется команда mov cx,len для установки cx равным len.
- Выполняется команда dec cx для уменьшения cx на единицу (предложение не может закончиться не начавшись).
- Выполняется команда find, которая осуществляет поиск знаков препинания в строке msg.
- Если знак равен точке, выполняется команда jz для перехода к следующей итерации цикла.
- Если знак равен восклицательному знаку, выполняется команда jz для перехода к следующей итерации цикла.
- Если знак равен вопросительному знаку, выполняется команда jz для перехода к следующей итерации цикла.
- Если знак не равен ни одному из перечисленных, выполняется команда jmp для перехода к следующей итерации цикла.
- Если знак равен точке, выполняется команда inc count для увеличения count на единицу.
- Если знак равен восклицательному знаку, выполняется команда inc count для увеличения count на единицу.
- Если знак равен вопросительному знаку, выполняется команда inc count для увеличения count на единицу.
- Если знак не равен ни одному из перечисленных, выполняется команда jmp для перехода к следующей итерации цикла.
- После окончания цикла выполняется команда loop find.
- Если все знаки проверены, выполняется команда exit.
- Выполняется команда mov ah,4Ch для закрытия программы.
- Выполняется команда mov al,00h для установки регистра al в ноль.
- Выполняется команда int 21h для выхода из программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д