Если в строке встречаются подряд 3 гласные буквы, вставить после них пробел (tasm) - Assembler

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

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

Дана произвольная строка, если встречаются подряд 3 гласные буквы, вставить после них пробел

Решение задачи: «Если в строке встречаются подряд 3 гласные буквы, вставить после них пробел (tasm)»

textual
Листинг программы
ORG 100h
JMP start
 
mess0   DB  13,10,'ENTER STRING: $'
mess1   DB  13,10,'Press any key...$'
table   DB  'AEIOUYaeiouy'
 
start:
   MOV   AH,9             ; запрос на ввод строки
   MOV   DX,mess0         ;
   INT   21h              ;
   XOR   BX,BX            ; счётчик гласных тройняшек
   MOV   AH,1             ; ввод с эхо..
   INT   21h              ;
 
@@1:                      ;
   MOV   DH,AL            ; DH = предыдущий символ
   MOV   AH,1             ; ввод с эхо..
   INT   21h              ;
   CMP   AL,13            ; это Enter?
   JE    exit             ;
   CMP   DH,AL            ; это предыдущий символ?
   JNE   @@1              ;
 
   MOV   DI,table         ; 2 символа совпали!
   MOV   CX,12            ; проверим их на гласную
   REPNE SCASB            ;
   OR    CX,CX            ; если пара согласная,
   JZ    @@1              ; то мотаем цикл..
 
   INC   BX               ; счётчик найденых +1
   CMP   BX,2             ; 3 символа совпали? (можно изменить предел в +/-)
   JZ    space            ; да - вставить пробел
   JMP   @@1              ; иначе: ждём следующий символ
 
space:                    ;
   MOV   AL,' '           ; вставим 'Space'
   INT   29h              ; могут быть ещё 3 гласных в строке
   XOR   BX,BX            ; 'Reset' счётчика
   JMP   @@1              ; следующий символ...
 
exit:                     ;
   MOV   DX,mess1         ; мессага "Press key"
   MOV   AH,9             ; 
   INT   21h              ; 
   XOR   AX,AX            ; 
   INT   16h              ; 
   INT   20h              ;  Gagarin...

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

В этом коде на языке Assembler выполняется следующая задача:

  1. Запрос на ввод строки (запрос на ввод с эхо).
  2. Цикл, который проверяет каждый символ в строке.
  3. Если предыдущий символ не равен текущему, то цикл продолжается.
  4. Если предыдущий символ равен текущему, и текущий символ не равен последнему символу в строке, то вставляется пробел.
  5. Если предыдущий символ равен текущему, и текущий символ равен последнему символу в строке, то происходит выход из цикла и выводится сообщение Press key.
  6. Если предыдущий символ не равен текущему, и текущий символ равен последнему символу в строке, то происходит выход из цикла и выводится сообщение Press any key....

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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