• Сервис онлайн-записи на собственном Telegram-боте
    Тот, кто работает в сфере услуг, знает — без ведения записи клиентов никуда. Мало того, что нужно видеть свое расписание, но и напоминать клиентам о визитах тоже. Нашли самый бюджетный и оптимальный вариант: сервис VisitTime.
    Для новых пользователей первый месяц бесплатно.
    Чат-бот для мастеров и специалистов, который упрощает ведение записей:
    Сам записывает клиентов и напоминает им о визите;
    Персонализирует скидки, чаевые, кэшбэк и предоплаты;
    Увеличивает доходимость и помогает больше зарабатывать;
    Начать пользоваться сервисом


  • Иллюстрированный самоучитель по задачам и примерам Assembler

    Чтение, запись, позиционирование в файле

    При нажатии клавиши Пробел в начале ввода очередной строки (ASCII-код – 3210 или 2016) направление ввода данных в файл изменяется следующим образом: файл расширяется на величину, равную количеству уже введенных символов, и дальнейший ввод осуществляется с конца файла. Завершение работы программы определяется моментом, когда оба введенных потока b в файле встречаются (не перекрываясь).

    :prg07_09.asm – программа заполнения файла my_file.txt данными в виде строк символов.
    :вводимыми с клавиатуры.
    buf_Oahstruc
    len_buf db 83;длина buf_0ah
    len_in db 0 действительная длина введенного слова (без учета 0dh)
    buf_in db 82 dup (20h):буфер для ввода Сс учетом 0dh и позднее добавляем Oah)
    ends
    .data
    handle dw 0:дескриптор файла
    filename db 'my_file.txt',0
    point_fname dd filename
    buf buf_0ah<>
    prev_d label dword;для сохранения длины предыдущей строки при выводе с конца файла prev dw 0
    dw 0
    middle dd 0;позиция в середине файла, при достижении которой снизу выходим:из программы
    .code
    :-----открываем файл-----………………………….--
    хоrсх.сх;атрибуты файла – обычный файл
    movbx,2;режим доступа – доступ для чтения-записи, режим буферизации MS DOS
    movdx,12h;если файл существует, то открыть его без сохранения прежнего содержимого,
    :в обратном случае создать его
    Ids si,point_fname:формируем указатель на имя файла
    movah.6ch;номер функции DOS
    int 21h открываем (создаем) файл
    jc exit:если ошибка, то переход на конец;действия при успешном открытии файла:
    mov handle.ax,-сохраним дескриптор файла;– позиционируем файловый указатель с начала файла…….
    mov ah.42h
    хоr al,al
    хоr ex,ex
    хоr dx.dx
    mov bx, handle
    int 21h cycl:;вводим очередную строку с клавиатуры
    lea dx.buf
    mov ah,Oah
    Int 21h;для красоты ввода выводим на экран символ Oah
    mov dl.Oah
    mov ah.2
    int 21h
    emp buf.buf_in.20h;первый символ введенной строки сравниваем с пробелом
    je revers;переход на изменение ввода – добавляем Oah в конец введенной строки
    lea si.buf.buf_in
    mov al.buf.lenjn
    cbw push si
    add si,ax
    incsi учитываем неучтенный в lenjn символ 0dh
    mov byte ptr [si],Oah H--……вывод в файл:……………………..---……..
    I popdx указатель на область, откуда будем выводить строку
    mov bx.handle
    add ax,2 учитываем неучтенный в len_in символ 0dh
    movcx.ax:длина выводимых данных
    mov ah.40h
    int 21h
    jmp cycl
    revers:;записываем файл с конца, предварительно расширив его
    ;узнаем. сколько было уже записано до этого:;для этого вначале сбрасываем буферы на диск
    mov bx.handle
    mov ah.68h
    int 21h;теперь можно и узнать – определение длины файла:
    mov al,2
    хоr сх.сх
    хоr dx.dx;CX:DX – 0 – нулевое смещение
    mov ah,42h
    int 21h:в DX:AX возвращается длина файла в байтах
    jc exit:если ошибка:формируем полную длину в edx
    shl eax,16
    shld edx.eax,16
    mov middle.edx сохраним как условие выхода из программы при достижении снизу расширение файла
    ;с помощью функции 42h int 21h и последующей записи
    :умножаем длину на 2. при первой операции записи файл расширится:
    shl edx.l
    shld ecx.edx.16
    mov al.O
    хоr сх.сх
    mov ah.42h
    int 21h расширяем файл, устанавливая указатель
    jc exit:если ошибка расширим файл, выведя последнюю введенную строку с пробелом:
    
    Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.