Assembler - язык неограниченных возможностей


              

Вызываемая процедура должна заканчиваться командой


/p> Вызываемая процедура должна заканчиваться командой IRET.

Эти три функции используют следующую структуру данных для передачи значений регистров в реальный режим и обратно:

+00h: 4 байта — EDI

+04h: 4 байта — ESI

+08h: 4 байта — ЕВР

+0Ch: 4 байта — игнорируются

+10h: 4 байта — ЕВХ

+14h: 4 байта — EDX

+18h: 4 байта — ЕСХ

+1Сh: 4 байта — ЕАХ

+20h: 2 байта — FLAGS

+22h: 2 байта — ES

+24h: 2 байта — DS

+26h: 2 байта — FS

+28h: 2 байта — GS

+2Ah: 2 байта — IP

+2Ch: 2 байта — CS

+2Eh: 2 байта — SP

+30h: 2 байта — SS

Значения SS и SP могут быть нулевыми, тогда DPMI-сервер сам предоставит стек для работы прерывания.

Кроме этих трех функций, которые передают управление процедурам в реальном режиме из защищенного, существует механизм, позволяющий делать в точности обратное действие — передавать управление процедурам в защищенном режиме из реального.

INT 31h, АХ = 0303h — Выделить точку входа для вызова из реального режима



















Ввод: АХ = 0303h
DS:ESI = селектор:смещение процедуры в защищенном режиме (заканчивающейся IRET), которую будут вызывать из реального режима
ES:EDI = селектор:смещение структуры v86_regs, которая будет использоваться для передачи регистров
Вывод: если CF = 0, CX:DX = сегмент:смещение точки входа


При передаче управления в такую процедуру DS:ESI указывает на стек реального режима, ES:EDI — на структуру v86_regs, SS:ESP — на стек, предоставленный DPMI-сервером, и остальные регистры не определены.

Количество точек входа, которыми располагает DPMI-сервер, ограничено, и неиспользуемые точки входа должны быть удалены при помощи следующей функции DPMI.

INT 31h, AX = 0304h — Освободить точку входа для вызова из реального режима



















Ввод: АХ = 0304h
CX:DX = сегмент:смещение точки входа
Вывод: CF = 0, если точка входа удалена



Содержание  Назад  Вперед