Изпълними COM файлове, тяхната разлика от EXE файлове, примери
Асемблер е език за програмиране от ниско ниво и програма, написана на Асемблер, трябва да премине през три етапа на обработка на компютър, точно както програма, написана на всеки друг език за програмиране.
Етап I - трансформация на изходния модул в обектен - асемблиране. Може да има 1 или повече изходни модула.
III етап – изпълнение на програмата.
Има два вида изпълними модули (изпълними файлове): exe файл (.exe) и com файл (.com). В резултат на втория етап се получава изпълним exe файл, за да се получи com файл, трябва да се извърши още един етап на обработка - конвертиране на exe файла в com файл.
Ако сравним EXE и COM файлове за една и съща програма, тогава вторите файлове са с поне 512 байта по-малки. Но от друга страна, първите файлове могат да заемат произволен брой сегменти, за разлика от вторите. Затова се препоръчва да се пишат малки програми под COM изпълними файлове.
Разлики между .exe файл и .com файл :
com файловете нямат блок за стартиране и следователно заемат по-малко място от exe файл.
exe файлът може да заема произволно количество RAM. com може да заема само един сегмент от паметта.
Стекът се създава автоматично от операционната система, така че потребителят не трябва да отделя място за него. Данните се намират на същото място като програмата.
Пример за създаване на .com файл.
ЗАГЛАВЛЕНИЕ Prog_Com-файл
Страница 60, 85
Сeg Segment Para ‘Code’
ПРИЕМЕ SS:CSeg, DS:CSeg, CS:CSeg
Орг. 100 часа
Старт: JMP Main
St1 DB ‘String1’, 13, 10, ‘$’
St2 DB ‘String2’, ‘$’
Основна процедура
MOV AH, 9
LEA DX, St1
вътреш21h
LEA DX, St2
Int 21h
MOV AH, 4CH
Int 21h
Mainendp
CSeg завършва
Край Начало
Мъничък модел
Код
JMP Met
St1 DB ‘String1’, ‘$’
Среща: MOV AH, 09h
LEA DX, St1
Int 21h
MOV AH, 4Ch
Int 21h
EndMet
Начална процедура
MOV AH, 9
LEA DX, St1
Int 21h
MOV AH, 4Ch
Int 21h
Beg endp
St1 DB ‘String1’, ‘$’
Край на началото
• Не всеки изходен файл отговаря на изискванията за .com файл.
• Малките програми се препоръчват да бъдат форматирани като com-файлове.
• Изходен файл, записан като .com файл, не може да бъде изпълнен като .exe файл.
19) Команди за двоична аритметика: събиране, изваждане, умножение и деление
Събирането (изваждането) на числа без знак се извършва по правилата, подобни на приетите в математиката събиране (изваждане) по модул 2 k. В компютърните науки, ако резултатът е повече от k бита, тогава k+1 се изпраща на CF.
X + Y = (X + Y) mod 2 k = X + Y и CF = 0, ако X + Y k
X + Y = (X + Y) mod 2 k = X + Y -2 k и CF = 1, ако X + Y>= 2 k
Например, работейки с байтове (k=8), получаваме:
250 + 10 = (250 + 10) mod 2 8 = 260 mod 256 = 4
260 = 1 0000 01002, CF = 1, резултатът е 0000 01002 = 4
X - Y = (X - Y) mod 2 k = X - Y и CF = 0, ако X>= Y
X - Y = (X - Y) mod 2 k = X + 2 k -Y и CF = 1, ако X 8 + 1 - 2 = 257 - 2 = 255, CF = 1
Добавянето (изваждането) на числа със знак се свежда до добавяне (изваждане) с помощтадопълнителен код.
X = 10n - X
В байт: -1 = 256 - 1 = 255 = 111111112
-3 = 256 – 3 = 253 = 111111012
3 + (-1) = ( 3 + (-1)) mod 256 = (3+255) mod 256 = 2
1 + (-3) = (1 + (-3)) mod 256 = 254 = 1 11111102
Отговорът е получен в допълнителен код, следователно резултатът се получава в байт по формулатаX = 10 n - X , т.е.
x \u003d 256 - 254 \u003d 2 и знак минус. Отговорът е -2.
Препълване се получава, ако има прехвърляне от high digital към signed, но не и от signed и обратно, тогава OF = 1. Програмистът сам решава кой флаг да анализира OF или CF, като знае с какви данни работи.
Аритметичните операции променят стойността на флаговете
OF, CF, SF, ZF, AF, PF.
В асемблер, командата "+".
ДОБАВИ OP1, OP2 ; (OP1) + (OP2) ® OP1
ADC OP1, OP2 ; (OP1) + (OP2) + (CF) ® OP1
XADD OP1, OP2 ; i486 и >
(OP1) « (OP2) (размяна), (OP1) + (OP2) ® OP1
INC OP1 ; (OP1) + 1 ® OP1
В командата на асемблер „-“
SUB OP1, OP2 ; (OP1) – (OP2) ® OP1
SBB OP1, OP2 ; (OP1) – (OP2) – (CF) ® OP1
DEC OP1 ; (OP1) – 1 ® OP1.
X=1234AB12h, Y=5678CD34h, X+Y=
MOV AX, 1234h
MOV BX, 0AB12h
MOV CX, 5678h
MOV DX, 0CD34h
ДОБАВИ BX, DX
ADC AX, CX
X – Y =SUB BX, DX
SBB AX, CX
ADDAX, mas[SI]; прав с индексиране
95h + 82h = 117h 95 = 100101012 82 = 100000102
100101012 + 100000102 = 1000101112, 10010101
CF = 1, OF = 1, SF = 0, ZF = 0, AF = 0, PF = 1. 10000010
Пример2: 1 00010111
MOV AL, 9h
SUB AL, 5h
9h - 5h = 4h 5 = 00000101 -5 = 11111011 9 = 00001001
9 + (-5) = 11111011 + 00001001 = 1 0000 0100
CF = 1, OF = 0, SF = 0, ZF = 0, AF = 1, PF = 0.