Exemplo (2 operandos) |
Nome | Descrição | Obs | Efeito (para o exemplo) | |
---|---|---|---|---|---|
1 | mov ax,1000h | Imediato(**) | Operando é uma constante | constante está codificada na instrução | ax <= 1000h |
2 | mov ax, bx | Registrador | Operando é um registrador | um dentre: ax,bx,cx,dx,si,di,sp,bp | ax <= (bx) |
3 | mov ax, [1000h] | Direto | Endereço do operando codificado na instrução | Operando está na memória | ax <= conteúdo da memória endereçada por 1000h e 1001h (*) |
4 | mov ax, [bx] | Indexado ou indireto via registrador |
Endereço do operando é o conteúdo de registrador | Apenas um dentre bx, bp, si, di, atuam como apontadores para o operando na memória | ax <= conteúdo da memória cujo endereço está em bx (*) |
5 | mov ax, [bx + di] | Duplamente indexado | Endereço do operando é a soma dos conteúdos de dois registradores | combinações possíveis: [bx+di], [bx+si], [bp+di], [bp+si] | ax <= conteúdo da memória cujo endereço é dado por (bx)+(di) (*) |
6 | mov ax, [bx+di+1000h] | Duplamente indexado com deslocamento | Endereço do operando é a soma dos conteúdos de dois registradores mais uma constante | combinações possíveis: acrescente uma constante às combinações acima | ax <= conteúdo da memória cujo endereço é dado por (bx)+(di)+ 1000h (*) |
(*) Quando o operando tem 16 bits o 8086 recupera/escreve da/na memória dois bytes consecutivos a partir do endereço do operando. | |||||
(**) Usado com freqüencia para carregar num
registrador indexador o endereço de um dado associado a um rótulo:
mov bx, tab - - - tab: resb 100 |
Modos de endereçamento para o operando destino:
mov [bx], [1000h] e mov [bx], [si]são ilegais (o montador detecta )
Qualquer combinação de uma, duas ou três colunas abaixo, com apenas um elemento por coluna:
bx | si | |
constante | ||
bp | di |