почему когда выполняеться программа (*.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) правильно ?) что это за мусор между "концом" проги и сегмента...
Это неинициализированные данные. Там может быть что угодно, например, оставшееся от прошлых программ. Загрузчик их не обнуляет, ибо нафига тратить лишние силы на ненужные вещи? Если программе действительно нужны нули, она может явно обнулить нужные участки. (В случае COM-программ вся память, начиная с сегмента программы, считается принадлежащей ей.)
Не-а. Память до сегмента программы принадлежит операционной системе (DOS-у), всяким другим программам (command.com), BIOS'у (самое начало) и нагло распоряжаться не своей памятью чревато... процессор этого не запрещает (в отличие от защищённого режима), но всё равно не стоит...