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

Объяснение кода листинга программы

В данном коде выполняется следующая последовательность действий:

  1. Переменная si инициализируется значением 1.
  2. Происходит проверка условия if [si]='.' then break;. Если текущий символ в буфере равен точке, то выполнение цикла прекращается.
  3. Происходит проверка условия if [si]=',' then. Если текущий символ в буфере равен запятой, то выполняются следующие действия:
    • Переменная FirstChar устанавливается в true.
    • Переменная PrintChar устанавливается в false.
  4. Если текущий символ в буфере не равен запятой, то выполняются следующие действия:
    • Происходит проверка условия if FirstChar then. Если это первый символ, то проверяется условие [si]='a' then. Если это условие истинно, то выполняются следующие действия:
      • Переменная PrintChar устанавливается в true.
    • Переменная FirstChar устанавливается в false.
    • Если PrintChar истинно, то выполняется действие WriteChar([si]).
  5. Цикл продолжается до тех пор, пока не будет выполнено условие break;.

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


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

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

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