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:

  1. Trava (Lock) e Repetição (Repeat)

  2. F0H (LOCK), F2H (REPNE/REPNZ), F3H (REP), F4H (REPE/REPZ)
  3. Segmento

  4. 2EH (CS), 36H (SS), 3EH (DS), 26H (ES), 64H (FS), 65H (GS).
  5. Tamanho de operando

  6. 66H
  7. Tamanho de endereço

  8. 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:

  1. mode = 01 : a instrução tem mais 1 byte (LSB), representando um dado imediato.
  2. mode = 10 : a instrução tem mais 2 bytes (LSB,MSB), representando um dado imediato.
  3. mode = 00 e r/m = 110 : a instrução tem mais 2 bytes (offset)
  4. mode = 11 : o campo r/m representa um registrador.


Classificação das instruções.

  1. 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.
  2. Aritmética binária.
  3. Lógicas.
  4. Deslocamento e rotação.
  5. Transferência de controle.
  6. Entrada/Saída.
  7. Miscelâneas.