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