Вопрос № 24389: к примеру, команды
mov ax,3d02h ;открыть Файл 02 чтение / запис
mov dx,offset booz
int 21h
--=--
--=--
--=--
mov ah,3eh ; закрытие файла
mov bx,Handle
int 21h
--=--
--=--
Handle dw 0 ;dw слово/ В D...Вопрос № 24420: Здраствуйте.
Что за виртуальный режим процессора?...
Вопрос № 24.389
к примеру, команды
mov ax,3d02h ;открыть Файл 02 чтение / запис
mov dx,offset booz
int 21h
--=--
--=--
--=--
mov ah,3eh ; закрытие файла
mov bx,Handle
int 21h
--=--
--=--
Handle dw 0 ;dw слово/ В DS
end
лично в моём справочнике нет объяснение, нашьет Handle. Пишется, что это описатель?!
а скажите, а справочник есть на него. Веть нигде не говорится про Handle dw 0
Или я чтото преувеличиваю
Отправлен: 01.08.2005, 21:37
Вопрос задал: IngineringG (статус: Посетитель)
Всего ответов отправлено: 4
Отвечает: Евгений Иванов
Здравствуйте, IngineringG!
возвращённое значение нужно записать в переменную.
mov ax,3d02h ;открыть Файл 02 чтение / запис
mov dx,offset booz
int 21h
mov [Handle], ax
--=--
--=--
--=--
mov ah,3eh ; закрытие файла
mov bx,Handle
int 21h
--=--
--=--
Handle dw 0 ;dw слово/ В DS
--------- Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 01.08.2005, 21:42 Оценка за ответ: 5
Отвечает: Стас
Здравствуйте, IngineringG!
Извини за нескромный вопрос, но ты не русский?
Не понятна фраза: "Пишется, что это описатель?!"
Да это описатель. А где пишется?
Лично у меня допотопный справочник, но мне хватает, выдержка из него:
Приложение:
Ответ отправил: Стас (статус: Практикант)
Отправлен: 02.08.2005, 00:56
Отвечает: Sager
Здравствуйте, IngineringG!
А почему в справочнике должно быть описание Handle??
Handle - это переменная, которая может иметь любое имя, не только Handle.
В ней ты сохраняешь описатель файла. Но ты также можешь сохранить описатель в стеке, или вообще не сохранять, если ты уверен, что регистр bx не изменится(так как именно в нем хранится описатель). Вообще суть вопроса не совсем ясна...
Ответ отправил: Sager (статус: 3-ий класс)
Отправлен: 02.08.2005, 08:37
Отвечает: Ayl
Здравствуйте, IngineringG!
При открытии файла в регистре AX (и сброшенном бите CF) ОС возвращает логический номер файла (описатель, дискриптор, хендл). Именно этот номер ты должен будешь указывать в регистре BX при дальнейших обращениях к этому файлу. Этот номер и должен быть сохранен в переменной Handle.
Т.е. твой пример должен выглядеть так (без проверок на ошибки):
mov ax, 3d02h ; открыть файл, режим открытия файла: чтение/запись
mov dx, OFFSET booz ; смещение имени файла
int 21h
mov [Handle], ax ; сохранить дискриптор файла в переменной
...
mov ah, 3eh ; функция закрытия файла
mov bx, [Handle] ; сообщаем ОС, какой именно файл надо закрыть
int 21h
...
Handle dw 0 ; резервируем место для дескриптора файла
--------- Трудное - то, что можно сделать немедленно. Невозможное - то, для выполнения чего требуется немного больше времени
Ответ отправил: Ayl (статус: Профессор)
Отправлен: 02.08.2005, 13:09
Вопрос № 24.420
Здраствуйте.
Что за виртуальный режим процессора?
Отправлен: 02.08.2005, 10:45
Вопрос задал: korsar (статус: Посетитель)
Всего ответов отправлено: 2
Отвечает: Sager
Здравствуйте, korsar! В этом режиме процессор эмулирует работу 8086 процессора (1 Мб адресного пространства, "обычные" прерывания и пр.), но при этом процессор сохраняет все средства контроля, присущие защищённому режиму. Обычно, виртуальный режим используется в операционных системах для запуска программ, рассчитанных на процессор 8086 (так называемая, "обратная совместимость ПО"). Виртуальный режим реализуется как отдельная задача в мультизадачной среде и она может взаимодействовать
с другими задачами, если, конечно же, ей позволит это операционная система.
====== дополнение от Иванова Евгений ====== неправильно. Программа, запущенная в виртуальном режиме, ничего не знает о других задачах! ей даже трудно узнать, что она запущена виртуально, а не на настоящщем процессоре ============
Ответ отправил: Sager (статус: 3-ий класс)
Отправлен: 02.08.2005, 11:20 Оценка за ответ: 5
Отвечает: Ddeedd
Здравствуйте, korsar!
Узнать, что прога в V86 находится - совсем не трудно - "smsw ax" - и проверить младший бит.
Ответ отправил: Ddeedd (статус: 3-ий класс)
Отправлен: 02.08.2005, 14:58