Lectures / 06-07
.pdfДирективы определения данных: Примеры
Директивы определения символьных строк:
STR |
DB |
‘ZРВ’; |
Z по адресу STR |
STRZ |
DD |
‘PC’ ;P в старшем байте младшего слова |
Директивы определения адресных констант:
var3 |
dw |
var1 ; Адрес var1 как смещение |
var4 |
dd |
var1 ; Адрес var1 как segment:offset |
|
|
; (мл.байт=offset) |
Директива EQU
имя EQU выражение
Примеры: |
|
|
MAX_SIZE EQU 200 |
; константа |
|
CR EQU 0ВН |
; константа |
|
BET EQU AL[SI]+3 |
; адресное выражение |
|
СNT EQU CX |
; регистр |
|
MPY EQU MUL |
; мнемокод |
|
TAB EQU DS:[BP][SI] |
; адресное выражение |
|
ADD_AX2 EQU add ax,2 |
; целая команда |
Псевдооператор «=«
имя = числовое выражение
Примеры:
CONST = 56 ; аналогично CONST EQU 56
...
CONST = 57
...
CONST = CONST+1
Директива LABEL
имя LABEL тип
Примеры:
FCOM LABEL FAR
MOV DX, 0
B_TAB |
LABEL BYTE |
W_TAB |
DW 2E25H, 43H, 0015H |
Директива ORG
ORG выражение
Пример:
ORG 100H
Пример программы: V2 = V1 + 5
.model small |
|
|
|
|
|
.data |
|
|
|
|
|
V1 DW |
265 ; определить и инициализировать |
||||
V2 DW |
0 ; две переменные |
||||
.stack 80 |
|
|
|
|
|
.code |
|
|
|
|
|
|
|
сохранение |
|
||
START: PUSH DS |
|
|
|||
XOR AX,AX |
|
адреса возврата в |
|
||
PUSH AX |
|
DOS в стеке |
|
||
MOV AX, @data |
|
|
|
|
|
|
инициализация |
|
|
||
MOV DS, AX |
|
|
|||
|
регистра DS |
|
|
||
MOV AX, V1 |
|
|
|||
|
|
|
|
||
|
|
|
|
||
ADD AX, 5 |
; 5+V1 переслать в AX |
||||
MOV V2, AX |
|
; результат в память |
|||
RETF |
; Возврат в DOS. Адрес из стека |
END START
Выражения
Примеры:
XXX EQU 100 ABC db 1,2,3,4,5 …….
mov EAX,ABC+2 ; адресное выражение mov EAX,ABC[EBX] ; адресное выражение mov EAX,3+2*5 ; константное выражение mov EAX,-XXX ; константное выражение
Арифметические операции
Бинарные: + сложение
-вычитание
*умножение
/деление нацело
MOD остаток от деления нацело Унарные: + -
Пример:
tab_size EQU 50 ; Размер массива в байтах size_el EQU 2 ; Размер элемента
…….
mov CX, tab_size/ size_el ; CX=число
; элементов массива
Операции сдвига
SHL сдвиг влево
SHR сдвиг вправо
Пример:
mask EQU 10111011b …….
mov AL, mask SHR 3 ; AL = 00010111
Логические операции
AND |
И |
OR |
ИЛИ |
XOR |
Исключающее ИЛИ |
NOT |
НЕ |
|
|
Пример: пересылка в al поля flags с инвертированным младшим битом
flags EQU 10010011b mov al, flags xor 01h