Знаете есть такая программа в MS-DOS называется more, вот я пишу что-то похожее, но только длоя перекодировки из Win в DOS. Но проблема в том, что я не знаю как останавливать вцыполнение таких программ. Вот пример: Код (Text): .model tiny .code org 100h main: mov ah, 08h int 21h mov dl, al dec dl mov ah, 02h int 21h jmp main end main Я откомпилировал эту программу в файл N.COM Если я ввожу в командную строку команду echo bcd|n, то на экране появляется надпись abc♀ , что правильно, но программа не завершает работу (она же зацикленна). Вот вопрос как сделать что-бы программа, работающая в конвейерном режиме завершала работу после приема всех данных?
Administrator поставте эксперимент запрашиваете у пользователя клавишу и выводите код (дополнительный тоже) нажмите ctrl+z - увидите какой код ну или в справочнике посмотрите только проблема в том что ставить в конце файла символ eof привычка не всех редакторов
Вот этот код: Код (Text): .model tiny .code org 100h main: mov ah, 08h int 21h cmp al, 1ah je exit mov dl, al dec dl mov ah, 02h int 21h jmp main exit: mov ax, 4c00h int 21h end main Он не работает. Если я ввожу команду echo hello|n или команду type 1.txt|n, то программа не завершается, хотя если ее просто запустить (без перенаправления входа), то при нажатии Ctrl+Z она завершает работу
"как только ввода нет завершаете работу" - да, но ведь программа more не завершает работу как только входа нет (попробуйте запустить ее без перенаправления входа командой more), значит можно сделать как-то иначе. Думаю что я попробую разобраться в программе more в TurboDebeger. А вот программа написанная на старом добром QuickBASIC: Код (Text): START: X$ = INKEY$ IF X$ <> "" THEN PRINT ASC(X$); GOTO START Она выводит ASCII-коды нажатых клавиш. Я ее откомпилировал в ASCII.EXE и если ввожу команду echo hello|ascii, то не смотря на то, что программа зациклинна - она завершает работу по окончанию строки "hello",13,10
Ну в ДОС-е, да и в Винде вроде есть понятие стандартные файлы ввода и вывода. Работайте с ними и не будет проблем с определением конца - это будет конец файла. Их даже по-моему открывать не надо - они открыты на номера 1 и 2.
Учебник по ДОС откройте. Есть функция открытия/создания файла - она , если склероз не изменяет, возвращает его "номер". Далее есть функции чтения/записи из/в файл. В качестве кода ответа в т.ч. и "конец файла". Номера 1,2 и 3 зарезервированы и прицеплены к стандартному вводу(клавиатура), выводу(дисплей) и ввывод ошибок(тоже дисплей). Функции конвеера позволяют перенаправить и "сцепить" эти "файлы". Вы просто выбрали неправильный инструмент - в ДОС у 21-го прерывания много функций.
кажется я понял. Функция чтения с клавиатуры как из файла: Код (Text): mov ah, 3fh xor bx, bx mov cx, {длина} lea dx, {область ввода} int 21h Функция вывода на экран как в файл: Код (Text): mov ah, 40h mov bx, 01 mov cx, {длина} lea dx, {облость вывода} int 21h Ты это имел ввиду?