конвейеризация программ

Тема в разделе "WASM.BEGINNERS", создана пользователем Administrator, 24 фев 2010.

  1. Administrator

    Administrator New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2009
    Сообщения:
    23
    Знаете есть такая программа в MS-DOS называется more, вот я пишу что-то похожее, но только длоя перекодировки из Win в DOS. Но проблема в том, что я не знаю как останавливать вцыполнение таких программ. Вот пример:
    Код (Text):
    1.         .model  tiny
    2.         .code
    3.         org     100h
    4. main:
    5.         mov     ah, 08h
    6.         int     21h
    7.         mov     dl, al
    8.         dec     dl
    9.         mov     ah, 02h
    10.         int     21h
    11.         jmp     main
    12. end     main
    Я откомпилировал эту программу в файл N.COM
    Если я ввожу в командную строку команду echo bcd|n, то на экране появляется надпись abc♀ , что правильно, но программа не завершает работу (она же зацикленна). Вот вопрос как сделать что-бы программа, работающая в конвейерном режиме завершала работу после приема всех данных?
     
  2. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    сравнивать полученный байт с EOF.
     
  3. Administrator

    Administrator New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2009
    Сообщения:
    23
    я вот только не понял а какой конкретно код имеет EOF? Пробывал сравнивать с 1A, но не выходит.
     
  4. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.622
    Адрес:
    Russia
    Administrator
    поставте эксперимент
    запрашиваете у пользователя клавишу и выводите код (дополнительный тоже)
    нажмите ctrl+z - увидите какой код ну или в справочнике посмотрите
    только проблема в том что ставить в конце файла символ eof привычка не всех редакторов :dntknw:
     
  5. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.622
    Адрес:
    Russia
    еще вариант есть проверкой готовности ввода - как только ввода нет завершаете работу
     
  6. Administrator

    Administrator New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2009
    Сообщения:
    23
    код Ctrl+Z - 26 (т.е. как я и писал 1A) С ним ничего не вышло
     
  7. Administrator

    Administrator New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2009
    Сообщения:
    23
    Вот этот код:
    Код (Text):
    1.         .model  tiny
    2.         .code
    3.         org     100h
    4. main:
    5.         mov     ah, 08h
    6.         int     21h
    7.         cmp     al, 1ah
    8.         je      exit
    9.         mov     dl, al
    10.         dec     dl
    11.         mov     ah, 02h
    12.         int     21h
    13.         jmp     main
    14. exit:   mov     ax, 4c00h
    15.         int     21h
    16. end     main
    Он не работает. Если я ввожу команду echo hello|n или команду type 1.txt|n, то программа не завершается, хотя если ее просто запустить (без перенаправления входа), то при нажатии Ctrl+Z она завершает работу
     
  8. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.622
    Адрес:
    Russia
    Administrator
    пробуйте 2 вариант
     
  9. Administrator

    Administrator New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2009
    Сообщения:
    23
    Какой 2 вариант?
     
  10. Administrator

    Administrator New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2009
    Сообщения:
    23
    "как только ввода нет завершаете работу" - да, но ведь программа more не завершает работу как только входа нет (попробуйте запустить ее без перенаправления входа командой more), значит можно сделать как-то иначе. Думаю что я попробую разобраться в программе more в TurboDebeger.
    А вот программа написанная на старом добром QuickBASIC:
    Код (Text):
    1. START:
    2. X$ = INKEY$
    3. IF X$ <> "" THEN PRINT ASC(X$);
    4. GOTO START
    Она выводит ASCII-коды нажатых клавиш. Я ее откомпилировал в ASCII.EXE и если ввожу команду echo hello|ascii, то не смотря на то, что программа зациклинна - она завершает работу по окончанию строки "hello",13,10
     
  11. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Ну в ДОС-е, да и в Винде вроде есть понятие стандартные файлы ввода и вывода.
    Работайте с ними и не будет проблем с определением конца - это будет конец файла.
    Их даже по-моему открывать не надо - они открыты на номера 1 и 2.
     
  12. Administrator

    Administrator New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2009
    Сообщения:
    23
    Поясните, пожалуйсто
    Как его определить?

    Ничего не понял
     
  13. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Учебник по ДОС откройте.
    Есть функция открытия/создания файла - она , если склероз не изменяет, возвращает его "номер".
    Далее есть функции чтения/записи из/в файл. В качестве кода ответа в т.ч. и "конец файла".
    Номера 1,2 и 3 зарезервированы и прицеплены к стандартному вводу(клавиатура), выводу(дисплей) и ввывод ошибок(тоже дисплей). Функции конвеера позволяют перенаправить и "сцепить" эти "файлы". Вы просто выбрали неправильный инструмент - в ДОС у 21-го прерывания много функций.
     
  14. Administrator

    Administrator New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2009
    Сообщения:
    23
    кажется я понял.
    Функция чтения с клавиатуры как из файла:
    Код (Text):
    1. mov ah, 3fh
    2. xor bx, bx
    3. mov cx, {длина}
    4. lea dx, {область ввода}
    5. int 21h
    Функция вывода на экран как в файл:
    Код (Text):
    1. mov ah, 40h
    2. mov bx, 01
    3. mov cx, {длина}
    4. lea dx, {облость вывода}
    5. int 21h
    Ты это имел ввиду?
     
  15. Administrator

    Administrator New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2009
    Сообщения:
    23
    Класс! Всё получилось! Спасибо!
     
  16. Administrator

    Administrator New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2009
    Сообщения:
    23
    valterg
    Какой посоветуете?
    Я изучаю ассемблер по книжке Абеля "программирование для IBM PC"