2.4 ARQUITETURA DO MICROPROCESSADOR 8088
2.4.10 CONJUNTO DE INSTRUÇÕES DO 8088
Nesta seção será relacionado todo o conjunto de instruções do 8088. As instruções utilizadas para a implementação da concorrência serão descritas em detalhes. Elas serão representadas da mesma forma que são representadas na linguagem de montagem Assembly.
Descrições das outras instruções podem ser vistas em Santos (1989). Detalhes da linguagem Assembly serão vistos na seção 2.7.
Segundo Santos (1989), as instruções do 8088 podem ser classificadas em instruções de movimentação de dados, aritméticas, lógicas, desvio de fluxo, entrada e saída, controle, rotação e deslocamento e instruções strings.
Para a movimentação de dados o 8088 disponibiliza as instruções MOV, MOVS, STOS, LODS, XCHG, LAHF, SAHF, XLAT, LEA, LDS, LES, PUSH, PUSHF, POP e POPF.
As instruções aritméticas são ADD, ADC, SUB, SBB, INC, DEC, NEG, MUL, IMUL, DIV, IDIV, DAA, DAS, AAA, AAM, AAD, CBW, CWD, CMP, CMPS e SCAS.
Para efetuar operações lógicas o microprocessador oferece as instruções AND, OR, XOR, TEST e NOT.
As instruções utilizadas para desvio de fluxo são JMP, J(condição), CALL, RET, INT, INTO, IRET, LOOP, LOOPE e LOOPNE.
Para operações de entrada e saída existe a instrução IN e a OUT.
Na categoria de controle estão NOP, HLT, WAIT, LOCK, ESC, CLC, CMC, CLD, CLI, STC, STI e SEG.
Para rotação e deslocamento as instruções são RCL, RCR, ROL, ROR, SAL, SAR e SHR.
As instruções string são MOVS, STOS, LODS, CMPS, SCAS e REP.
2.4.10.1 MOVIMENTAÇÃO DE DADOS
A instruções de movimentação de dados utilizadas para a implementação de concorrência no microprocessador 8088 são MOV, PUSH, PUSHF, POP e POPF. No quadro 44 é apresentado um detalhamento das instruções.
QUADRO 44 - INSTRUÇÕES DE MOVIMENTAÇÃO DE DADOS
2.4.10.2 ARITIMÉTICAS
Na implementação de concorrência no protótipo foram utilizadas as instruções aritméticas mostradas no quadro 45.
Instrução Formato Descrição
MOV MOV destino,fonte Copia conteúdo do operando fonte para destino PUSH PUSH fonte Coloca no topo da pilha o valor de fonte PUSHF PUSHF Coloca no topo da pilha o registrador de flags
POP POP fonte Retira do topo da pilha uma word e à armazena em fonte POPF POPF Retira do topo da pilha uma word e à armazena no
registrador de flags Fonte: adaptado de Santos (1989)
QUADRO 45 - INSTRUÇÕES ARITIMÉTICAS
2.4.10.3 LÓGICAS
Apenas a instrução lógica XOR é utilizada na implementação da concorrência. Sua função é executar uma operação “ou exclusivo” entre dois operandos devolvendo o resultado no operando destino. Seu formato é XOR destino,fonte. A operação lógica XOR é feita bit a bit e devolve o valor 1 se ambos os bits correspondentes nos operandos forem diferentes, e 0, se forem iguais. É freqüentemente utilizada para zerar registradores, por exemplo, a instrução XOR CX,CX leva CX a zero (Santos, 1989).
2.4.10.4 DESVIO DE FLUXO
No quadro 46 são apresentadas as instruções de controle de fluxo utilizadas.
Instrução Formato Descrição
ADD ADD destino,fonte Soma o conteúdo do operando fonte ao destino, armazenando o resultado no destino.
SUB SUB destino,fonte Subtrai o conteúdo do operando fonte do operando destino.
O resultado é armazenado em destino.
INC INC destino Soma 1 ao conteúdo do operando destino
DEC DEC destino Subtrai 1 do conteúdo do operando destino
DIV DIV fonte Divide o conteúdo da combinação DX:AX (32 bits) pelo conteúdo do operando fonte, armazenando o resto da divisão em DX e o resultado em AX.
CMP CMP destino,fonte Igual a instrução SUB, porém não armazena o resultado, apenas modifica o registrador de flags.
Fonte: adaptado de Santos (1989)
QUADRO 46 - INSTRUÇÕES DE DESVIO DE FLUXO
Instrução Formato Descrição
JMP JMP alvo Provoca um desvio incondicional no fluxo de
processamento transferindo a execução para o operando alvo.
J(condição) J(condição) alvo_curto Desviar o fluxo do processamento para o operando alvo se uma condição testada for encontrada. Ver quadro 47 para as variações da instrução.
CALL CALL alvo Salva na pilha o valor de IP e desvia o fluxo do processamento para o operando alvo.
RET RET [imed] Restaura da pilha o registrador IP e desvia o fluxo de execução para o endereço apontado por IP recém restaurado. Se imed (dado imediato) for informado, é adicionado o valor de imed ao SP.
INT INT tipo Salva na pilha o registrador de flags, apaga os flags IF e TF, salva o registrador CS na pilha e salva o registrador IP na pilha. Após isto desvia o fluxo de processamento para o endereço na tabela de vetores de interrupção correspondente ao valor do operando tipo.
IRET IRET Restaura da pilha o registrador IP, restaura o registrador CS, restaura o registrador de flags, e desvia o fluxo do processamento para o endereço apontado por CS:IP recém restaurados.
LOOP LOOP alvo Decrementa o conteúdo do registrador CX e desvia o fluxo de execução para o operando alvo enquanto CX for diferente de 0.
Fonte: adaptado de Santos (1989)
QUADRO 47 - VARIAÇÕES DA INSTRUÇÃO DE DESVIO DE FLUXO J(CONDIÇÃO)
2.4.10.5 ENTRADA E SAÍDA
As instruções de entrada e saída (quadro 48) são utilizadas para escrever e ler valores das portas.
QUADRO 48 - INSTRUÇÕES DE ENTRADA E SAÍDA
Instrução Formato Descrição
IN IN acumulador,porta
IN acumulador,DX
Transfere os dados de uma porta de entrada para o acumulador AL ou AX. Quando utilizadado AL o número da porta deve ser entre 0h e FFh. Quando utilizado DX, o número da porta pode variar entre 0h e FFFFh.
OUT OUT porta,acumulador OUT DX,acumulador
Transfere os dados do acumulador AX ou AL para uma porta. Quando utilizadado AL o número da porta deve ser entre 0h e FFh. Quando utilizado DX, o número da porta pode variar entre 0h e FFFFh.
Fonte: adaptado de Santos (1989)
Instrução Descrição Condição
JA Acima CF = 0 e ZF = 0
JAE Acima ou igual CF = 0
JB Abaixo CF = 1
JBE Abaixo ou igual CF = 1 ou ZF = 1
JC Transporte CF = 1
CXZ CX = 0 CX = 0
JNC Não transporte CF = 0
JNE ou JNZ Diferente (não zero) ZF = 0
Fonte: adaptado de Santos (1989)
2.4.10.6 CONTROLE
Para o controle do comportamento da CPU são utilizadas as instruções do quadro 49 na implementação da concorrência no processador 8088.
QUADRO 49 - INSTRUÇÕES DE CONTROLE
2.4.10.7 ROTAÇÃO
Apenas a instrução de rotação SHR é utilizada para implementar a concorrência no 8088. Seu objetivo é deslocar o conteúdo do registrador ou posição de memória à direita, inserindo um 0 na posição do bit mais significativo do operando e levando o bit menos significativo, após o deslocamento, ao flag CF, cujo valor inicial é perdido. O número de vezes a deslocar é 1 ou o contido no registrador CL. Seu formato pode ser SHR destino,1 ou SHR destino,CL.