EEL7030 - Microprocessadores 8086 Primeiro (1980) da família do Pentium (80x86). Componente com arquitetura similar (8088) utilizado no primeiro IBM PC. Cada descendente executa código dos antepassados e possui: Mesmo conjunto básico de registradores (Mais bits, contudo) Prof. Raimes Moraes GpqCom EEL UFSC Mesmo conjunto básico de instruções (Mais muitas outras, contudo) Mesmo mecanismo de interrupções 8086 Processador de 16-bits: Registradores de 16 bits Possui 20 pinos de endereçamento (16 destes são multiplexados com os dados) Endereça até 2 20 posições de memória (00000H a FFFFFH): 1048576. Possui 2 16 endereços para dispositivos de I/O: (0000H a FFFFH) Pode-se ler byte ou palavra de 16 bits da memória 8088 Processador de 16-bits (Mesmo cj. de instruções do 8086): Registradores de 16 bits Possui 20 pinos de endereçamento (8 destes são multiplexados com o barramento de dados. Palavra de 16 bits é lida da memória byte a byte) Endereça até 2 20 posições de memória (00000H a FFFFFH): 1048576. Possui 2 16 endereços para dispositivos de I/O: (0000H a FFFFH) Pode-se ler byte ou palavra de 16 bits da memória Distribuiçãode dados namemória: LSB, MSB 00000H 00001H 00002H 00003H 12H 34H 56H 78H Conteúdo lido da memória em 00000H: 3412H Conteúdo lido da memória em 00002H: 78 56H 00004H 91H Conteúdo do byte 4H 00005H 23H Conteúdo do byte 5H.... FFFFEH ABH Conteúdo lido da memória FFFFFH CDH em FFFFEH: CD ABH Conteúdo lido em 00001H: 56 34H Conteúdo lido em 00003H: 91 78H 8088 1
Registradores do 8088 Registradores de Dados Registradores do 8088 Registradores do Pentium Papel especial de registradores em instruções específicas Flags Aritméticos BX: Usado em endereçamento CX: Usado como contador default DX é usado para: - de Portas de I/O de 16-bits (IN AL, DX) - Registrador mais significativo do resultado de produto de operandos de 16 bits - Registrador mais significativo de dividendo de 32 bits. FLAG SETADO SE OPERAÇÃO TEM RESULTADO : OF (OVERFLOW) OPERAÇÃO EXCEDE TAMANHO DO REG. SF (SINAL) NEGATIVO Z F(ZERO) ZERO AF (CARRY AUXILIAR) VAI ou VEM 1 do BIT3 para o BIT4 do Acc PF (PARIDADE) PARIDADE PAR (NRO DE 1 s no Acc é PAR) CF (CARRY) VAI ou VEM 1 (Operações aritméticas) Acumulador : 8-bit AL, 16-bit AX, 32-bit DX AX Flags de Controle Registradores Utilizados na Manipulação de Dados Registradores de 16-bits: AX, BX, CX, DX, SI, DI, BP, SP DF IF TF Direcão (forward/backward) Usado em Instruções de manipulação de strings Habilita/Desabilita Interrupções Habilita/Desabilita execução de instrução passo a passo Registradores de dados (8-bits): AH, AL, BH, BL, CH, CL, DH, DL 2
Registradores de Registradores de Segmento (16-bits): CS Code Segment DS Data Segment SS Stack Segment ES Extra Segment Registradores de Offset (16-bits): IP Instruction Pointer SP Stack Pointer BP Base Pointer SI Source Index DI Destination Index Barramentodo 8088 : A19 a A16 ADDRESS/STATUS: Durante ciclo de clock T1, disponibilizam os 4 MS bits do endereço ou 0 em operações de I/O. Durante demais ciclos, informação de status. S6 é sempre baixo. S5 indica nível do bit IF. S4 e S3 indicam qual registrador de segmento está sendo usado. S4 S3 Segmento 0 0 Dados Extra 0 1 Pilha 1 0 Código 1 1 Dados Como endereçar 1 Mbytes a partir de registradores de 16 bits? Composição de endereços com registradores de segmentos e offset CÓDIGO CS:IP 8088: de Segmento x 16 + Offset PILHA DADOS SS:SP SS:BP (certas instruções) DS:BX DS:SI DS:DI (manipulação de strings) DS:SI ES:DI Como endereçar 1 Mbytes a partir de registradores de 16 bits? 8088: de Segmento x 16 + Offset Exemplo: Existem diversas possibilidade de endereçar a mesma posição de memória CS = 0F00H; IP = B000H Exemplo: do Código CS = 1000H; IP = A000H 0F000 B000 1A000H CS*16 + IP 10000 CS*16 A000 + IP 1A000H 3
Conhecendo o valor dos registradores abaixo, calcule os endereços físicos (20 bits) em hexadecimal: Organização da memória CS = 1660H; DS = 1700H; SS = 1760H; ES = 1650H IP = 00A0H; SP = 0400H; SI = 0040H; DI = A000H a) do código b) da pilha Organização da memória MODOS DE ENDEREÇAMENTO 1) IMEDIATO Ex. 1: MOV DX, 1234H DX ABCDH 1234H Ex. 2: MOV CH, 23H CH CDH 23H Dado segue o opcode 2) VIA REGISTRADOR Ex.1: MOV CX, SI CX 1234H 5678H SI 5678H 5678H 3) DIRETO OU ABSOLUTO Ex.1: MOV BX, [5634H] BX ABCDH 8645H 1000:5634H 45H LSB DS=1000H 1000:5635H 86H MSB Ex.2: MOV DL, AH DL 89H BCH AH BCH BCH Ex.2: MOV CL, [5634H] CL F2H 30H 3000:5634H 30H DS=3000H 3000:5635H 66H 4
3) DIRETO COM OVERRIDE Antes Depois Ex. 3: MOV BH, [VALOR] BH C5H 78H Ex.1: MOV BX, ES:[5634H] BX ABCDH 8645H 2000:5634H 45H LSB ES=2000H 2000:5635H 86H MSB Programa.DATA VALOR DB 78H 4) INDIRETO (BX,BP,DI,SI) Ex.1: MOV CL, [SI] CL 20H 78H SI 3456H DS=1000H 1000:3456H 78H Ex.2: MOV DX, [BP] DX F232H 3567H BP A2B2H DS=1000H 4020:A2B2H 67H LSB SS=4020H 4020:A2B3H 35H MSB 5) INDEXADO (OFFSET+(BX,BP,DI,SI)) Ex.1: MOV DH, [2345H+BX] DH 45H 67H 2345H é o offset BX 4000H 4000H+2345H = 6345H DS=3500H 3500:6345H 67H Ex.2: MOV AX, [45H+BP] AX 1000H CDABH 45H é o offset BP 3000H 3000H + 45H = 3045H 4600:3045H ABH LSB BP SS (SS=4600H) 4600:3046H CDH MSB 6) BASEADO ((BX,BP,DI,SI) + OFFSET)) Ex1:MOV CL,[BX+05H] CL 40H 67H 0300H+05H=0305H BX 0300H DS=3500H 3500:305H 67H 7) BASEADO INDEXADO ((BX ou BP) + (DI ou SI) + OFFSET)) Ex1:MOV CL,[BX+SI] CL 40H 67H SI 2000H 0300H+2000H=2300H BX 0300H DS=1000H 1000:2300H 67H Ex2:MOV CX,[BP+DI+4H] CX 6000H 6385H BP DI 0020H 3004H 20H+3004H=3024H 4600:3024H 85H LSB BP SS (SS=4600H) 4600:3025H 63H MSB 5
7) BASEADO INDEXADO ((BX ou BP) + (DI ou SI) + OFFSET)) Ex3: MOV DL, [BX+DI+37H] DL 40H 12H 37H é o offset BX 2000H 2000H+0050H+37H=2087H DI 0050H DS=1000H 1000:2087H 12H Ex4: MOV BX, [BP+SI+1234H] 3000H 3665H 1234 é o offset SI 4000H BP 0020H 0020+4000+1234=5254H 1000:5254H 65H LSB 8) RELATIVO (CALL, JMP e DESVIOS CONDICIONAIS): -128 a +127 Endereço Opcodes 1CD7:100 29 D0 SUB AX,DX 1CD7:102 73 03 JNC 0107 1CD7:104 B8 00 MOV AX,00 1CD7:107 BP SS (SS=1000H) 1000:5255H 36H MSB ASSEMBLY DO 8088 ASSEMBLY DO 8086 Comentários Comentários MOV AX,[BX] ; Palavra apontada por DS:[BX] vai para AX INC BYTE PTR [BX] ; Incrementa byte apontado por DS:[BX] vai para AX MOV BL,[BX] ; Byte apontado por DS:[BX] vai para AL INC WORD PTR [BX] ; Incrementa palavra apontada por DS:[BX] INC [BX] ;? Incrementar Byte ou Palavra Código de Máquina Seja a instrução MOV DX, 316BH; BA 6b 31 o código de máquina do 8088 para a instrução de transferência de dado imediato para um registrador é dada por: 1011 W RRR - Dado (8 bits) - Dado (8 bits) onde: W = 0 se instrução opera em 1 byte de dados e W = 1 se instrução opera em 1 palavra de dados RRR = 000, 001, 010, 011, 100, 101, 110, 111 estabelece o registrador que recebe o dado: AX, CX, DX, BX, SP, BP, SI, DI se W = 1 ou AL, CL, DL, BL, AH, CH, DH, BH se W = 0 Classifique as instruções abaixo em relação ao modo de endereçamento. Base Index Offset MOV BX, DS:[5634H] N N S MOV CL,[SI] N S N MOV DX,[BX] S N N MOV DH, [BX+2345H] S N S MOV DX, [35H+DI] N S S MOV CL, [BX+SI+37H] S S S MOV DL, [BP+DI+40H] S S S 6
Classifiçação das instruções em relação ao modo de endereçamento. Base Index Offset Modo de MOV BX, DS:[5634H] N N S Direto MOV CL,[SI] N S N MOV DX,[BX] S N N Indireto MOV DH, [BX+2345H] S N S Baseado MOV DX, [35H+DI] N S S Indexado MOV CL, [BX+SI+37H] S S S MOV DL, [BP+DI+40H] S S S Baseado Indexado de IO Ex.1: IN AL,83H AL 34H 78H Porta de IO 83H 78H Ex.2: IN AX,83H AX 5634H F278H Porta de IO 83H 78H Porta de IO 84H F2H Antes Depois Ex. 3: IN AL, DX AL 30H 60H DX Porta de IO 1234H 1234H 60H Ex. 4: IN AX,DX AX 3040H 7060H DX Porta de IO 4000H Porta de IO 4001H 4000H 60H 70H 7