Определение количества предложений в заданном тексте - 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 для выхода из программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д