p>
Так як вся програма міститься в одному сегменті, перед виконанням програми все сегментні регістри містять як значення адреса префікса програмного сегмента, блоку PSP
PSP - 256 байтний блок, який міститься як в exe-файлі, так і в com-файлі, і так як адресу першої виконуваної команди відстоїть на 256 байтів від адреси початку сегменту (100h), то відразу після директиви ASSUME використовується спеціальна директива
org 100h, що здійснює обхід префікса програмного сегмента.
Приклади програми, що задовольняє вимогам створення виконуваного com-файлу.
) З використанням стандартних директив сегментації:
Prim Сom-файл60, 85
СSeg Segment Para Сode SS: CSeg, DS: CSeg, CS: CSeg100h: JMP MainDB String1, 13, 10, $ DB String2, $ ProcAH, 9DX, St121hDX, St221hAH, 4CH21hendpends Start
2) З використанням точкових директив сегментації, дані розміщені перед програмою:
. Model tiny
. CodeMetDB String1, $: MOV AH, 09hDX, St121hAH, 4Ch21h Met
3) Частковий вихідного тексту програми для створення com-файлу, коли дані розміщені після програми:
ProcAH, 9DX, St121hAH, 4Ch21hendpDB String1, $ beg
Зауваження:
Не кожен вихідний файл задовольняє вимогам com-файлу.
Невеликі за обсягом програми рекомендується оформляти як com-файл.
Вихідний файл, написаний як com-файл, не може бути виконаний як EXE-файл
Арифметичні операції
Додавання (віднімання) беззнакових чисел виконується за правилами аналогічним складання (вирахування) по модулю 2 k, прийнятим в математиці. У математиці k +1 розряд втрачається, відкидається, а в інформатиці, якщо в результаті більш k розрядів, то прапор CF встановлюється в 1.
+ Y=(X + Y) mod 2 k=X + Y, CF=0, якщо X + Y <2 k + Y=(X + Y) mod 2 k=X + Y- 2 k, CF=1, інакше
Приклад: у байті
250 + 10=(250 +10) mod 2 серпні=260 mod 256=4
=100000100 2, CF=1, результат 00000100 2=4
X - Y=(XY) mod 2 k=XY, CF=0, якщо X> Y
X + Y=(X + Y) mod 2 k=X +2 k-Y, CF=1, інакше
Приклад: у байті
1 - 2=1 - 2 серпня - 2=275 - 2=255, CF=1
Додавання (віднімання) знакових чисел зводиться до додавання (віднімання) з використанням додаткового коду.
=10 n - | X |
У байті:
- 1=256 - 1=255=11111111 2
=256 - 3=253=11111101 2
3 + (- 1)=(3 + (- 1)) mod 256=258 mod 256=2
+ (- 3)=(1 + (- 3)) mod 256=256 - 254=11111110 2=- 2
13. Команди додавання і віднімання в Асемблері
В Асемблері команди складання:
1) ADD OP1, OP2; OP1 + OP2 ® OP1
2) ADC OP1, OP2; OP1 + OP2 + CF ® OP1
3) XADD OP1, OP2; для i486 і вище OP1" OP2 і потім OP1 + ...