динамическая память

Тема в разделе "WASM.ASSEMBLER", создана пользователем env0der, 28 сен 2004.

  1. env0der

    env0der New Member

    Публикаций:
    0
    Регистрация:
    28 сен 2004
    Сообщения:
    5
    Как запросить в tasm'e память на время выполнения программы?



    То бишь, что бы у меня допустим buffer db 64000 dup(0) не занимал место в .exe-шнике.



    Спасибо.
     
  2. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    А на что секция .DATA? ?
     
  3. env0der

    env0der New Member

    Публикаций:
    0
    Регистрация:
    28 сен 2004
    Сообщения:
    5
    Ну так я и пишу:

    .data

    buffer db 64000 dup(0)

    ....

    бла бла бла



    Только вот exe-файл в результате занимает 65кб. А если убрать обьявление buffer, то 1кб.

    Потому и спрашиваю.
     
  4. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    В масме .data - инициализированные, а .data? - неинициализированные "?" в тасме тоже че нить должно быть с "?"
     
  5. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    И это вы называете ДИНАМИЧЕСКОЙ памятью??? Брысь за парты. В первый класс. Программеры, ха-ха.
     
  6. n0p

    n0p 10010000b

    Публикаций:
    0
    Регистрация:
    7 май 2003
    Сообщения:
    256
    Адрес:
    Новосиbeerск
    Для выделения памяти на 64к целесообразно использовать функции типа VirtualAlloc. А также не лишним будет почитать Рихтера, хотя бы разделы про использование памяти. А использовать виртуальную секцию под такие объемы по меньшей мере непрактично. Я в нее обычно пишу хэндлы кусков, но никак не сами куски.
     
  7. env0der

    env0der New Member

    Публикаций:
    0
    Регистрация:
    28 сен 2004
    Сообщения:
    5
    Тогда скажите как это правильно называется?

    Я и так, если можно так выразится, "в первом классе". Потому и вопросы такие задаю.
     
  8. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    Правильно называется как n0p сказал - это виртуальная секция. Но сама концепция в корне не верна. Память надо ЗАПРАШИВАТЬ у операционной системы по необходимости! Для этого служат специальные функции типа упомянутой уже VirtualAlloc.
     
  9. env0der

    env0der New Member

    Публикаций:
    0
    Регистрация:
    28 сен 2004
    Сообщения:
    5
    Хорошо, а как запросить память у DOS'a?
     
  10. infern0

    infern0 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2003
    Сообщения:
    811
    Адрес:
    Russia
    mov ah,48h ;get memory

    mov bx, needed_size_in_para ; 16-bytes

    int 21h

    jc @@error

    ; ax -> SEGMENT of allocated memory block ptr

    mov [allocDataSeg], ax

    push ax

    pop es

    ...



    push [allocDataSeg]

    pop es

    mov ah,49h ; free memory

    int 21h

    ...
     
  11. env0der

    env0der New Member

    Публикаций:
    0
    Регистрация:
    28 сен 2004
    Сообщения:
    5
    Вот спасибо! : )

    А не подскажешь, где взять описание всех ф-ий 21го прерывания?
     
  12. AsmGuru62

    AsmGuru62 Member

    Публикаций:
    0
    Регистрация:
    12 сен 2002
    Сообщения:
    689
    Адрес:
    Toronto
  13. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    volodya

    Ты прав, не подумал, надо дважды было прочитать :dntknw:
     
  14. infern0

    infern0 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2003
    Сообщения:
    811
    Адрес:
    Russia
    env0der

    есть такая штука - ralf braun's interrupt list - рулез неимоверный. А на русском есть отличная штука - thelp - типа теперешних chm-ок.