Определение констант для размещения их компилятором в составе инструкций языка Определение числовых констант: имя = значение PI= V_size = 5 M_size = V_size*V_size V_szie=V_size+1 Присвоение имени выражению: имя EQU операнд (NB. Имя не может быть переопределено) sum equ ax N equ K K equ 2 mov sum,N
Операторы, формирующие выражения D dw 20 dup(?) Опер.ПримерОписание ()1(expr)Изменение приоритета операций []1[memref]Косвенная ссылка. Length1mov ax,length DЧисло элементов типа (ax=20) Size1mov ax,size DРазмер выделенной памяти (40) Width1Width поле_записиРазмер поля записи в битах Mask1Mask поле_записиБитовая маска указанного поля.2Memrsf.fieldДоступ к члену структуры :3Cs:memrefУказание сегмента Ptr4Тип ptr выражениеУказатель offset4Смещение адреса seg4Номер сегмента
Операторы, формирующие выражения D dw 20 dup(?)Y=1234h Опер.ПримерОписание Type4Mov ax, type DРазмер элемента типа (ax=2) This4Указатель текущего адреса High5mov ah,low y mov al,high y Старший/младший байт выражения (ax=3412h) Low5 +,-6Унарные *,/,mod7 Shr,Shl7 Выражение shr счетчик Сдвиг +,-8Бинарные Сравн.9Eq,ne,lt,le,gt,ge $ - текущее значение счетчика команд компилятора
Операторы, формирующие выражения Y=1234h Опер.ПримерОписание Not10 And11 Or, Xor12 Short13Указатель короткого перехода.type13Mov al,.type Y *) Тип символа (al=24h= ) *) 0Принадлежит кодовому сегменту4Регистр 1 Принадлежит командному сегменту 5Определен 2Является константой6Не используется 3 Непосредственная ссылка к памяти 7Внешний для модуля
Способы адресации Указание непосредственного значения Mov ax,0 Указание регистра Mov ds,ax Указание места в памяти ПрямаяКосвенная Абсолютная Со смещением Относительная Базовая со смещениемБазовая Базово-индексная Базово-индексная со смещением
Прямая адресация Абсолютная Mov bx,word_val Относительная Jc met DS Word_val Jc met CS met-$ Прямая со смещением:Mov al,byte_tbla+1 IP met:
Косвенная адресация Для любых процессоров Могут использоваться регистры BX, BP, SI, DI Для процессоров > 286 дополнительно регистры EAX, EBX, ECX,EDX - адресация с помощью заключенных в квадратные скобки регистров, содержащих адрес памяти NB. DS:bx, DS:si, DS:di и SS:bp ! Mov dl,byte ptr [bp] Mov dl,byte ptr ds:[bp]
Базовая адресация Базовая Dt1db? … mov bx, offset Dt1 mov byte ptr[bx],2 Базовая со смещением Dt1dw10dup(?) … mov bx,offset Dt1 mov word ptr[bx]+2,6.386 mov eax,1 mov Dt1[eax*2],6 *) *) Иногда называют индексной, т.к. реализует обращение к членам массива. Размерность может быть 2,4 и 8.
Базово-индексная адресация - использует комбинацию одного базового и одного индексного регистра Базово-индексная Dt1db20dup(?) … mov bx,offset Dt1 mov di,2 mov byte ptr[bx+di],1 Базово-индексная со смещением Dt2dd10*5dup(?) … mov cl,Dt1[bx+di].386 mov ebx,Dt2[ecx*4+eax]
Ближние и дальние адреса Короткий адрес (байт) Jc mеt Jc met CS met-$ IP met: Ближний адрес (2 байта) Jmp mеt Jmp met CS met IP met: Jmp short met Jmp far ptr met – дальний переход (4 байта)
Упрощенные директивы описания сегментов ДирективаОписание: Начало или продолжение.code Сегмента кода.data Сегмента инициализированных данных.const Сегмента постоянных данных.data? Сегмента неинициализированных данных.stack [размер] Сегмента стека. Параметр задает размер стека.fardata [имя] Сегмента инициализированных данных типа far..fardata? [имя] Сегмента неинициализированных данных типа far.
Модели памяти ИмяКодДанОпределениеОписание Tinynear cs=ds=ss=dgroupДля.com программ Smallnear cs=_text ds=ss=dgroup Для небольших и средних программ (.exe). Для программ на ассемблере. Medium farnear cs= _text ds=ss=dgroup Несколько сегментов кода. Для боль- ших программ с малым V данных. Compa ct nearfar cs=_text ds=ss=dgroup Сегмент кода 64К. V данных не ограничен. Largefar cs= _text ds=ss=dgroup Размер кода и данных не ограничены. Для больших программ. V 1 пер
Список имен, связанных с упро- щенным определением сегментов ИмяЗначение: Физический типа данных типа типа данных типа
Пример.model small.stack 256.data Xdb10 dup(?).code Mainproc mov mov ds,ax mov ax,5.exit 0 Main endp end main