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 programa contém um ou mais segmentos, que 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 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 (StackSegment ) espaço da memória reservado para guardar temporariamente dados e endereços; É utilizado frequentemente como espaço para guardar temporariamente t ovalor de registos que são momentaneamente t necessários para outras operações, ou para a passagem de parâmetros para subrotinas Segmentos Extra ( Extra Segments ) espaços de memória adicionais reservados para dados, que possibilitam um acesso mais seguro e eficiente a diferentes tipos de dadosd da 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); Modelo Uniforme em Modo Protegido (Modelo Protegido). ) As diferenças entre os modelos recaem, do ponto de vista it do 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 é possível endereçar quantidades arbitrariamente 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 (2 16 combinações 65.536536 posições de memória) Modelo Segmentado (modelo segmentado em modo real): 20 bits 1MB (2 20 combinações 1.048.576 posições de memória) Modelo Protegido (modelo uniforme em modo protegido): 32 bits 4GB (2 32 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 (2 16 = 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 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 (2 20 = 1.048.576 bytes) os microprocessadores da linha INTEL 8086, usados nos computadores pessoais, usavam um esquema de memória segmentada. era possível endereçar toda a memória através do endereçamento directo com recurso a endereços de 20 bit (obtidos pela associação de 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 -oprocessador apenas executa um programa 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 guardado num 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). 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çoefectivo ect ao endereço eço base do segmento e endereço do segmento (16 bit): endereço efectivo (16 bit): endereço físico (20 bit): 21D0 0 h + 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, 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 Sistema Operativo CS DS ES SS Segmento de Código Segmento de Código Segmento de Dados Segmento de Dados Segmento Pilha Pilha IP SI DI SP CS:IP DS:SI ES:DI SS:SP 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. Só se pode aceder aumsegmento de Código de cada vez, apesar de poder existir mais do que um, pois só existe um registo de segmento de código (CS). Só existe um Segmento Pilha para cada programa, especificado pelo registo de segmento pilha SS. 15 Modelo Protegido Surgiu 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 967 296 bytes. Modo Protegido - o processador pode executar vários programas/tarefas de cada vez, protegendo-osos uns dos outros. Modelo Uniforme os registos genéricos (32bit) podem endereçar qualquer posição dentro dos 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 CS DS SS ES Código do Programa EIP EBX Dados do Programa ESI EDI Pilha ESP FFFF FFFF h 17 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 Program Segment Prefix 0100 h Dados do Programa CS DS SS ES BX Código do Programa IP Espaço de Memória não Utilizado FFFF h Pilha SP 18