ms dos получить 128кб памяти

Тема в разделе "WASM.ASSEMBLER", создана пользователем XshStasX, 23 дек 2010.

  1. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    как наиболее просто получить 128кб памяти под данные в мс дос ?
    как бы по идеи можно использовать два сегмента, но хотелось бы адресацию с использованием регистов edi,esi и при этом чтоб был реальный режим процессора.
     
  2. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.792
    XshStasX
    либо поставь перед тем местом, где планируется использовать edi, esi и т.д. .386 либо перед 16-разрядным кодом ставь db 66h то есть db 66h / mov ax,bx эквивалентно для 16-разрядного режима команде mov eax,ebx перед обращением к памяти ставь db 67h то есть db 67h / mov al,[si] соответствует mov al,[esi]
     
  3. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Mikl___ - как бы это ничего не даст т.к. в реальном режиме лимит сегмента равен 64К.
    Т.е. 32-битные регистры то использоваться будут, но при выходе за лимит получите исключение.
    А т.к. в реальном режиме исключения перекрываются в векторами прерываний, всё просто повиснет из-за того что в обработчик исключения передаётся код ошибки, а обработчик прерывания этого не ожидает -> несбалансированный стэк и зависание при выходе из обработчика.

    XshStasX почитай про Unreal Mode.
    Это тот же реальный режим, но лимиты сегментов увеличиваются до 4Гб.
    Если кратко - переходишь в PM, грузишь в сегментные регистры селекторы сегментов с лимитом 4Гб, возвращаешься в реальный режим.
    Лимиты сохраняются в теневой части сегментных регистров и получаешь реальный режим с сегментами в 4Гб.
     
  4. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    Это для лабы нужно, а реально получить два куска памяти по 64кб желательно рядом лежащих?
     
  5. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Получить реально - DOS выделит.
    Но для обращения надо будет сегментный регистр менять.
     
  6. baldr

    baldr New Member

    Публикаций:
    0
    Регистрация:
    29 апр 2010
    Сообщения:
    327
    XshStasX,

    Была такая малопопулярная ;) модель памяти huge, там после любого подёргивания указателей они нормализировались (приводились к виду навроде xxxx:000y, хотя как когда — Zortech C умело предсказывал телодвижения и корректировал указатели только когда припирало).