Редактирование:
‗RW
(раздел)
Перейти к навигации
Перейти к поиску
Внимание:
Вы не вошли в систему. Ваш IP-адрес будет общедоступен, если вы запишете какие-либо изменения. Если вы
войдёте
или
создадите учётную запись
, её имя будет использоваться вместо IP-адреса, наряду с другими преимуществами.
Анти-спам проверка.
Не
заполняйте это!
== Реализация == <pre> 4099 ;#lowRW 4100 ; _RW ( c1 c2 −− ) Считать/записать (c2=1/0) блок номер c1. 4101 ; c1 − номер экрана (блока) 4102 ; c2 − флаг "чтение−запись" (c2=1 для чтения, c2=0 для записи) 4103 LRW: .DB 3 4104 .TEXT "_RW" ; ( bl# flg −− ) 4105 .DW LLORW 4106 RW: .DW CALL 4107 RRW: .DW DUP,ZEQU, ZBRAN,RW1, SAVETEXT 4108 RW1: .DW SWAP 4109 .DW DUP,ONEM,ABS, LITB 4110 .DB 60 4111 .DW SLASH,LITB 4112 .DB 3 4113 .DW MIN,LITB 4114 .DB 49 4115 .DW PLUS,KAT ; Выбрать нужный каталог 4116 .DW BDIGS, DIG,DIG,DIG, LITB 4117 .DB 66 4118 .DW HOLD, EDIGS, DROP ; Состряпать имя файла "Bxxx" 4119 .DW SWAP, LORW ; Считать/записать 4120 .DW DISKOFF, EXIT ; Запретить все дисковые операции </pre> Пример реализации R/W из fig-Форта, симулирующий блоки в ОЗУ: <PRE> HEX 4000 CONSTANT LO ( начало буферной области ) 6800 CONSTANT HI ( эквивалент 10 экранов ) : _RW >R ( сохранить boolean ) B/BUF × LO + ↑ HI > 6 ?ERROR ( проверка диапазона ) R> IF ( чтение ) ↔ ENDIF B/BUF CMOVE ; </PRE> === Советская реализация === В ФОРТ-ЕС общением с диском занимались [[примитив]]ы RBLK и WBLK Вот их описания и «болванки» определений: <PRE> RBLK * А,+N-> ПРОЧЕСТЬ ЭКРАН +N ПО АДРЕСУ A 6 WBLK * A,+N-> ЗАПИСАТЬ ЭКРАН +N ИЗ АДРЕСА A 6 Экран номер 6 ( 09.09.86 KEY CR EMIT TYPE (EXPECT/ RBLK MBLK ) ( следующие определения дают только имена процедур) CODE RBLK ( A,N-> ПРОЧИТАТЬ ЭКРАН N В БУФЕР A) END-CODE CODE WBLK ( A,N-> ЗАПИСАТЬ ЭКРАН N ИЗ БУФЕРА А ) END-CODE </PRE> Определение слова R/W в FORTH ИТЭФ: <PRE> HEAD 203Q,'R/',327Q,RW ; R/W ; Открытие файла MOV DX, OFFSET FCB MOV AH, 0FH INT 21H CMP AL, 0FFH JE ERR0 POP BX ; R/W - флаг POP AX ; Номер блока POP DX ; Адрес буфера DEC AX MOV CL, 3 SAL AX, CL ; (BLOCK#-1)*8 MOV RANDREC,AX MOV RANDREC+2,0 CMP BX, 0 JNE RED ; WRITE MOV BX, DX MOV CX, 8 ; Номер записи WR: MOV DX, BX MOV AH,1AH ; Запись адреса буфера INT 21H MOV DX,OFFSET FCB MOV AH, 22Н ; Запись RECORD INT 21H CMP AL, 0 JNE ERR1 INC RANDREC ; Коррекция адреса буфера ADD BX, 80H LOOP WR JMP OUT RED: MOV CX, 8 MOV BX, DX RD: MOV DX, BX MOV AH, 1AH ; Запись адреса буфера INT 21H MOV DX, OFFSET FCB MOV AH, 21Н INT 21H CMP AL, 0 JNE ERR3 INC RANDREC ; Коррекция адреса ADD BX, 80H LOO RD OUT: MOV DX, OFFSET FCB ; Закрытие файла MOV AH, 10H INT 21H CMP AL, 0 JNE ERR2 EXIT: NEXT ERR0: MOV DX, OFFSET ERMESO JMP DONE ERR1: MOV DX, OFFSET ERMES1 JMP DONE ERR2: MOV DX, OFFSET ERMES2 JMP DONE ERR3: MOV DX, OFFSET ERMES3 DONE: MOV AH, 9Н INT 21H JMP EXIT ... FCB LABEL WORD DRIVE DB 1 FN DB 'FORTH ' EXT DB 'DAT' CURBLK DW 0 ; Относительное начало файла RECSIZE DW 80H FILESIZE DW 5000,0 DATE DB 0,0 DB 0,0,0,0,0, 0,0,0,0,0 CURREC DB 0 RANDREC DW 0,0 ERMES0 DB 'ERR OPENING FILE$' ERMES1 DB 'ERR WRITING FILE$' ERMES2 DB 'ERR CLOSING FILE$' ERMES3 DB 'ERR READING FILE$' </PRE>
Описание изменений:
Пожалуйста, учтите, что любой ваш вклад в проект «ПМК вики» может быть отредактирован или удалён другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см.
Pmkwiki:Авторские права
).
НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!
В целях защиты вики от автоматического спама в правках просим вас решить следующую каптчу:
Отменить
Справка по редактированию
(в новом окне)
Навигация
Персональные инструменты
Вы не представились системе
Обсуждение
Вклад
Создать учётную запись
Войти
Пространства имён
Статья
Обсуждение
русский
Просмотры
Читать
Править
История
Ещё
Поиск
Навигация
Заглавная страница
Свежие правки
Случайная страница
Справка по MediaWiki
Инструменты
Ссылки сюда
Связанные правки
Служебные страницы
Сведения о странице