Software I, EEL485.
Professor Federico Gálvez-Durand
April 12, 1999
Instruções.
As instruções, em sua forma mnemônica, correspondem
ao dicionário de instruções codificadas dentro do
processador. As etiquetas não fazem parte da instrução
propriamente dita, mas fazem parte da forma geral em que uma instrução
pode ser representada usando a linguagem do montador:
etiqueta: mnemônico argumento1, argumento2, argumento3
A etiqueta (label), é opcional, serve para dar nome a
uma posição de memória. As etiquetas são usadas
como referências pelas instruções de controle de fluxo
do programa.
O mnemônico, é uma palavra reservada que representa
uma instrução (ou uma família de instruções)
do processador.
Os argumentos, podem ser opcionais. Em geral representam os
dados e registros utilizados pela instrução representada
pelo mnemônico.
Exemplo:
CARGA: MOV AX , 1234H ; comentário: movendo 1234H para AX.
Etiqueta = CARGA:, Mnemônico = MOV, Argumento1 = AX, Argumento2 =
1234H. O comentário não faz parte da instrução.
Formato genêrico de uma instrução. As instruções
da família ix86 tem um formato genêrico, preservado ao longo
da evolução dos processadores. Algumas instruções
mudaram ou ficaram obsoletas no 486 e 586, maiores informações
sobre a compatibilidade entre processadores pode ser achada no capítulo
17 do Volume 3 do Manual de Software da Intel.
Formato genêrico de uma instrução ix86.
Prefixes. São opcionais, pode se usar até quatro
deles em uma mesma instrução. Podem ser divididos em quatro
grupos:
-
Trava (Lock) e Repetição (Repeat)
F0H (LOCK), F2H (REPNE/REPNZ), F3H (REP), F4H (REPE/REPZ)
-
Segmento
2EH (CS), 36H (SS), 3EH (DS), 26H (ES), 64H (FS), 65H (GS).
-
Tamanho de operando
66H
-
Tamanho de endereço
67H
Opcode. Também chamado código primário da instrução.
Pode ter um ou dois bytes e um código adicional de três bits
colocado no campo ModR/M. Os bits dentro deste descriptor definem a direção
da operação, o tamanho dos deslocamentos, a codificação
dos registros ou as extensões do sinal dos deslocamentos. A codificação
dos campos dentro deste descriptor depende da classe de operação.
ModR/M (addressing-form specifier byte). Contém
3 campos de informação:
O mod combina com r/m para formar 32 possíveis
valores: 8 registros e 24 modos de endereçamento.
O reg/opcode especifica o número de um registro ou mais
3 bits de opcode.
O r/m pode especificar um registro com operando ou pode combinar
com o mod para codificar um modo de endereçamento.
SIB (Scale-Index-Base). Tem 3 campos, especificando um
fator de escala, um registro de índice e um registro de base, respectivamente.
O ModR/M precisa do SIB em alguns casos, para poder definir a instrução.
Displacement e Immediate. Podem ocupar 1, 2 ou 4 bytes.
Uma explicação mais detalhada sobre a codificação
de instruções se encontra no apêndice
B do Volume 2 dos Manuais da Intel. Porém, é necessária
uma breve explicação a respeito da nomenclatura a ser usada
daqui em diante.
Campos usados para definir uma instrução genêrica
(Tab-B1).
Codificação dos registros (Tab-B2/B3).
Codificação dos registros de segmento (Tab-B5/B6).
r/m
|
Base
|
Index
|
000
|
BX
|
SI
|
001
|
BX
|
DI
|
010
|
BP
|
SI
|
011
|
BP
|
DI
|
100
|
-
|
SI
|
101
|
-
|
DI
|
110
|
BP
|
-
|
111
|
BX
|
-
|
Tabela de Registradores no modo de Indexação
O bit s quando afirmado (s=1) estende o sinal dos dados
imediatos de 16 bits (w=1).
As instruções que cuja execução é condicionada
ao resultado de uma teste são codificicadas de acordo à tabela
B8. O código tttn aparece nos bits (3,2,1,0) do primeiro
byte ou segundo byte do Opcode. No tttn, a parte ttt identifica
a condição a ser testada e a parte n se está
sendo usada a condição (n=0) ou sua negação
(n=1).
Codificação dos condicionais para testes (Tab-B8)
Em muitas das instruções que trabalham com 2 operadores,
o bit d determina o operando que faz o papel de fonte e o papel
de destino. A tabela B9 descreve seu significado. Nas instruções
inteiras com Opcode de 1byte, este bit é o número
1.
Codificação de direção de operação
(Tab-B9)
O esquema de indexação mostrado pode ser simplificado usando estes 2 bytes.
opcode
15 14 13 12 11 10
|
d
9
|
w
8
|
mode
7 6
|
reg
5 4 3
|
r/m
2 1 0
|
O campo d indica se o destino da operação será definido pelo campo reg
(d=0) ou pela combinação dos campos mod e r/m (d=1).
A combinação dos campos mod e r/m pode ter os seguinte significados:
-
mode = 01 : a instrução tem mais 1 byte (LSB), representando um dado imediato.
-
mode = 10 : a instrução tem mais 2 bytes (LSB,MSB), representando um dado imediato.
-
mode = 00 e r/m = 110 : a instrução tem mais 2 bytes (offset)
-
mode = 11 : o campo r/m representa um registrador.
Classificação das instruções.
-
Movimentação de dados. Estas instruções
movimentam dados (8, 16, 32 ou 64 bits) entre a memória do processador
e seus registros e entre registros também. Se dividem em quatro
grupos: Uso geral, intercâmbio, manipulação de pilha e conversão
de tipo.
-
Aritmética binária.
-
Lógicas.
-
Deslocamento e rotação.
-
Transferência de controle.
-
Entrada/Saída.
-
Miscelâneas.