COM программы.

Префикс програмного сегмента (PSP)

Форматы испльняемых файлов

*.com – использ в MSDOS

*.exe – в некотор видах (MZ) MSDOS (ME)Win3.11 (PE) с Win95

*.coff и *.elf форматы ОС Unix

Исполн файл формата com хранится на диске в виде абсолютного образа памяти. Нет заголовка, остальн имеют формат и соответств заголовок

 

Занимает 256 б (100h) и всегда предшевст в памяти com или exe программе. ОС MS Dos загр для выполн

смещение содержимое
00h int 20h(CD 20)-заверш процесс на взоде долж быть сегм рег кодов CS=сегм адрес PSP
02h сегментн адрес верхн границы блока памяти выделен прогр (размер пам в параграфах-6б)
04h зарезервиров=0
05h длинный вызов диспетчера MS Dos
0Ah-15h (12 байт) предыд содерж векторов прерыван int 22h, int 23h, int 24h Нач адреса подпрогр обраб прер 22h – обраб заверш, 23 h-Ctrl-C, Ctrl-break; 24h-обраб критич ошиб
2Ch сегментн адрес блока окруж, в котор хран несколько ASCIIZ строк (зак 0) наслед от програм запуст дан програм
16h зарезервир
2Eh-5Bh зарезерв(измен прогр не должна)
5Ch FCB №1 блок управл файл №1
6Ch FCB №2 блок управл файл №2
80h хвост коменды и DTA-буфер обмена с диском хвост коменды – остат командн строки после имени программмы запустивщ даннную прогрю по смещ 80h наход длина хвоста без учета возвр каретки

 

При хранении на диске хранится абсл.образ памяти без имени.

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

0
Программа и данные
PSP

ss:sp

 

рост

адресов

cs100h
cs:0

ds:0

es:0

ss:0

Считаем, что прогр., данные, стек занимают <=64 кБайта.

Ук-ель стека загруж.в:SP (00000h или max)-2=FFFE

M{ss:sp} 0.

Требования к исходному тексту прогр.: чтобы она компоновщиком tlink могла преобразовываться в соm-файл.

Прогр.содержит не более 1 логичес.сегмента и не определяет стек. Вначале прогр.должна стоять псевдокоманда org 100h, чтобы первая исполнительная команда находилась по смещению .

Org 100h; устан.счетчик адреса при трансляции

Start:…. ;чтобы 1 исполн.команды наход.по 100h

end start

В программе не использ. операторы SEG и команды загр.сегментного рг именами сегмента.

.exe

X db?

mov ax,seg x

mov ex,ax

mov di,offset x

program segment

assume cs: program

ds: program

ss: program

org 100h

start: jmp main

x db ?

array y db 5 up(0)

main:…

//Загружать ds не нужно

mov ah, 4ch

int 21h или int 20h или ret;завершение

tasm program

tlink program/t