Advertisement
Guest User

Untitled

a guest
May 10th, 2018
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .MODEL small             ;отводим под стек и под данные по 64Кб
  2. .STACK 100h          ;отмечаем начало сегмента стека
  3. .DATA                ;отмечаем начало сегмента данных
  4. NL     db        0Ah, 0Dh, '$'
  5. Buf     DB       255, 0, 256 DUP (0)     ;
  6. .CODE                ;отмечаем начало сегмента кодов
  7. main PROC
  8. mov     ax,@data         ;копируем адрес
  9. mov     ds,ax        ;сегмента данных
  10. mov     dx,offset Buf   ;считываемстроку с клавиатуры
  11. mov     ah,0Ah
  12. int     21h
  13. xor     cx,cx
  14. mov     al,[Buf+1]       ;если считано 0 байт, то выход из
  15. mov     cl,al        ;задаем количествоповторений (длина строки)
  16. test    al,al        ;программы
  17. jz       Exit
  18. mov     ah,09h
  19. mov     dx,offset NL    ; перейти на следующую строку
  20. int     21h
  21. mov     si,offset Buf+2
  22. mov dh,0Dh           ;подготовка - суёмв регистр символ,
  23.                                  ;которого не можетбыть вовведённой строке
  24. Cycle:
  25.      mov     dl,[si]         ;считать символ
  26.      cmp     dl,' '      ;сравнить с пробелом
  27.       jne     Print      ;если не пробел - вывести
  28.       cmp dx,'  '        ;аесли пробел - то предыдущий былпробел или нет?
  29.       je    NextChar         ;если два пробела подряд -не печатаем
  30.      Print:
  31.      mov     ah,02h      ;выбор функции 2
  32.      int     21h         ;вызов DOS
  33.      NextChar:
  34.      mov dh,dl           ;сохранитьтекущийсимвол для теста на следующем витке
  35.      inc     si          ;перейти кследующему символу
  36. loop    Cycle
  37. Exit:
  38.   mov     AX,4C00h       ;выход
  39.   int     21h        ;из программы
  40. main    ENDP
  41. END main
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement