XMS calling routine in QuickBASIC. Нахакали а не работает...

Тема в разделе "WASM.ZEN", создана пользователем svlavz, 18 сен 2008.

  1. svlavz

    svlavz Святослав

    Публикаций:
    0
    Регистрация:
    18 сен 2008
    Сообщения:
    2
    Адрес:
    Украина
    Обращение к функциям диспетчера 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 и написал свой вариант который не работает. Всё это вы можете видеть во вложении.
     
  2. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    А погуглить?
    http://basic113.narod.ru/articles/a4.html
     
  3. svlavz

    svlavz Святослав

    Публикаций:
    0
    Регистрация:
    18 сен 2008
    Сообщения:
    2
    Адрес:
    Украина
    Я уже пробовал этот вариант. Мне нужен код для доступа из среды QuickBASIC. И удобнее всего вызывать один код через CALL ABSOLUTE нежели десяток процедур на ассемблере.
     
  4. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706