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