Обращение к функциям диспетчера XMS памяти производится посредством загрузки параметров в регистры процессора и far call на адрес процедуры диспетчера. Это легко сделать на ассемблере но нереально на ЯВУ типа QuickBASIC. Прошу не смеяться, но дело серьёзное. Прошу помочь написать процедуру на ассемблере для осуществления запросов к диспетчеру памяти XMS из QBASIC посредством вызовов CALL ABSOLUTE. Диспетчеру HIMEM.SYS передаются параметры в регистрах AX, BX, DX, SI, DS, так что мне надо чтобы было примерно так: Код: DIM XMSArguments(1 TO 4) AS INTEGER XMSArguments(1)=... ... DEF SEG=VARSEG(XMSCallCode(0)) CALL ABSOLUTE(VARPTR(XMSCallCode(0)),XMSArguments(),XMSDispatcherSegment,XMSDispatcherOffset) DEF SEG Мои попытки наассемблерить такой код завершились провалом. Пожалуйста помогите! Вот мой код: PUSH BP MOV BP,SP PUSH AX PUSH BX PUSH CX PUSH DX PUSH DS PUSH SI PUSHF MOV SI,WORD PTR SS:[BP+10] MOV BX,WORD PTR SS:[BP+8] MOV AX,WORD PTR SS:[BP+2] MOV DX,WORD PTR SS:[BP+4] PUSH DX MOV MOV DX,WORD PTR SS:[BP+6] POP DS CALL FAR SS:[BP+12] MOV WORD PTR SS:[BP+10],SI MOV WoRD PTR SS:[BP+8],BX MOV WORD PTR SS:[BP+6],DX MOV WORD PTR SS:[BP+4],DS MOV WORD PTR SS:[BP+2],AX POPF POP SI POP DS POP DX POP CX POP BX POP AX POP BP RETF 14 Весит среду намертво! Приглашённый ассемблерщик отказался использовать исходный код INT86XOLD из набора исходников библиотеки QB.LIB и написал свой вариант который не работает. Всё это вы можете видеть во вложении.
Я уже пробовал этот вариант. Мне нужен код для доступа из среды QuickBASIC. И удобнее всего вызывать один код через CALL ABSOLUTE нежели десяток процедур на ассемблере.