Слова которые начинаются на "a" - Assembler
Формулировка задачи:
Здравствуйте.
Стоит задание - Есть набор слов введенных с клавиатуры (слова разделены запятой и в конце точка ) - нужно вывести на екран все слова которые начинаются на "a".
Пример моего кода Подскажите где у меня ошибки.
Буду очень благодарен.
data segment para 'data' word db 255 dup('?'),'$' str1 db 'input string: ','$' str2 db 'result: ','$' newline db 10,13,'$' num db ?,'$' data ends code segment para 'code' assume cs: code, ds: data begin: mov ax,data mov ds,ax xor ax,ax mov ax,0001h int 10h mov dx, offset str1 ; вывод на экран сообщение mov ah,09h int 21h mov dx, offset newline ; переход на новую строку mov ah,09h int 21h mov dx, offset word ; ввод строки mov ah,0ah int 21h mov dx, offset newline ; переход на новую строку mov ah,09h int 21h mov dx, offset str2 ; вывод на экран сообщение mov ah,09h int 21h mov dx, offset newline ; переход на новую строку mov ah,09h int 21h xor bx,bx mov si,2 jmp m1 m2: mov al,word[si-1] mov di,si sub di,bx cmp al,'a' je dryk xor bx,bx inc si jmp m1 spo: mov dx, offset newline ; переход на новую строку mov ah,09h int 21h inc si xor bx,bx xor ax,ax m1: mov al, word[si] cmp al,',' je m2 cmp al,'.' je m2 inc bl inc si jmp m1 dryk: ; вывод на экран посимвольно найденного слова mov al,word[di] cmp al,',' je spo cmp al,'.' je mexit mov num,al lea dx, num mov ah,09h int 21h inc di jmp dryk mexit: mov ax,4c00h int 21h code ends end begin
Решение задачи: «Слова которые начинаются на "a"»
textual
Листинг программы
for si:=1 to length(kbdBuf) do begin if [si]='.' then break; if [si]=',' then begin FirstChar:=true; {bh:=0} PrintChar:=false; {bl:=0} end else begin if FirstChar then if [si]='a' then PrintChar:=true; {bl:=1} FirstChar:=false; {bh:=1} if PrintChar then WriteChar([si]); end; end;
Объяснение кода листинга программы
В данном коде выполняется следующая последовательность действий:
- Переменная
si
инициализируется значением 1. - Происходит проверка условия
if [si]='.' then break;
. Если текущий символ в буфере равен точке, то выполнение цикла прекращается. - Происходит проверка условия
if [si]=',' then
. Если текущий символ в буфере равен запятой, то выполняются следующие действия:- Переменная
FirstChar
устанавливается вtrue
. - Переменная
PrintChar
устанавливается вfalse
.
- Переменная
- Если текущий символ в буфере не равен запятой, то выполняются следующие действия:
- Происходит проверка условия
if FirstChar then
. Если это первый символ, то проверяется условие[si]='a' then
. Если это условие истинно, то выполняются следующие действия:- Переменная
PrintChar
устанавливается вtrue
.
- Переменная
- Переменная
FirstChar
устанавливается вfalse
. - Если
PrintChar
истинно, то выполняется действиеWriteChar([si])
.
- Происходит проверка условия
- Цикл продолжается до тех пор, пока не будет выполнено условие
break;
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д