В исходной строке оставить между словами лишь по одному пробелу, удалив лишние - Assembler

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

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

Выручьте пожалуйста студента с контрольной по Assembler, есть 6 заданий, может у кого какие примеры похожие есть, киньте, а я разберусь как-нибудь, ничего в голову не лезет ввиду не изучения этого языка (Assembler) в принципе. Заранее благодарен... Задана строка слов. Словом считается последовательность символов, разделенная пробелами,В исходной строке оставить между словами лишь по одному пробелу, удалив лишние.

Решение задачи: «В исходной строке оставить между словами лишь по одному пробелу, удалив лишние»

textual
Листинг программы
;================================================================
   MOV   SI,buff+2         ; адрес строки
   XOR   BX,BX             ; BL = предыдущий символ
printf:
   LODSB                   ; читаем байт
   CMP   AL,13             ; это ENTER? (маркер конца в буфере)
   JZ    exit              ; да - выходим
   CMP   AL,BL             ; это предыдущий символ?
   JZ    printf            ; да - читаем сл.символ
   MOV   BL,AL             ; сохраняем введённый символ
   INT   29h               ; выводим его на экран
   JMP   printf            ; следующий символ
;================================================================

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

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

  1. MOV SI, buff+2; адрес строки
  2. XOR BX, BX; BL = предыдущий символ
  3. printf:
  4. LODSB; читаем байт
  5. CMP AL, 13; это ENTER? (маркер конца в буфере)
  6. JZ exit; да - выходим
  7. CMP AL, BL; это предыдущий символ?
  8. JZ printf; да - читаем предыдущий символ
  9. MOV BL, AL; сохраняем введённый символ
  10. INT 29h; выводим его на экран
  11. JMP printf; следующий символ

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


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

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

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