Слова которые начинаются на "a" - Assembler

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Стоит задание - Есть набор слов введенных с клавиатуры (слова разделены запятой и в конце точка ) - нужно вывести на екран все слова которые начинаются на "a". Пример моего кода
Листинг программы
  1. data segment para 'data'
  2. word db 255 dup('?'),'$'
  3. str1 db 'input string: ','$'
  4. str2 db 'result: ','$'
  5. newline db 10,13,'$'
  6. num db ?,'$'
  7. data ends
  8.  
  9. code segment para 'code'
  10. assume cs: code, ds: data
  11. begin:
  12. mov ax,data
  13. mov ds,ax
  14. xor ax,ax
  15. mov ax,0001h
  16. int 10h
  17. mov dx, offset str1 ; вывод на экран сообщение
  18. mov ah,09h
  19. int 21h
  20. mov dx, offset newline ; переход на новую строку
  21. mov ah,09h
  22. int 21h
  23. mov dx, offset word ; ввод строки
  24. mov ah,0ah
  25. int 21h
  26. mov dx, offset newline ; переход на новую строку
  27. mov ah,09h
  28. int 21h
  29. mov dx, offset str2 ; вывод на экран сообщение
  30. mov ah,09h
  31. int 21h
  32. mov dx, offset newline ; переход на новую строку
  33. mov ah,09h
  34. int 21h
  35. xor bx,bx
  36. mov si,2
  37. jmp m1
  38. m2:
  39. mov al,word[si-1]
  40. mov di,si
  41. sub di,bx
  42. cmp al,'a'
  43. je dryk
  44. xor bx,bx
  45. inc si
  46. jmp m1
  47. spo:
  48. mov dx, offset newline ; переход на новую строку
  49. mov ah,09h
  50. int 21h
  51. inc si
  52. xor bx,bx
  53. xor ax,ax
  54. m1:
  55. mov al, word[si]
  56. cmp al,','
  57. je m2
  58. cmp al,'.'
  59. je m2
  60. inc bl
  61. inc si
  62. jmp m1
  63. dryk: ; вывод на экран посимвольно найденного слова
  64. mov al,word[di]
  65. cmp al,','
  66. je spo
  67. cmp al,'.'
  68. je mexit
  69. mov num,al
  70. lea dx, num
  71. mov ah,09h
  72. int 21h
  73. inc di
  74. jmp dryk
  75.  
  76. mexit:
  77. mov ax,4c00h
  78. int 21h
  79. code ends
  80. end begin
Подскажите где у меня ошибки. Буду очень благодарен.

Решение задачи: «Слова которые начинаются на "a"»

textual
Листинг программы
  1. for si:=1 to length(kbdBuf) do
  2. begin
  3. if [si]='.' then break;
  4. if [si]=',' then
  5. begin
  6. FirstChar:=true; {bh:=0}
  7. PrintChar:=false; {bl:=0}
  8. end
  9. else
  10. begin
  11. if FirstChar then
  12. if [si]='a' then
  13. PrintChar:=true; {bl:=1}
  14. FirstChar:=false; {bh:=1}
  15. if PrintChar then WriteChar([si]);
  16. end;
  17. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы