Слова которые начинаются на "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;.