Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
12Лекція прог асм .doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
108.54 Кб
Скачать

Деякі оператори, зумовлені імена, директиви і команди асемблера 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.  ; - початок коментаря.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]