Изпълними 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.