Операнд задается на микропрограммном уровне (операнд по умолчанию): в этом случае команда явно не содержит операнда, алгоритм выполнения команды использует некоторые объекты по умолчанию (регистры, признаки и т.д.).
mul ebx ; eax = eax*ebx, неявно использует регистр eax
Операнд задается в самой команде (непосредственный операнд): операнд является частью кода команды. Для хранения такого операнда в команде выделяется поле длиной до 32 бит. Непосредственный операнд может быть только вторым операндом (источником). Операнд-получатель может находиться либо в памяти, либо в регистре.
mov eax, 5 ; eax = 5;
add ebx, 2 ; ebx = ebx + 2;
Операнд находится в одном из регистров (регистровый операнд): в коде команды указываются именами регистров. В качестве регистров могут использоваться:
32-разрядные регистры ЕАХ, ЕВХ, ЕСХ, EDX, ESI, EDI, ESP, EBP;
16-разрядные регистры АХ, ВХ, СХ, DX, SI, DI, SP, ВР;
8-разрядные регистры АН, AL, BH, BL, CH, CL, DH, DL;
сегментные регистры CS, DS, ,SS, ES, FS, GS.
add eax, ebx ; eах = eax + ebх
dec esi ; esi = esi — 1
Операнд располагается в памяти. Данный способ позволяет реализовать два основных вида адресации:
Прямая адресация: эффективный адрес определяется непосредственно полем смещения машинной команды, которое может иметь размер 8, 16 или 32 бита.
mov eax, sum ; eax = sum
Ассемблер заменяет sum на соответствующий адрес, хранящийся в сегменте данных (по умолчанию адресуется регистром ds) и значение, хранящееся по адресу sum, помещает в регистр eax.
Косвенная адресация в свою очередь имеет следующие виды:
косвенная базовая (регистровая) адресация;
косвенная базовая (регистровая) адресация со смещением;
косвенная индексная адресация;
косвенная базовая индексная адресация.
Do'stlaringiz bilan baham: |