
Деякі оператори, зумовлені імена, директиви і команди асемблера 80x86(8088) зумовлені імена
1. $ - програмний лічильник. Цей символ відзначає поточна адреса в поточному сегменті. Корисний при визначенні довжини ланцюжків байтів або рядків.
text DB 'This string has NN letters'
NN = $ - text; NN = довжині рядка text (кількості байтів
у цьому рядку). Не плутати частину рядка '..NN..' і константу NN!
2. @data - адреса початку сегменту даних.
....
mov ах,@data
mov ds,ax;
у сегментному регістрі DS тепер адреса сегменту даних.
3. ??date ??time, ??filename - ці імена під час трансляції замінюються, відповідно на поточних дату, час і ім'я файлу у форматі ASCII.
Оператори
1. () - дужки, визначають порядок обчислень
2. [] - наприклад [BX] означає вміст елементу пам'яті з адресою в регістрі bx. Ознака косвенной адресации.
3. +, - *, / - оператори складання, віднімання, множення і ділення.
mov ах, (2 * 3 + 8 / 2) - 2; у регістр ах буде поміщено число 8.
4. MOD - ділення по модулю. Дає залишок.
5. SHL,SHR - зрушення операнда вліво, управо.
mov si, 01010101b SHR 3; у регістр SI буде завантажене число 0Ah (00001010).
6. NOT - побітова інверсія.
7. AND,OR,XOR - операції Ошибка! Недопустимый объект гиперссылки..
mov dl, (10d OR 5d) XOR 7d; (dl) буде рівне 8.
8. : - перепризначення сегменту.
mov dl[es:bx]; помістити в dl байт даних з сегменту es і віддалений від його початку на (bx) байтів (зсув).
9. OFFSET - оператор отримання зсуву адреси відносно початки сегменту (тобто кількості байтів від початку сегменту до ідентифікатора адреси).
mov bx, OFFSET table
Директиви (псевдооператори)
1. : - визначає близьку мітку (в межах сегменту).
jmp lbl .... ....
lbl: ....
2 . = - привласнює символічному імені значення виразу.
videoram = 0B800h; привласнення videoram = 0B000h;
3. .CODE - визначає початок кодового сегменту, тобто сегменту, де розташовуються коди програми.
4. .DATA - визначає початок сегменту даних.
5. DB,DW - директиви резервуючі один або декілька байтів: DB, або одне або декілька слів: DW.
....
.DATA
fibs DB 1,1,2,3,5,8,13
rus DB 'Турбо Асемблер'
buf DB 80 DUP(0);резервируется 80 байтів, кожен обнуляється
int DW 65535;в двох байтах розташовується число FFFFh.
Array DW 100 DUP (0);резервируется 100 слів
6. END - позначає кінець програми.
....
.CODE
MYPROG:....; точка входу (початок програми).
....; команди програми
....
END MYPROG
7. ENDM - закінчення блоку або макроозначення
8. ENDP - позначає кінець підпрограми.
9. EQU - привласнює символічному імені або рядку значення виразу.
BlkSize EQU 512
BufBlks EQU 4
BufSize EQU BlkSize * BufBlks
10. LABEL - визначає мітку відповідного типу.
....
.DATA
m_byte LABEL BYTE;метка m_byte типу BYTE дозволяє тепер
m_word DW 0;иметь доступ окремо до кожного байта даних
.CODE;m_word типу WORD
....
mov [m_word],0204h
add' [m_byte],'0;теперь у m_word зберігається код
add' [m_byte+1],'0;3234h,ASCII код '0' рівний 30h
11. LOCAL - визначає мітки усередині макроозначень як локальні і в кожному макророзширенні замість них асемблер вставляє унікальні мітки: ??XXXX, де XXXX = (0000...FFFF)h. Чому ??XXXX ? Та тому що нікому не повинно прийти в голову починати символічне ім'я ??, і транслятор сміливо може генерувати мітки не боячись збігів.
12. MACRO - задає макроозначення.
Swap MACRO а,b; а,b - параметри макро (елементи пам'яті)
mov ах,b;данное макрооопределение дозволяє робити
mov bx,a;обмен даними між елементами пам'яті, в
mov а, ах;отличие від команди xchg ;
mov b,bx;нельзя mov а,b;
ENDM
Виклик цього макросу проводиться командою: Swap m,n
13. .MODEL - визначає розмір пам'яті під дані і код програми.
.MODEL tiny;под програму, дані і стек відводиться один загальний сегмент (64 Kb).
14. PROC - визначає початок подрограммы.
Print PROC NEAR
;тут команди підпрограми
Print ENDP
....
call Print;вызов подпрграммы.
15. .STACK - визначає розмір стека.
.STACK 200h; виділяє 512 байтів для стека.
16. .RADIX base - визначає систему числення за умовчанням, де base - підстава системи числення: 2, 8, 10, 16.
.RADIX 8
oct = 77; oct рівне 63d.
17. ; - початок коментаря.