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 a,b; a,b - параметры макро (ячейки памяти)
mov ax,b;данное макрооопределение позволяет делать
mov bx,a;обмен данными между ячейками памяти, в
mov a,ax;отличие от команды xchg ;
mov b,bx;нельзя mov a,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. ; -начало комментария.
1. MOV DST,SRC;переслать (SRC) в (DST). Здесь и далее содержимое регистра, например регистраAL будет обозначаться - (AL) или (al), а пересылка в комментарии будетобозначаться знаком <-- .
mov al,ch; (al) <-- (ch).
mov cx,dx;
mov bh,[mems];содержимое ячейки памяти с символическим адресом
mems переслать в регистр BH. Можно: mov bh,mems.
mov al,[bx];переслать в аккумулятор содержимое ячейки памяти
с адресом находящимся в регистре BX .
mov bx,OFFSET src;поместить в BX смещение адреса
ячейки памяти SRC, в текущем сегменте.
mov al,table[bx];загрузить в аккумулятор элемент таблицы байтов
с символическим адресом первого элемента table и отстоящий
от этого элемента на (bx) байтов. Другие варианты:
mov al,[table + bx] или
mov al,table + bx.
До выполнения команды mov al,[table + bx] | Регистр BX | Регистр AL | Адрес | Код |
0010 | XX | 0800 (table) | 8с | |
08xx | xx | |||
0810 | 58 |
После выполнения команды mov al,[table + bx] | Регистр BX | Регистр AL | Адрес | Код |
0010 | 58 | 0800 (table) | 8с | |
08xx | xx | |||
0810 | 58 |
2. PUSH RP;поместить на вершину стека содержимое пары регистров RP (например push bx).
3. POP RP; снятьс вершины стека два байта и поместить в пару RP (например pop ax).
4. XCHG DST,SRC; поменять местами содержимое (DST) и (SRC). Оба операнда не могут бытьодновременно содержимым ячеек памяти.
5. XLAT SRC;извлечь из таблицы с начальным адресом SRC байт данных имеющий номер от началатаблицы = (AL), и поместить его в AL. Адрес SRC должен находиться в регистреBX. Другой вариант: XLATB.
....
.DATA
src DB 15d,10h,00110101b,'A','B',166d
.CODE
....
mov al,2; в результате выполнения этих трех команд
mov bx,OFFSET src; в регистр AL будет загружен код
xlatb; 00110101b = 35h = 53d = ASCII'5'
6. IN ACCUM,PORT; поместить в аккумулятор AL или AX байт или слово из порта с адресом PORT.Если адрес порта <= FF то адрес порта может указываться непосредственно,если адрес порта > FF, то адрес порта указывается косвенно, через содержимоерегистра DX (специальная функция регистра общего назначения).
in al,0a5h;ввести в AL байт данных из ВУ с адресом порта A5h ....
mov dx,379h;ввести в аккумулятор AL байт данных из
in al,dx;внешнего устройства с адресом порта 379h
7. OUT PORT,ACCUM; переслать из аккумулятора AL или AX байт или слово в ВУ с символическимадресом PORT.
out 0ffh,al;
....
mov dx,37Ah;переслать слово данных из AX в ВУ с адре-
out dx,ax;сом порта 37Ah
8. LEA RP,M;загрузить в регистр RP эффективный адрес (смещение) ячейки памяти ссимволическим адресом M.
lea di, rus; аналог этой команды- mov di, OFFSET rus.
1. ADD DST, SRC;сложить содержимое SRC и DST и результат переслать в DST.
add al, [mem_byte];mem_byte однобайтовая ячейка памяти
add [mem_word], dx;mem_word двухбайтовая ячейка памяти
add ch,10001010b;
2. INC DST;увеличить (DST) на 1 (инкремент (DST)).
inc si; (SI) <-- (SI) + 1.
inc count; (count) <-- (count) + 1.
3. SUB DST, SRC;вычесть (SRC) из (DST) и результат поместить в DST.
4. DEC DST;декремент (DST).
5. CMP DST, SRC;сравнить содержимое DST и SRC. Эта команда выполняет вычитание (SRC) из (DST) но разность не помещает в DST и по результату операции воздействует на флаги.
условие флаги
OF SF ZF CF
DST > SRC 0/1 0 0 0
DST = SRC 0 0 1 0
DST < SRC 0/1 1 0 1
0/1 - означает, что флаг можетбыть равен 0 или 1 в зависимости от значений операндов. Флаги OF и SF имеютсмысл при операциях со знаковыми числами, CF для беззнаковых чисел. Флагпереполнения OF устанавливается в 1, если в результате операции сложения иливычитания значения переноса в старшиий двоичный разряд и из старшего двоичногоразряда не совпадают. По другому определению OF принимает значение 1, еслирезультат превышает диапазон представления соответствующих чисел. Пусть DST> SRC и оба являются однобайтовыми числами, тогда:
DST: 1. (+127) 2. (+127)
SRC: - (+2) - (-2)
------- -------
(+125) (OF)=0 (+129)? (OF)=1
Во втором примере результатпревышает диапазон: -128 <= x < = +127. Флаг знака SF устанавливается в'1', если старший бит результата операции равен 1, т.е. при отрицательномрезультате. В противном случае сбрасывается. Флаг нуля ZF устанавливается в '1'при нулевом результате (!), иначе сбрасывается. Флаг переноса CF = 1, если естьперенос из старшего разряда при сложении или есть заем в младший разряд привычитании. Иначе флаг сбрасывается. Для первого примера SF = ZF = CF = 0, длявторого: SF = 1, ZF = CF = 0.
1. AND DST, SRC;поразрядное логическое "И".