11.04.2005, 10:11
общий
это ответ
Здравствуйте, newinfo2005!
1. Добавь параметр
"STASK xxx";xxx-требуемый размер стека (для начала ставь как можно больше (~40000) не ошибешься)
или создай сам сегмент стека...
При линковке (tlink) убери ключ /t
Не используй конструкцию для определения ds, es из cs - в ехе они не обязательно равны!
То есть Ds, cs, es могут указывать на различные сегменты (это в ответе на второй вопрос)...
Для выхода из программы не используй ret, int 20h, вместо них используй mov ah,4ch;int 21h
Точка старта может быть любой - т.е. можно не использовать "org 100h"
2. По большомй счету - СОМ программа - частный случай Ехе программы... Единой структуры в памяти нет... Просто вся СОМ программа должна быть в одном сегменте памяти, что ограничивает размер программы 64К... А в Ехе-программе может быть несколько сегментов по 64К, т.е. ее размер неограничен... Точка старта программы может быть любой, а не только 100Н - она прописываеться в заголовке ехе файла... В ехе программе все данные и код могут лежать в любых местах памяти независимо друг от друга... То есть, все то, что делаеться в Ком-программе с помощью манипулций с памятью - в Ехе уже готовиться операционкой при загрузке программы... Ехе программа может иметь в себе части для выполнения в разных операционках - Дос или Виндовс, и процессорах - для этого в файл просто добавляеться дополнительный заголовок...
Структура com-программы:
1 сегмент (в каком-либо районе памяти): код программы, данные, стек
Структура exe-программы:
1 сегмент (в каком либо районе памяти): основной код программы
2 сегмент (...): дополнительные процедуры к основному коду
3 сегмент (...): данные
4 сегмент (...): другие данные
5 сегмент (...): Стек
6 сегмент (...): еще данные
7 сегмент (...): совсем другие данные или код
...: по мере надобности