Поместить данные в другой сегмент используя virtual

Тема в разделе "WASM.ASSEMBLER", создана пользователем hakerkirik, 5 авг 2008.

  1. hakerkirik

    hakerkirik New Member

    Публикаций:
    0
    Регистрация:
    24 мар 2005
    Сообщения:
    28
    Мне необходимо, чтобы при загрузке программы данные из секции директивы Virtual были помещены в другой сегмент. Как это можно реализовать? Я просто так и не понял: Virtual может работать с реальными адресами или нет.
    Т.е надо что-то типа этого:
    Код (Text):
    1. Data_Seg equ 2000h
    2. virtual Data_Seg * 10h + 100h  ; 100h - смещение в сегменте 2000h
    3. ...
    4. ...
    5. end virtual
    Помогите разобраться, пожалуйста.
     
  2. Barbos

    Barbos Slavon

    Публикаций:
    0
    Регистрация:
    13 ноя 2007
    Сообщения:
    280
    Адрес:
    Kharkov
    Что то не понял. Тебе надо после загрузки сделать инит каких то данных в сегменте типа "BSS"?
    А Virtual я сам не знаю че за директива. Че за пакет хоть? В MASM я такого не видел.
     
  3. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    Это директива для препроцессора fasm. Не думаю что она поможет с проблемой ТС.
     
  4. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    virtual может работать с любыми адресами, но не может где-либо сохранять данные, кроме текущего "воображаемого" пространства. Нужно записать данные в нужный сегмент явно, т.е. программно, или, если сегмент находится в пределах твоего программного образа, можно использовать директиву store.
     
  5. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Простой пример.
    Код (Text):
    1. virtual at 0x500
    2. var dw ? ; или константа - эффект тот же
    3. end virtual
    4.  
    5. xor ax,ax
    6. mov ds,ax
    7. mov [var],VALUE ; запись VALUE в 0:0x500
    var можно было объявить и так: label var word at 0x500