На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Перед отправкой сообщения внимательно прочтите правила раздела!!!
1. Запрещается обсуждать написание вирусов, троянов и других вредоносных программ!
2. Помните, что у нас есть FAQ раздела Assembler и Полезные ссылки. Посмотрите, возможно, там уже имеется решение вашего вопроса.

3. Настоятельно рекомендуем обратить особое внимание на правила форума, которые нарушаются чаще всего:
  3.1. Заголовок темы должен кратко отражать её суть. Темы с заголовками типа "Срочно помогите!" или "Ассемблер" будут отправляться в Корзину для мусора.
  3.2. Исходники программ обязательно выделяйте тегами [code]...[/code] (одиночные инструкции можно не выделять).
  3.3. Нежелательно поднимать старые темы (не обновлявшиеся более года) без веской на то причины.

Не забывайте также про главные Правила форума!

Добро пожаловать и приятного вам общения!!! ;)
 
Модераторы: Jin X, Qraizer
Страницы: (2) 1 [2]  все  ( Перейти к последнему сообщению )  
> линейный адрес для DOS UMB , как определить 32-битный адрес блока памяти в области UMB
    Хорош вам спорить :) Абсолютно все ОС, в целях совместимости со старым програмным обеспечением, предоставляют средства для выделения памяти в первом мегабайте. Что касается следующих 15-ти метров, то не стоит на них ориентироваться, если предполагается работа в виртуальном режиме, которым управляет не ваша прога. И с VDS не стоит заморачиваться, легко нарваться на неприятности. Вчера попробовал под 98-й виндой. Прога намертво висла, т.е. функции VDS не возвращали признаков ошибок (именно поэтому и висла). Стоило только заменить сервис VDS на старый-добрый ДОС, как все нормально заработало.
    Для тех, кто по прежнему считает, что можно безбояненно использовать сервис VDS советую заглянуть в "The x86/MSDOS Interrupt List", от Ralf Brown. Далеко ходить не нужно:
    Цитата
    INT 4B - Virtual DMA Specification - LOCK DMA REGION
    AX = 8103h
    DX = flags (see #03220)
    ES:DI -> DMA descriptor structure (see #03221,#03222,#03223)
    Return: CF clear if successful
    DDS physical address field filled in
    DDS buffer ID field filled (0000h if no buffer allocated)
    CF set on error
    AL = error code (see #03218)
    DDS region size field filled wth maximum contiguous length in bytes
    BUGS: Windows 3.0 does not correctly support automatic remapping or copying
    in enhanced mode
    Windows 3.0 in enhanced mode does not return a correct code on error

    Именно на этой функции у меня и висла прога под 98-й виндой ;)

    Добавлено
    Цитата cppasm @
    Даже все современные ПК на базе х86 считаются IBM-совместимыми, и так оно по сути и есть.
    А теперь подумай, почему они считаются совместимыми? Да потому, что они способны выполнять код 8086-го процессора, который и назывался IBM PC. Но с программами немножко по другому. Если твоя программа сможет выполняться на 8086-м, то это IBM PC совместимая прога, если же она расчитана на более совершенные модели процессоров/систем, то это уже x86-совместимость. Так что andriano прав.
      Можно подробнее о функции
      mov ax,4309h
      int 2Fh
        ExpandedWrap disabled
          --------m-2F4309-----------------------------
          INT 2F U - HIMEM.SYS v3.09+ - GET XMS HANDLE TABLE
                  AX = 4309h
          Return: AL = 43h if function supported
                      ES:BX -> XMS handle table (see #02747)
          Note:   HIMEM.SYS v3.09 is part of MS-DOS 6.0.
          SeeAlso: AX=4308h
           
          Format of XMS handle table:
          Offset  Size    Description     (Table 02747)
           00h    BYTE    ??? (01h in HIMEM.SYS v3.09)
           01h    BYTE    size of one handle descriptor
           02h    WORD    number of handles (default = 20h)
           04h    DWORD   pointer to XMS handle array (see #02748)
          SeeAlso: #02777
           
          Format of XMS handle descriptor [array]:
          Offset  Size    Description     (Table 02748)
           00h    BYTE    flag
                          01h=free, 02h=used, 04h=in pool but not associated with any EMB
           01h    BYTE    lock count (00h=unlocked)
           02h    DWORD   address of XMS block in KB (shift left by 10 for abs. address)
           06h    DWORD   size of XMS block in KB
          Функция mov ax,4309h int 2Fh прекрасно работает на XMS v3+
          Существует ли чтонибуть подабное для старых версий (например XMS v2)
          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,0238 ]   [ 15 queries used ]   [ Generated: 28.03.24, 10:23 GMT ]