Organização Funcional Modelo de Arquitectura de Von Neuman 26 Organização Funcional Modelo de Arquitectura de Von Neuman CPU Unidade Central de processamento (central process unit) Onde tudo se passa ; Leitura de Instruções da memória; Execução de Instruções; Leitura de Dados; Escrita de Resultados; Em sistemas de pequena dimensão, como o PC, utiliza-se um microprocessador. Memória Principal Dispositivo com capacidade para armazenar informação digital binária, normalmente organizada em células de 8 bits ; Armazena dados, instruções e resultados; Dividida em dois tipos: RAM Ramdom Access Memory e ROM Read Only Memory; 27
Organização Funcional Unidades de I/O Modelo de Arquitectura de Von Neuman São utilizados para estabelecer a comunicação com o mundo exterior (periféricos); Bus de Sistema CLK- Clock Exemplos: Teclado, Disco, Rato Conjunto de linhas (ligações) que transportam informação digital binária; Permitem a comunicação entre o CPU, a memória e as unidades de I/O; Este Bus é constituído pelo Bus de Dados, Bus de Endereços e Bus de Controlo; Define a frequência de operação do sistema. É utilizado para efectuar a sincronização das operações; 28 Organização Funcional Bus de Dados Modelo de Arquitectura de Von Neuman Conjunto de linhas (ligações físicas) por onde se transporta a informação digital binária (instruções, dados, resultados) entre o CPU, memória e I/O (bidireccional). A largura do bus de dados é dado pelo número de linhas do bus ou pelo numero de bits, tamanho, do microprocessador. Modelo 8088 8086 80286 80386SX 80486 Bus dados interno 16 16 16 32 32 Bus dados externo 8 16 16 16 32 29
Organização Funcional Bus de Endereços Modelo de Arquitectura de Von Neuman Conjunto de linhas (ligações físicas) que transportam o endereço das células de memória ou dos portos de I/O (unidireccional). A largura do bus de endereços é dado pelo número de linhas do bus ou pelo numero de bits, e define a capacidade de endereçamento. Para N bits consigo uma capacidade de endereçamento de 2 N. Modelo 8088 N.º Linhas (N) 20 Capacidade Endereçamento 1Mb 1K=2 10 =1024 1M=2 20 =1024K 1G=2 30 =1024M 8086 80286 80386SX 20 24 32 1Mb 16Mb 4Gb 80486 32 4Gb 30 Organização Funcional Modelo de Arquitectura de Von Neuman Bus de Controlo Contém os sinais necessários para uma correcta implementação do protocolo de comunicação. Podemos referir como exemplo a comunicação entre CPU, memória e I/O. M/IO Controla o acesso à memória ou unidades de I/O. RD Operações de Leitura. Memória I/O CPU WR Operações de Escrita. CPU Memória I/O 31
Organização Funcional Armazenamento da Informação Digital Binária A organização da memória é feita em células, normalmente constituídas por 8 bits. A cada célula 00001h é atribuído um endereço. 00000h Logo, a palavra do computador é igual à unidade de memória mínima endereçável. Células de memória Endereços O armazenamento de dados é baseado no modelo LITLE ENDIAN, que se traduz no facto dos bytes menos significativos serem armazenados nos endereços menos significativos. Consideremos as seguintes variáveis byte 8 bits com valor BD (h) armazenado em 0000Ah Word 16 bits com valor AC19 h armazenado em 00F0h. dword 32 bits com valor 3A421F01 h armazenado em 00FF0h 3A 42 1F 01 AC 19. BD 00FF3h 00FF2h 00FF1h 00FF0h 000F1h 000F0h 0000Ah 32 Organização Funcional CPU Bus Endereços A19..A0 00FA1h MEMR Organização da memória principal Descodificador de endereços byte Células MEMW Bus de Dados Registo de Dados D0 D7 33
Organização Funcional Operação de leitura da célula de memória com endereço 00FA1h O CPU activa a linha de controlo MEMR O CPU coloca o valor 00FA1h nas linhas A19-A0 do Bus Endereços. A memória descodifica o endereço 00FA1h, activando a célula de memória correspondente. Por se tratar de uma operação de leitura ( MEMR activado) o conteúdo da célula activada é colocado no registo de dados. 34 Estrutura interna do CPU (microprocessador) 8086 Blocos funcionais Execution Unit (EU) Registos: AX, BX, CX, DX, SP,BP, SI, DI Bus Interface Unit (BIU) Registos de Segmento: CS, DS, SS, ES Registo de Instrução: IP Operandos Addressing Unit (AU) Controlo dos Bus Calculo de Endereços ALU (16bits) Registo de Flags Control Unit (CU) Instruction Prefetch Queue Fila de espera das instruções (6 bytes) Registo de instruções 35
Estrutura interna do CPU (microprocessador) 8086 Registos de uso genérico AX 15 8 7 0 AH AL AX registo de 16 bits AH registo de 8 bits (8 bits + significativos) AL registo de 8 bits (8 bits - significativos) Registo acumulador Implícito em algumas instruções BX 15 8 7 0 BH BL BX registo de 16 bits BH registo de 8 bits (8 bits + significativos) BL registo de 8 bits (8 bits - significativos) Registo de Base Normalmente utilizado para endereçar variáveis em memória. 36 Estrutura interna do CPU (microprocessador) 8086 Registos de uso genérico CX 15 8 7 0 CH CL CX registo de 16 bits CH registo de 8 bits (8 bits + significativos) CL registo de 8 bits (8 bits - significativos) Registo acumulador Implícito em algumas instruções como contador. DX 15 8 7 0 DH DL DX registo de 16 bits DH registo de 8 bits (8 bits + significativos) DL registo de 8 bits (8 bits - significativos) Registo de Dados Utilizado em algumas operações aritméticas. Utilizado em instruções de I/O 37
Estrutura interna do CPU (microprocessador) 8086 Registos de endereçamento SP 15 0 SP registo de 16 bits Stack Pointer Utilizado para referenciar variáveis na pilha do sistema. BP 15 0 BP registo de 16 bits Base Pointer Utilizado para referenciar parâmetros e variáveis locais em subrotinas 38 Estrutura interna do CPU (microprocessador) 8086 Registos de indexação SI 15 0 SI registo de 16 bits Source Index 15 DI 0 DI registo de 16 bits Destination Index Estes registos são utilizados para referenciar variáveis em memória, bem como em algumas instruções específicas no tratamento de cadeias de caracteres. 39
Estrutura interna do CPU (microprocessador) 8086 Registos especiais Registo de FLAGS (estado) 15 14 13 12 11 O 10 D 9 I 8 T 7 S 6 Z 5 4 A 3 2 P 1 0 C C Carry Ultimo transporte em operações aritméticas; P Paridade A Auxiliary Carry transporte intermédio em operações com números BCD Z Zero Resultado=0 da ultima operação aritmética; Lógico. S Sinal Sinal do resultado de uma adição ou subtracção T Trap Utilizado para debugging de software I Interrupt D Direction Utilizado em manipulações de strings. O Overflow Referencia a existência de transbordo. 40 Estrutura interna do CPU (microprocessador) 8086 Registos especiais Registo apontador de instrução 15 Registos de segmentos 0 Instruction Pointer (IP) Registo de 16 bits Contém o endereço da próxima instrução a ser executada No 8086 existem 4 registos de segmentos, todos eles de 16 bits: CS Code Segment Segmento de código - Armazena as instruções do programa CS:[IP] Ponteiro para a próxima instrução a ser Executada 41
Estrutura interna do CPU (microprocessador) 8086 Registos de segmentos Registos especiais DS Data Segment Segmento de dados Armazena dados/resultados relativos a variáveis DS:<deslocamento> SS Stack Segment Segmento de pilha Suporte à Programação estruturada: Subprogramas; passagem de parâmetros SS:<deslocamento> ES Extra Segment Segmento extra Segmento auxiliar, utilizado por exemplo na manipulação de algumas cadeias de caracteres 42 Estrutura interna do CPU (microprocessador) 8086 Organização da memória em segmentos Endereço lógico O endereço lógico pode tomar um dos seguintes formatos: <segmento>:[<deslocamento>] <segmento>:[<offset>] <segmento>:[<displacement>] Segmentos de memória Endereço físico/línear O endereço físico/linear pode ser determinado da seguinte forma: Segmento *16 + deslocamento Endereço físico/línear 43
Estrutura interna do CPU (microprocessador) 8086 Sobreposição de segmentos Segmentos de memória ES Extra segment Inicio 52B90 Fim 52B90h +FFFFh 62B8Fh SS Stack segment 62B8F Inicio 5D270 Fim 5D270h +FFFFh 6D26Fh 44 Estrutura interna do CPU (microprocessador) 8086 Endereços dos segmentos Segmentos de memória 45
Instruções do CPU 8086 Formato geral <OPERAÇÃO> [<DESTINO>], [<ORIGEM>] Codificação de programas em Assembly Cada operação é representada por uma mnemónica Os operandos são representados por identificadores Exemplo: MOV AX,BX MOV mnemónica que representa a operação (cópia). AX Registo interno do CPU (Destino) BX Registo interno do CPU (Origem) A instrução copia o conteúdo do registo BX para o registo AX. 46 Instruções do CPU 8086 Código máquina Codificação binária das instruções com base em operação + operandos ( OP-CODE ) De acordo com o tipo de instrução, a sua codificação pode ocupar vários bytes Exemplo: MOV AX,CX 89h codifica a operação MOV C1h codifica os operandos AX,CX Assim sendo, se efectuamos uma codificação em linguagem assembly esta tem de ser traduzida para código máquina. Esse compilador chama-se ASSEMBLER. 47
Instruções do CPU 8086 Tipo de instruções quanto ao número de operandos 2 operandos Exemplo: MOV AX,CX Copia o conteúdo de CX para AX; AX:=CX; 1 operando Exemplo: INC AX Incrementa o conteúdo de AX; AX:=AX+1; 0 operandos Exemplo: CBW Converte o byte AL para a word AX; 48 Instruções do CPU 8086 Tipos de instruções de acordo com a função que realizam Instruções Aritméticas ADD Instrução a, b Descrição a a + b Bits de estado afectados ADC a, b a a + b + C NEG a a a SUB a, b a a b SBB a, b a a b C MUL b ax ax * b DIV b a a / b INC a a a + 1 DEC a a a 1 49
Instruções do CPU 8086 Tipos de instruções de acordo com a função que realizam Instruções lógicas AND OR XOR COM a, b a, b a, b a a i a i b i (i 0..N-1) a i a i b i (i 0..N-1) a i a i b i (i 0..N-1) a i a i (i 0..N-1) a a N-1 a N-2... a 2 a 1 a 0 b b N-1 b N-2... b 2 b 1 b 0, ou, ou, ou, ou, ou 50 Instruções do CPU 8086 Tipos de instruções de acordo com a função que realizam Instruções de deslocamento SHL a, n n * [a i+1 a i (i 0..N-2); a 0 0] a N-1... a 0 0 SHR SAR a, n a, n n * [a i a i+1 (i 0..N-2); a N-1 0] n * [a i a i+1 (i 0..N-2); a N-1 a N-1 ] 0 a N-1 a N-1... a 0 51
Instruções do CPU 8086 Tipos de instruções de acordo com a função que realizam Instruções de rotação ROL a, n n * [a i+1 a i (i 0..N-2); a 0 a N-1 ] a N-1... a 0 ROR a, n n * [a i a i+1 (i 0..N-2); a N-1 a 0 ] a N-1... a 0 52 Instruções do CPU 8086 Tipos de instruções de acordo com a função que realizam Instruções de rotação com carry RCL a, n n * [a i+1 a i (i 0..N-2); a 0 C; C a N-1 ] C a N-1... a 0 RORC a, n n * [a i a i+1 (i 0..N-2); a N-1 C; C a 0 ] C a N-1... a 0 53
Modos de endereçamento no 8086 Endereçamento por registo Este tipo de endereçamento acontece quando os operandos das instruções são registos do CPU. Exemplos: MOV AX, BX MOV DL, AL Utilização de registos de segmentos A utilização de registos de segmento tem algumas restrições: O registo de segmento CS ( code segment ) não pode ser utilizado como operando de destino. A instrução MOV CS, AX é incorrecta. Apenas um dos operandos pode ser um registo de segmento. A instrução MOV DS, CS é incorrecta. 54 Modos de endereçamento no 8086 Endereçamento em memória Endereçamento imediato Este tipo de endereçamento acontece quando o operando está contido na própria instrução. Exemplo: MOV CX,3064h CX IP CS 30 mm nn mm nn 64 Instrução CS:[IP] n n n n 0 + mmmm p p p pm 30h 64h B9h ppppm+2 ppppm+1 ppppm 55
Modos de endereçamento no 8086 Endereçamento em memória Endereçamento directo Este tipo de endereçamento acontece quando a instrução fornece o endereço em memória do operando Exemplo: MOV AL,[001Fh] AX YY YY Segmento de Dados DS Instrução CS:[IP] DS:[001Fh] 00h 1Fh A0h Segmento de Código 56 Modos de endereçamento no 8086 Endereçamento em memória Endereçamento Indirecto Este tipo de endereçamento acontece quando o endereço do operando é obtido por: Registo de base: [BX] ou [BP] Registo de base + deslocamento: [BX+displ] ou [BX] displ ou displ [BX] ou Registo de indexação: [SI] ou [DI] Registo de indexação + deslocamento: [SI+displ] ou [DI+ displ] ou. Registo de base + registo de indexação: [BX+DI] ou [BP+SI] ou Registo de base + indexação + deslocamento: [BX+SI+ disp] ou... 57
Modos de endereçamento no 8086 Observações: Existe a possibilidade de fazermos referência explícita ao registo de segmento, conhecido por Segment override. Como exemplo podemos referir a instrução MOV AX, ES:[BX]. Para instruções com dois operandos não é possivel utilizar endereçamento em memória simultaneamente no operando origem e no operando destino. Exemplo: MOV [BX], [BP+001Fh] incorrecto MOV AX, [BP+001Fh] MOV [BX], AX Correcto Utilização das directivas byte ptr e/ou word ptr para endereçamento em memória MOV [BX], 10 estamos perante um tipo de endereçamento (indirecto), (imediato). O valor é armazenado em memória como 8 ou 16 bits?? 58 Modos de endereçamento no 8086 Observações: Combinações admitidas no formato destino,origem registo, registo registo, imediato registo, directo registo, indirecto directo, imediato directo, registo indirecto, registo indirecto, imediato Combinações não admitidas no formato destino, origem imediato, <qualquer outro tipo> <end. em memoria>, <end. em memoria> 59