Всё просто от английского «executive» — «исполнительный», отсюда и расширение от сокращения этого слова..
А расширение com — от сокращения «command» — «командный»..
Многие, если не все слова в программных терминах — это от английского, а тот имеет корни от латыни..
модератор выбрал этот ответ лучшим
комментировать
в избранное ссылка отблагодарить
Ракит ин Серге й [450K]
6 лет назад
Ну Вы же сами написали — «исполняемый файл», по-английски executive, или сокращенно exe. Соответственно, com — это сокращение от command, «командный файл», это не совсем одно и то же, что exe, что связано с наследием ОС MS DOS.
в избранное ссылка отблагодарить
Kevinus [13.4K]
Сыррожа [175K]
Все же есть отличие ДОС от ОС. И связано оно в основном с доступностью оперативной памяти и соответствующими возможностями «управляющей программы».
Как учили нас классики марксизма: «богатство общества определяется степенью свободы его членов». — 6 лет назад
Чем отличается Linux от Windows
Kevinus [13.4K]
Никаких отличий нет.
Как расшифровывается DOS? (только не путайте с DDOS)
Правильно! Disk Operating System, т.е. Дисковая Операционная Система, т.е. ОС. — 6 лет назад
Сыррожа [175K]
Не зря она имеет приставку «дисковая». У ней все что нужно для работы каждый раз подгружается именно с диска, а не берется из оперативки в отличие от настоящих ОС. Я уже не говорю про многопользовательность и многозадачность. — 6 лет назад
Ракитин Сергей [450K]
Ну вообще-то ей почти 40 лет и разрабатывалась она для компов, у которых изначально не было ничего, кроме дисковода, а памяти чуть больше, чем у калькулятора. — 6 лет назад
Kevinus [13.4K]
Что значит настоящая ОС? А другие Оси разве поддельные? Возьмите FreeBSD для примера, без гуя, черный экран и курсорчик моргающий сверху — это тоже поддельная ОС? Ибо без графического интерфейса? — 6 лет назад
Сыррожа [175K]
Заметьте, я написал «настоящих ОС», т.е во множественном числе. И нигде не говорил про наличие графического интерфейса, тем паче про поддельность. Хотя если говорить строго, то все *nix-ы являются подделкой настоящего UNIX (благо свободный доступ к исходным кодам позволяет это делать). Я говорил только про отличия ОС и ДОС (среди последних можно назвать еще и PC DOS).
ТщательнЕе надо быть! — 6 лет назад
alexm12 [259K]
2 Сыррожа
Если какая-то программа позволяет производить какие-то операции, то это операционная система, не смотря на ваше к ней отношение. Пусть даже это и CP-M, это не мешает ей быть операционной системой. — 6 лет назад
Источник: www.bolshoyvopros.ru
РАЗЛИЧИЯ МЕЖДУ ПРОГРАММАМИ COM и EXE ФАЙЛОВ
Существует два основных типа загрузочных программ: EXE и COM. Рассмотрим требования к EXE-программам. DOS имеет четыре требования для инициализации ассемблерной EXE-программы: 1) указать ассемблеру, какие сегментные регистры должны соответствовать сегментам, 2) сохранить в стеке адрес, находящийся в регистре DS, когда программа начнет выполнение, 3) записать в стек нулевой адрес и 4) загрузить в регистр DS адрес сегмента данных.
Windows 98 из-под Windows XP, или как работает ОБНОВЛЕНИЕ Windows?
Существуют определенные различия между программой, выполняемой как EXE-файл и программой, выполняемой как COM-файл.
1. Размер программы. EXE-программа может иметь любой размер, в то время как COM-файл ограничен размером одного сегмента и не превышает 64К. COM-файл всегда меньше, чем соответствующий EXE-файл; одна из причин этого — отсутствие в COM-файле 512-байтового начального блока EXE-файла.
2. Сегмент стека. В EXE-программе определяется сегмент стека, в то время как COM-программа генерирует стек автоматически. Таким образом при создании ассемблерной программы, которая будет преобразована в COM-файл, стек должен быть опущен.
3. Сегмент данных. В EXE программе обычно определяется сегмент данных, а регистр DS инициализируется адресом этого сегмента. В COM-программе все данные должны быть определены в сегменте кода.
4. Инициализация. EXE-программа записывает нулевое слово в стек и инициализирует регистр DS. Так как COM-программа не имеет ни стека, ни сегмента данных, то эти шаги отсутствуют. Когда COM-программа начинает работать, все сегментные регистры содержат адрес префикса программного сегмента (PSP),
— 256-байтового (шест. 100) блока, который резервируется операционной системой DOS непосредственно перед COM или EXE программой в памяти. Так как адресация начинается с шест. смещения 100 от начала PSP, то в программе после оператора SEGMENT кодируется директива ORG 100H.
5. Обработка. Для программ в EXE и COM форматах выполняется ассемблирование для получения OBJ-файла, и компоновка для получения EXE-файла. Если программа создается для выполнения как EXE-файл, то ее уже можно выполнить. Если же программа создается для выполнения как COM-файл, то компоновщиком будет выдано сообщение:
Warning: No STACK Segment
(Предупреждение: Сегмент стека не определен)
ПРИМЕР ПРОГРАММЫ
Программа преобразования двузначного шестнадцатеричного числа в символьном виде в двоичное представление.
Вход: исходное шестнадцатеричное число из двух цифр вводится с клавиатуры
Выход: результат преобразования помещается в регистр dl.
data segment para public “data”;сегмент данных
message db “Введите две 16-теричные цифры, $”
stk segment stack
db 256 dup (“?”);сегмент стека
code segment para public “code”;начало сегмента кода
main proc;начало процедуры main
mov ax,data;адрес сегмента данных в регистр ах
mov ds,ax;ax в ds
mov dx,offset message
xor ax,ax;очистить регистр ах
mov ah,1h;1h в регистр ah
int 21h;генерация прерывания с номером 21h
mov dl,al;содержимое регистра al в регистр dl
sub dl,30h;вычитание: (dl)=(dl)-30h
cmp dl,9h;сравнить (dl) с 9h
jle M1;перейти на метку М1, если dl
sub dl,7h;вычитание: (dl)=(dl)-7h
M1:;определение метки М1
mov cl,4h;пересылка 4h в регистр сl
shl dl,cl;сдвиг содержимого dl на 4 разряда влево
int 21h;вызов прерывания с номером 21h
sub al,30h;вычитание: (dl)=(dl)-30h
cmp al,9h;сравнить (al) c 9h
jle M2;перейти на метку М2, если al
sub al,7h;вычитание: (al)=(al)-7h
M2:;определение метки М2
add dl,al;сложение: (dl)=(dl)+(al)
mov ax,4c00h;пересылка 4с00h в регистр ax
int 21h;вызов прерывания с номером 21h
main endp;конец процедуры main
code ends;конец сегмента кода
end main;конец программы с точкой входа main
Строки 1-3 определяют сегмент данных. В строке 2 описана текстовая строка с сообщением «Введите две шестнадцатеричные цифры».
Строки 4-6 описывают сегмент стека, который является просто областью памяти длиной 256 байт, инициализированной символами «”?”». Отличие сегмента стека от сегментов других типов состоит в использовании и адресации памяти. В отличие от сегмента данных (наличие которого необязательно, если программа не работает с данными), сегмент стека желательно определять всегда.
Строки 7-36 содержат сегмент кода. В этом сегменте в строках 8-35 определена одна процедура main.
Строка 9 содержит директиву ассемблера, которая связывает сегментные регистры с именами сегментов.
Строки 10-11 выполняют инициализацию сегментного регистра DS.
Строки 12-14 выводят на экран сообщение message:
Строка 15 подготавливает регистр АХ к работе, обнуляя его.
Строки 16-17 обращаются к средствам операционной системы для ввода символа с клавиатуры. Введенный символ операционная система помещает в регистр AL.
Строка 18 пересылает содержимое AL в регистр DL. Это делается для того, чтобы освободить AL для ввода второй цифры.
Строка 19 преобразует символьную цифру в ее двоичный эквивалент путем вычитания 30h, в результате чего в регистре DL будет двоичное значения числа.
В строках 20-21 выясняется, нужно ли корректировать двоичное значение DL. Если оно лежит в диапазоне 0…9, то в DL находится правильный двоичный эквивалент введенного символа шестнадцатеричной цифры. Если значение в DL больше 9, то введенная цифра является одним из символов A,B,C,D,E,F. В первом случае строка 21 передаст управление на метку М1.
В строках 24-25 значение в DL сдвигается на 4 разряда влево, освобождая место в младшей тетраде под младшую шестнадцатеричную цифру.
В строке 26 в регистр AL вводится вторая шестнадцатеричная цифра.
В строках 27-29 выясняется, попадает ли двоичный эквивалент второго символа шестнадцатеричной цифры в диапазон 0…9. Наша вторая цифра не попадает в диапазон, поэтому для получения правильного двоичного эквивалента нужно произвести дополнительную корректировку. Это делается в строке 38.
Строки 33-34 предназначены для завершения программы и возврата управления операционной системе.
СТРУКТУРЫ
Описание типа структуры
Структура — это составной объект, занимающий несколько соседних ячеек памяти. Это тип данных, состоящий из фиксированного числа элементов разного типа. Компоненты структуры называются полями, они могут быть разного типа (размера) — байт, слово и т. д. Поля именуются, доступ к полям осуществляется по именам. Для использования структур в программе необходимо выполнить 3 действия.
1. Задать шаблон структуры. По смыслу это означает определение нового типа данных, который впоследствии можно использовать для определения переменных этого типа.
2. Определить экземпляр структуры. Этот этап подразумевает инициализацию конкретной переменной с заранее определенной структурой.
3. Организовать обращение к элементам структуры.
Существует разница между описанием структуры в программе и ее определением. Описание структуры в программе означает лишь указание компилятору ее схемы или шаблона; память при этом не выделяется. Компилятор извлекает из этого шаблона информацию о расположении полей структуры и их значениях по умолчанию. Определение структуры означает указание транслятору на выделение памяти и присвоение этой области памяти символического имени. Описать структуру можно только один раз, а определить любое количество раз.
Описание шаблона структуры.
Прежде чем использовать структуру, надо описать ее тип — указать, сколько в ней полей, какие имена у полей и т. д. Описание типа структуры выглядит так:
Описание типа открывает директива STRUC, где указывается имя, которое дали типу структуры. Это же имя должно быть в директиве ENDS. Между этими двумя директивами может быть указано любое число директив, описывающих поля структуры.
Например, тип структуры DATE из трех полей Y (год), M(месяц), D(день) можно описать так:
Описание типа структуры носит чисто информационный характер, по нему ассемблер ничего не заносит в машинную программу, поэтому такое описание можно размещать в любом месте программы, но обязательно до описания переменных этого типа.
После того как описан тип структуры, можно определять в программе переменные этого типа, отводить под них память. Такие переменные называются переменными-структурами или просто структурами. Описываются они с помощью директив следующего вида:
Пример описания переменных-структур:
Y | M | D |
? | ||
? | ||
? |
Это директивы особого рода. До этого мы рассматривали директивы, названиями которых были служебные слова, а здесь названием является имя DATE. Каждая такая директива описывает одну переменную, имя которой указывается в начале директивы.
DT2 DATE эквивалентно DT2 DATE
DT3 DATE эквивалентно DT3 DATE
Одной директивой можно описать сразу несколько структур, т. е. можно описать массив, элементами которого являются структуры. Например по директиве
DTS DATE 10 dup (<>)
описывается массив из 11 структур типа DATE, причем поля первой из них будут иметь начальные значения: 2004, 12, 5, а остальные десять структур получают один и тот же набор начальных значений, взятых по умолчанию: 2004, 3.
Описав тип структуры и переменные этого типа, получаем право работать с этими переменными-структурами. Как единое целое структуры обрабатываются редко, обычно они обрабатываются по полям. чтобы сослаться на поле структуры, надо использовать конструкцию вида
Такая конструкция обозначает ту ячейку памяти, которую занимает указанное поле указанной переменной. Встречая эту конструкцию, ассемблер заменяет ее на адрес данной ячейки.
Пример. Если в переменной DT1 хранится мартовская дата, то требуется записать сюда дату следующего дня года.
jne FIN; не март — FIN
je APRL; 31 марта — APRL
inc DT1.D; следующий день в марте
APRL: mov DT1.M, 4; замена 31 марта 1 апреля
ОБЪЕДИНЕНИЯ
Объединение — тип данных, позволяющий трактовать одну и ту же область памяти как данные, имеющие разные типы и имена. Описание объединений в программе напоминает описание структур, т. е. сначала указывается шаблон, в котором с помощью директив описания данных перечисляются имена и типы полей:
Отличие объединений от структур состоит в том, что при определении переменной типа объединения память выделяется в соответствии с размером максимального элемента. Обращение к элементам объединения происходит по их именам, но при этом нужно помнить, что все поля в объединении накладываются друг на друга. В качестве элементов объединения можно использовать и структуры.
ПРОЦЕДУРЫ
Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:
Источник: studopedia.ru
Файлы .com и .exe
В предыдущем примере рассматривался файл типа .COM. Однако
результатом процесса ассемблирования-редактирования связей является
обычно файл типа .EXE. Зачем нужен файл типа .COM, если проще
получить файл типа .COM?
У каждого из обоих типов файлов есть свои преимущества. И чтобы
принять обоснованное решение о том, какой из них предпочесть в
каждом конкретном случае, нужно представлять их отличия.
Главное различие между файлами типа .COM и типа .EXE связано с
форматом записи соответствующего объектного файла на дискете. Оба
типа файлов являются программами, записанными на машинном языке.
Программа, записанная в файле типа .COM может сразу выполняться.
DOS может непосредственно загрузить его в память машины с дискеты.
После этого DOS передает управление в сегмент памяти, отведенный
для команд, в точку со смещением 100H. Файл типа .EXE
непосредственно выполнен быть не может. У соответствующего
объектного файла, хранящегося на дискете, имеется заголовок. В нем
содержится информация, сгенерированная редактором связей. Наиболее
важная ее часть относится к информации, связанной с перемещением. В
то время, как у файла типа .COM перемещаем один сегмент команд, у
файла типа .EXE могут быть перемещены многие различные сегменты.
Это ограничивает максимальный размер файла .COM 64 кбайтами, если
только программа не подгружает еще и другие сегменты. Файл типа
.EXE может содержать ряд сегментов, которые динамически
перемещаются в пределах программной области.
В чем состоит перемещаемость? Во время ассемблирования
программа расположена в каком-то определенном месте памяти. Как
было ранее установлено, ассемблер автоматически начинает каждый
сегмент со смещением 0. В ассемблерных листингах рядом с некоторыми
адресами стоят символы R. Это означает, что данный адрес является
перемещаемым. Если программа сдвигается так, что ее начало будет
иметь смещение, отличное от 0, то упомянутый адрес должен быть
изменен. Обычно перемещением занимается редактор связей. Однако
пересчет значений некоторых адресов не может быть выполнен до
загрузки программы. В каждом файле типа .EXE имеется информация о
таких адресах.
Файл типа .COM не является перемещаемым. У такого файла
отсутствует информация, необходимая для перемещения. Вместо этого у
программы, составляющей файл типа .COM, должен быть перемещаем
сегмент команд. Это означает, что хотя сам сегмент команд можно
модифицировать, начальное смещение всегда должно быть одним и тем
же. В такой программе все смещения должны оставаться неизмененными.
Кроме того, от программиста требуется предусмотреть, чтобы при
любой операции с сегментными регистрами (например, запись в
сегментный регистр полученного значения) всегда производилось
обращение к регистру текущего сегмента команд. Примером правильной
программной последовательностью для записи в регистр DS текущего
значения сегмента команд будет:
PUSH CS
POP DS
Иногда может показаться заманчивым реализовать ту же операцию с
помощью следующей последовательности команд (предположим, что как и
в приведенной на Фиг. 5.6 программе имя сегмента команд — «CODE»)
MOV AX,CODE
MOV DS,AX
Для программного файла типа .COM эта запись будет неправильной.
В момент ассемблирования и редактирования связей сегментное
значение для сегмента CODE неизвестно. Оно определяется только при
загрузке программы. Поскольку файл типа .COM не может предоставить
загрузчику перечня всех сегментных ссылок (информация для
перемещения), то в данном случае программа будет выполняться
неправильно.
Между описываемыми типами файлов имеются различия в отношении
установки значений сегметных регистров и расположения стека. Для
файла типа .COM значения регистров CS, DS, ES и SS устанавливаются
DOS, равными такими, что они указывают на тот сегмент, в который
они загружают программу. Значение регистра SP устанавливается так,
чтобы он указывал на последнюю доступную в сегменте ячейку памяти.
Таким образом программа занимает начало, а стек — конец сегмента.
В головной метке файла типа .EXE задаются значения регистров
CS, IP, SS и SP. Значения регистров DS и ES DOS устанавливает таким
образом, чтобы они указывали на тот сегмент, в который загружается
программа. Регистр CS указывает на сегмент, который был
идентифицирован как сегмент содержащий стартовый адрес программы.
Если в файле типа .COM программа должна иметь начальное смещение в
сегменте команд равным 100H, то в программном файле типа .EXE
начальный адрес может иметь другое значение. Как показано ниже,
значение этого адреса может содержаться в операторе END:
END START_LOCATION
Это является указанием ассемблеру-редактору связей, что после
загрузки программы управление следует передать на метку
START_LOCATION.
В обоих типах файлов используется программный префикс PSP,
который образуют первые 100H байтов того сегмента, куда загружается
программа. В этой области памяти хранится специальная информация, о
которой говорилось при рассмотрении программы, приведенной на
Фиг. 5.6. В случае файла типа .EXE регистры DS и ES указывают на
эту область данных, тогда как значения регистров CS и SS
устанавливаются на соответствующих этапах
ассемблирования-редактирования связей. В случае файла типа .COM все
регистры указывают на PSP. Это обеспечивает обоим типам файлов
непосредственный доступ к информации, хранящейся в порядке
программного сегмента.
Преимущества файла типа .COM состоит в том, что в этом случае
регистр CS указывает на PSP, а в файле типа .EXE — нет. Прерывания
20H и 27H, связанные с завершением выполнения программы и передачей
управления DOS, требуют, чтобы во время прерывания регистр указывал
на PSP. В случае файла типа .EXE это осуществить сложно. К
счастью, следующая последовательность команд позволяет в
программном файле типа .EXE передать управление обратно DOS.
PROGRAM PROG FAR
PUSH DS ; запись сегмента с PSP
MOV AX,0
PUSH AX ; запись в стек смещения 0
.
RET
PROGRAM ENDP
В относящейся к PSP ячейке со смещением 0 содержится команда
INT 20H. Запись в стек состояния регистра DS и нуля устанавливает
значение адреса длинного возврата, равное адресу PSP со смещением
0. Выполнив команду возврата, программа перейдет к команде INT 20H.
Но к этому моменту в регистре CS уже будет храниться значение PSP,
и команда прерывания INT 20H возвратит управление DOS.
Для прерывания 27H, при котором завершается работа программы и
управление передается DOS с сохранением программы в памяти,
аналогичного способа реализации нет. Хотя имеются методы записи в
регистр CS правильного значения перед прерыванием 27H, обычно более
простым является организация программы в виде файла типа .COM.
И наконец, файл типа .COM занимает на диске меньше места, чес
файл типа .EXE с такой же как в файле типа .COM программой. Так как
у файла типа .COM отсутствует заголовок, то и места для него на
диске не требуется. При рассмотрении в следующем разделе программы
DEBUG будет изложен метод, позволяющий преобразовывать файл типа
.EXE в файл типа .COM.
Содержание
Источник: www.i-assembler.ru