Консультация № 19468
10.04.2005, 13:54
0.00 руб.
0 2 2
Здраствуйте,уважаемые эксперты!!!
Подскажите мне пожалуйста.
Как мне на ассемблере сделать exe файл а не com файл.
И отличается структура программы com файла и ехе файла если да то покажите структуру ехе файла!!!
Спасибо заранее!!!

Обсуждение

Неизвестный
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 сегмент (...): совсем другие данные или код
...: по мере надобности
Неизвестный
11.04.2005, 17:01
общий
это ответ
Здравствуйте, newinfo2005!
О различиях в структуре лучше почитать в книгах
Посмотрите, например: http://www.kalashnikoff.ru/Assembler/
В приложении шаблон простейшего EXE файла, создаваемого с использованием упрощенных директив сегментации
Отличия:
1) модель памяти лучше tiny лучше не использовать, а small - для начала
2) org 100h - не нужен - система сама добавит блок при загрузке
3) несколько сегментов - и нужно настраивать DS перед тем, как обратиться к сегменту данных
4) О выходе Вам написали - через 4Ch прерывания 21h
5) желательно определить сегмент стека .stack

Приложение:
.model small.codestart: mov ax, @data ; или mov ax, DGROUP mov ds, ax ; настройка ds mov ax, 4c00h; 4c - номер функции, 00 - код завершения int 21h.data msg db ‘Program‘ ; тут даные Вашей программы x dw 1234h.stack 100h ; параметр размер стекаend start ; точка входа в программу - теперь может быть в любом месте программы
Форма ответа