Memória Função: armazenamento de dados e instruções Estrutura Lógica: Endereço Conteúdo 0000 0000 h 1010 0010 … … 0256 0A20 h Æ … 1101 1100 … 0D63 52E2 h Æ 0011 1111 0D63 52E3 h Æ 0110 1001 … … FFFF FFFE h 0111 0101 FFFF FFFF h 0010 1001 byte 1 Segmentos A memória é dividida em segmentos com localização variável. Segmento – área especial da memória reservada por um programa para conter informação: instruções, dados, etc. ¾ Cada p programa g contém um ou mais segmentos, g , q que p podem começar ç em qualquer posição na memória, variar em tamanho e estar dispostos em qualquer sequência. 0000 0000 h Espaço utilizado pelo Sistema Operativo Segmento de Código … Segmento de Dados Segmento g Pilha FFFF FFFF h 2 Segmentos ¾ Segmento de Código (“Code Segment”) espaço da memória reservado para as instruções do programa ¾ Segmento de Dados (“Data Segment”) espaço da memória reservado para variáveis ou outros dados que estão a ser utilizados Poderão existir vários segmentos de código ou de dados 3 Segmentos ¾ Segmento Pilha ((“Stack Stack Segment Segment”)) espaço da memória reservado temporariamente p dados e endereços; ç ; para guardar É utilizado frequentemente como espaço para guardar t temporariamente i t o valor l de d registos i t que são ã momentaneamente t t necessários para outras operações, ou para a passagem de parâmetros para subrotinas ¾ Segmentos g Extra ((“Extra Segments”) g ) espaços de memória adicionais reservados para dados, que possibilitam um acesso mais seguro e eficiente a dif diferentes t tipos ti d dados de d d da d memória ói 4 Modelos de Programação Existem três modelos principais de programação em Assembly: Modelo Uniforme em Modo Real ((Modelo Uniforme); ) Modelo Segmentado em Modo Real (Modelo Segmentado); g ((Modelo Protegido). g ) Modelo Uniforme em Modo Protegido A diferenças As dif entre t os modelos d l recaem, do d ponto t de d vista i t do d programador, sobretudo sobre o modo como são usados os registos de endereçamento (as outras diferenças relativas ao modo de endereçamento da memória estão escondidas do programador pelo sistema operativo) 5 Endereçamento ¾ ép possível endereçar ç q quantidades arbitrariamente g grandes de memória recorrendo a esquemas de endereçamento mais complexos, que ultrapassam a capacidade de endereçamento directo Modelo Uniforme (modelo uniforme em modo real): 16 bits → 64 kB (216 combinações ⇒ 65.536 65 536 posições de memória) Modelo Segmentado (modelo segmentado em modo real): 20 bits → 1 MB (220 combinações ⇒ 1.048.576 posições de memória) Modelo Protegido (modelo uniforme em modo protegido): 32 bits → 4 GB (232 combinações ⇒ 4.294.967.296 posições de memória) 6 CPU Intel 8080 Computadores com microprocessadores da INTEL 8080: - CPU de 8 bits (registos de 8 bit ) - Barramento de 16 bit (com 16 linhas de endereço) - Capacidade de endereçamento até 64kB (216 = 65.536 bytes) - Memória até 16, 32 ou 48 kB ¾ era possível endereçar toda a memória através do endereçamento directo com recurso a endereços de 16 bit, de 0000H a FFFFH, restando ainda endereços 7 CPU Intel 8080 Endereçamento directo: endereço de 16 bit => 0000H-FFFFH => 65.536 posições de memória 0000 h Prefixo do Segmento do Programa g 0100 h Código do Programa Memória não utilizada Sistema Operativo CP/M-80 16, 32 ou 48kB FFFF h Endereços sem Memória Instalada 64kB 8 CPU Intel 8086 Computadores com microprocessadores da INTEL 8086: - CPU de 16 bits (registos de 16 bit ) - Barramento de 16 bit (com 16 linhas de endereço) - Memória até 1Mbyte (220 = 1.048.576 bytes) ¾ os microprocessadores da linha INTEL 8086, usados nos computadores p pessoais,, usavam um esquema p q de memória segmentada. era possível endereçar toda a memória através do endereçamento di t com recurso a endereços directo d d 20 bit (obtidos de ( btid pela l associação i ã de d dois endereços de 16bit), de 00000h a FFFFFh 9 Modelo Segmentado No Modelo Segmentado em Modo Real, o programa pode utilizar toda a memória (1MB - 1.048.576 bytes). Modo Real - o p processador apenas p executa um p programa g de cada vez. Modelo Segmentado – apenas a associação de dois endereços de 16bit permite endereçar qualquer posição dentro dos 1MB, sendo um dos endereços o da base do segmento, e o outro o do deslocamento dentro do segmento. 10 Modelo Segmentado ¾ endereço do segmento (“segment address”): valor de referência de contagem dos endereços, que encontra-se g ardado num guardado n m registo específico ¾ qualquer endereço de memória divisível por 16 (fronteira de um parágrafo) pode ser considerada o início de um segmento (ou endereço de um programa) ⇒ a casa hexadecimal menos significativa toma sempre o valor 0, pelo que é omitida ⇒ endereço de 20 bits, composto por 16 bits + 4 bits LSD com valor 0 11 Modelo Segmentado ¾ endereço efectivo (“offset address”): representa um desvio face a uma referência de contagem de endereços ⇒ endereço de 16 bits (65.536 posições de memória = 64 kbytes) ¾ um segmento pode estar localizado em quase qualquer posição da memória (a partir de endereços referentes à fronteira de um parágrafo) ocupando o espaço necessário para o programa (que pode chegar aos 64kB). 64kB) 12 Modelo Segmentado ¾ endereço físico (“actual address”): endereço de uma posição de memória: é obtido através da soma do endereço e de eço e efectivo ect o ao e endereço de eço base do seg segmento e to endereço do segmento (16 bit): 21D0|0 h endereço efectivo (16 bit): endereço físico (20 bit): + 507A h 26D7A h A notação utilizada para o endereço físico consiste na associação dos endereços base do segmento e efectivo, efectivo separados por dois pontos CS:IP DS:BX SS:SP DS:SI SS:BP Ex: 21D0:507A DS:DI 13 Modelo Segmentado Endereço físico de 20 bit => 00000h - FFFFFh => 1.048.576 posições de memória 00000 h Espaço utilizado pelo Si t Sistema Operativo O ti Segmento de Código CS Segmento de Código IP CS:IP Segmento de Dados SI DS:SI Segmento de Dados DI ES:DI SP SS:SP DS ES SS Segmento Pilha “Pilha” FFFFF h 14 Modelo Segmentado ¾ A existência de mais de um registo de segmento de dados (DS, ES, FS, GS) permite que, a qualquer momento, se aceda a mais de um Segmento de Dados. Dados ¾ Só se pode d aceder d a um Segmento S t de d Código Códi d cada de d vez, apesar de poder existir mais do que um, pois só existe um registo de segmento de código (CS). (CS) ¾ Só existe um Segmento Pilha para cada especificado pelo registo de segmento pilha SS. programa, 15 Modelo Protegido Surgiu g com os computadores com CPU da INTEL 80386: - CPU de 32 bit - Barramento de 32 bit - Memória até 4GB = 4.294.967.296 bytes No Modelo Uniforme em Modo Protegido, o programa e os dados com que trabalha, pode utilizar memória até 4GB 4 294 967 296 bytes. 4.294.967.296 bytes Modo Protegido - o processador pode executar vários programas/tarefas de cada vez, vez protegendo-os protegendo os uns dos outros. outros Modelo Uniforme – os registos genéricos (32bit) podem endereçar qualquer posição dentro dos 4GB. 4GB 16 Modelo Protegido Endereçamento directo (no segmento da memória reservado para o programa): deslocamento de 32 bit => 0000 0000 h - FFFF FFFF h => 4.294.967.296 posições de memória 0000 0000 h “Program Segment Prefix” Prefix Código do Programa CS DS SS ES EIP EBX Dados do Programa ESI EDI “Pilha” ESP 17 FFFF FFFF h Programas com formato .COM Endereçamento directo (no segmento da memória reservado para o programa): deslocamento de 16 bit => 0000h - FFFFh => 65.536 posições de memória 0000 h 0100 h “Program Segment Prefix” Prefix Dados do Programa Código do Programa CS DS SS ES BX IP Espaço de Memória não Utilizado FFFF h “Pilha” SP 18