Неиспользуемые данные в программе

Тема в разделе "WASM.BEGINNERS", создана пользователем suriv, 12 дек 2007.

  1. suriv

    suriv New Member

    Публикаций:
    0
    Регистрация:
    12 дек 2007
    Сообщения:
    2
    почему когда выполняеться программа (*.com) то в сегменте помимо её полно всякого г**** ?
    ну т.е между последней инструкцией и концом сегмента забит чем-то ? почему нельзя весь сегмент отдать проге а неиспользуемые "адреса" забить нолями ?)
    ну вот например...

    mov ax,03h
    push cx
    pop cx
    int 20h

    вот как это выглядит при исполнении программы (в памяти)
    0000h-0100h: "служебная инф-ция"
    0100h: mov ax,03
    0103h: push cx
    0105h: pop cx
    0107h: int 20h
    0108h:
    .........
    тут всякое неиспользуемое гг
    ........
    FFFE: тут значение cx (т.к мы делали push cx)

    правильно ?)
    что это за мусор между "концом" проги и сегмента...
     
  2. diamond

    diamond New Member

    Публикаций:
    0
    Регистрация:
    21 май 2004
    Сообщения:
    507
    Адрес:
    Russia
    Это неинициализированные данные. Там может быть что угодно, например, оставшееся от прошлых программ. Загрузчик их не обнуляет, ибо нафига тратить лишние силы на ненужные вещи? Если программе действительно нужны нули, она может явно обнулить нужные участки. (В случае COM-программ вся память, начиная с сегмента программы, считается принадлежащей ей.)
     
  3. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    в принцепе в реальном режиме вся память считаецо принадлежащей ей:)
     
  4. diamond

    diamond New Member

    Публикаций:
    0
    Регистрация:
    21 май 2004
    Сообщения:
    507
    Адрес:
    Russia
    Не-а. Память до сегмента программы принадлежит операционной системе (DOS-у), всяким другим программам (command.com), BIOS'у (самое начало) и нагло распоряжаться не своей памятью чревато... процессор этого не запрещает (в отличие от защищённого режима), но всё равно не стоит...