Нахождение короткого слова - Assembler/Fasm

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

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

Нахождение короткого слова в строке.. Помогите плиз!! Срочною

Решение задачи: «Нахождение короткого слова - Assembler/Fasm»

textual
Листинг программы
format  MZ                      ;Исполняемый файл DOS EXE (MZ EXE)
entry   code_seg:start          ;Точка входа в программу
;--------------------------------------------------------------------
stack   200h                    ;Размер стека
;--------------------------------------------------------------------
segment data_seg                ;Cегмент данных
        CrLf            db      0Dh, 0Ah, '$'   ;перевод строки
        msgPressAnyKey  db      0Dh, 0Ah, 'Press any key to exit...', '$'
        Prompt          db      'Enter the string:', 0Dh, 0Ah, '$'
        msgResult       db      'The shortest word is: ', '$'
        DelimChar       db      ' '     ;символ, разделитель слов
 
        MinWordIndx     dw      ?
        MinWordLen      dw      ?
 
        KeyBuffer       db      80, 82 dup(?)
;--------------------------------------------------------------------
segment code_seg                ;Сегмент кода
start:                                  ;Точка входа в программу
        mov     ax,     data_seg        ;Инициализация регистра DS
        mov     ds,     ax
 
        ;ввод исходной строки
        mov     ah,     09h
        lea     dx,     [Prompt]
        int     21h
        mov     ah,     0Ah
        lea     dx,     [KeyBuffer]
        int     21h
        ;перевод строки
        mov     ah,     09h
        lea     dx,     [CrLf]
        int     21h
        ;обработка строки: поиск слова с наименьшей длиной
        xor     ax,     ax
        mov     [MinWordIndx],  ax
        mov     [MinWordLen],   ax
        lea     si,     [KeyBuffer+1]
        mov     cx,     ax
        or      cl,     [si]
        jz      @@Finish
        inc     si
        ;пропускаем все разделители
        mov     ah,     [DelimChar]
@@WhileDelimiter:
        mov     al,     [si]
        cmp     al,     ah
        jne     @@NewWord
        inc     si
        loop    @@WhileDelimiter
 
        jcxz    @@Finish        ;если строка закончилась - выйти
        ;найдено новое слово
@@NewWord:
        mov     dx,     0       ;длина нового слова
        mov     di,     si      ;адрес первого символа нового слова
        ;пропускаем все буквы слова до разделителя
@@WhileWord:
        mov     al,     [si]
        cmp     al,     ah
        je      @@Break
        inc     si              ;переходим к следующему символу
        inc     dx
        loop    @@WhileWord
@@Break:
        cmp     [MinWordLen],   0       ;если это первое найденное слово
        jne     @@Comp                  ;то запомнить длину
        mov     [MinWordLen],   dx
        mov     [MinWordIndx],  di
        @@Comp:
                cmp     [MinWordLen],   dx
                jbe     @@Next
                mov     [MinWordLen],   dx
                mov     [MinWordIndx],  di
@@Next:
        jcxz    @@Finish
        jmp     @@WhileDelimiter
 
@@Finish:
 
        ;вывод результатов
        mov     ah,     09h
        lea     dx,     [msgResult]
        int     21h
        mov     ah,     40h
        mov     bx,     1
        mov     cx,     [MinWordLen]
        mov     dx,     [MinWordIndx]
        int     21h
        ;ожидание нажатия любой клавиши
        mov     ah,     09h
        mov     dx,     msgPressAnyKey
        int     21h
        mov     ah,     0
        int     16h
 
        mov     ax,     4C00h
        int     21h                     ;Завершение программы

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


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

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

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