Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЭВМ ответы копия.docx
Скачиваний:
5
Добавлен:
20.09.2019
Размер:
100.61 Кб
Скачать

Непосредственные операнды

Использование непосредственного операнда более эффективно, чем

oпределение числовой константы в сегменте данных и организация cсылки на

нее в операнде команды MOV

Длина непосредственной константы зависит от длины первого операнда.

однако, если непосредственный операнд короче, чем получающий операнд

то ассемблер расширяет непосредственный операнд до двух байт.

Непосредственные форматы

--------------------------

Непосредственная константа может быть шестнадцатиричной, напpимер,

0123H; десятичной, например, 291 (которую ассемблер конвертирует в

шест.0123); или двоичной, например, 100100011В (которая преобразуется в

шест. 0123).

Ниже приведен список команд, которые допускают непосредственные

операнды:

Команды пересылки и сравнения: MOV, CMP.

Арифметические команды: ADC, ADD, SBB, SUB.

Команды сдвига: RCL, RCR, ROL, ROR, SHL, SAR, SHR.

Логические команды: AND, OR, TEST, XOR.

Различия между программами в ехе и сом-файлах

cуществуют определенные различия между программой, выполняемой как

EXE-файл и программой, выполняемой как COM-файл.

Р а з м е р п р о г р а м м ы. EXE-программа может иметь любой

размер, в то время как COM-файл ограничен размером одного сегмента и не

превышает 64К. COM-файл всегда меньше, чем соответствующий EXE-файл; одна

из причин этого - отсутствие в COM-файле 512-байтового начального блока

EXE-файла.

С е г м е н т с т е к а. В EXE-программе определяется сегмент стека,

в то время как COM-программа генерирует стек автоматически. Таким образом

при создании ассемблерной программы, которая будет преобразована в

COM-файл, стек должен быть опущен.

С е г м е н т д а н н ы х. В EXE программе обычно определяется

сегмент данных, а регистр DS инициализируется адресом этого сегмента. В

COM-программе все данные должны быть определены в сегменте кода. Ниже

будет показан простой способ решения этого вопроса.

И н и ц и а л и з а ц и я. EXE-программа записывает нулевое слово в

стек и инициализирует регистр DS. Так как COM-программа не имеет ни стека,

ни сегмента данных, то эти шаги отсутствуют. Когда COM-программа начинает

работать, все сегментные регистры содержат адрес префикса программного

сегмента (PSP), - 256-байтового (шест. 100) блока, который резервируется

операционной системой DOS непосредственно перед COM или EXE программой в

памяти. Так как адресация начинается с шест. смещения 100 от начала PSP,

то в программе после оператора SEGMENT кодируется директива ORG 100H.

О б р а б о т к а. Для программ в EXE и COM форматах выполняется

ассемблирование для получения OBJ-файла, и компановка для получения

EXE-файла. Если программа создается для выполнения как EXE-файл, то ее уже

можно выполнить. Если же программа создается для выполнения как COM-файл,

то компановщиком будет выдано сообщение:

Warning: No STACK Segment

(Предупреждение: сегмент стека не определен)

Это сообщение можно игнорировать, так как определение стека в

программе не предполагалось. Для преобразования EXE-файла в COM-файл

используется программа EXE2BIN. Предположим, что EXE2BIN имеется на

дисководе A, а скомпонованный файл по имени CALC.EXE - на дисководе B.

Введите

EXE2BIN B:CALC,B:CALC.COM

Так как первый операнд всегда предполагает EXE файл, то можно не

кодировать тип EXE. Второй операнд может иметь другое имя (не CALC.COM).

Если не указывать тип COM, то EXE2BIN примет по умолчанию тип BIN, который

впоследствии можно переименовать в COM. После того как преобразование

будет выполнено можно удалить OBJ- и EXE-файлы.

Если исходная программа написана для EXE-формата, то можно, используя

редактор, заменить команды в исходном тексте для COM файла.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]