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