endereço

Propaganda
Universidade Federal Rural do Semi-Árido
Departamento de Ciências Ambientais
Ciência da Computação
Software Básico
Aula 07: Características dependente da
máquina
Silvio Fernandes
2009.1
1
Características dependentes da
máquina
• Projeto de um assembler para o SIC/XE
• Efeitos de um hardware mais sofisticado sobre a
estrutura e as funções do assembler
• A figura a seguir ilustra um programa-exemplo
– Endereçamento indireto indicado por @ (l. 70)
– Operandos imediatos indicados por # (l. 25, 55, 133)
– Diretiva BASE (l. 13) usada juntamente com o
endereço relativo a base
– Formato estendido de 4 bytes (formato 4) deve ser
especificado por + (l. 15, 35, 65)
2
Características dependentes da
máquina
3
Características dependentes da
máquina
4
Características dependentes da
máquina
• Diferenças do programa versão XE e standard
– Instruções que envolvem 2 registradores
• COMPR A,S (l. 150)
• TIXR T (l. 165)
– Endereçamento imediato e indireto quando
possível (l. 25, 55, 70)
• Indireto: evita codificação de mais uma instrução, como
na operação de “retorno” (l. 70)
• COMPR (l. 150): forçou acrescentar a instrução CLEAR
(l. 132), executada apenas 1 vez a cada registro lido
5
Formatos de instruções e modos
de endereçamento
• Repare que a instrução START agora especifica
0 como endereço inicial, isso indica que é um
programa relocável
• O programa será traduzido exatamente como
se fosse sempre carregado no endereço 0
6
Formatos de instruções e modos
de endereçamento
• A SYMTAB tem que ser pré-carregada com os
nomes dos registradores (A, X, etc.) e seus
valores (0, 1, etc.)
• Instruções que envolvem endereçamento relativo
é preciso fazer o deslocamento com relação a PC
ou a B. O endereço-alvo deve caber em 12 bits (0
a 4095 relativo a base ou -2048 a 2047 relativo a
PC)
– Se o deslocamento for grande demais será necessário
usar o formato estendido (formato 4)
7
Formatos de instruções e modos
de endereçamento
• O programador é obrigado a especificar o
formato estendido (através do prefixo +)
– Se nenhuma forma de endereçamento relativo
puder ser utilizada e programador não indicar o
formato estendido, a instrução não é montada e o
assembler terá que gerar uma mensagem de erro
• O cálculo do deslocamento para os modos de
endereçamento relativo é uma inversão do
cálculo do endereço-alvo
8
Formatos de instruções e modos
de endereçamento
• Cálculo do deslocamento relativo a PC
– Ex: 10 0000 FIRST STL RETADR 17202D
• O PC é incrementado depois que a instrução é lida e antes
da sua execução
• Nessa instrução PC contém 0003
• O deslocamento que precisamos para STL é 30-3 = 2D
• Em tempo de execução, o cálculo do endereço-alvo será
(PC)+deslocamento = (0030)
• O bit p deve conter 1 indicando endereço relativo a PC
(202D)
• Os bits n e i devem ser 1, indicando que não utilizamos
endereçamento indireto nem imediato (17)
9
Formatos de instruções e modos
de endereçamento
• Cálculo do deslocamento relativo a PC
– Ex2: 40 0017 J CLOOP 3F2FEC
•
•
•
•
Aqui o endereço do operando é 0006
Durante a execução, o PC conterá 0001A
O deslocamento necessário é 6 -1A = -14
Representando em complemento de 2 em 12 bits: FEC
10
Formatos de instruções e modos
de endereçamento
• Cálculo do deslocamento relativo a base é quase
igual ao relativo a PC, a diferença é que o
registrador base fica por conta do programador, o
qual deve informar o valor
– A instrução BASE LENGTH (l. 13) informa isso
– A instrução anterior LDB #LENGTH carrega este valor
no registrador
– Se o registrador B não fosse usado para
endereçamento o programador poderia ter usado a
diretiva NOBASE
– BASE e NOBASE são diretivas do assembler que não
produzem código executável
11
Formatos de instruções e modos
de endereçamento
• Cálculo do deslocamento relativo a BASE
– Ex: 160 104E STCH BUFFER,X 57C003
• Montagem de codificação usando endereçamento
relativo a base
• B conterá 0033 (endereço de LENGTH)
• Endereço de BUFFER é 0036
• Portanto o deslocamento deve ser 36-33 = 3
• Os bits x e b recebem 1 indicando utilização de
endereçamento indexado relativo à base
12
Formatos de instruções e modos
de endereçamento
• A montagem de uma instrução com
endereçamento imediato é mais simples pois
não envolve referência à memória
– Ex: 55 0020 LDA #3 01003
• O bit i recebe o valor 1 indicando endereçamento
imediato
• No caso: 133 103C +LDT #4096 75101000
– O valor 4096 é muito grande para 12 bits, exigindo
o formato estendido
13
Formatos de instruções e modos
de endereçamento
• Montagem de instruções que especificam
endereçamento indireto não apresentam
novidade
– Mas o bit n é definido de forma a indicar que o
conteúdo armazenado representa o endereço do
operando, em vez de o operando propriamente
dito
– Ex: 70 002A J @RETADR 3E2003
14
Relocação de programas
• É conveniente ter mais de um programa
utilizando ao mesmo tempo a memória e os
recursos gerais do computador
• Se soubéssemos antecipadamente quais
programas que poderiam ser executados ao
mesmo tempo, bastaria atribuir endereços
durante a montagem dos programas de modo a
fazer eles ocupassem áreas independentes da
memória, sem risco de superposição ou
desperdício de espaço
15
Relocação de programas
• Programas assim são chamados de absoluto (ou
montagem absoluta)
• No entanto, o endereço inicial do programa, e
consequentemente os endereços associados as
suas instruções só podem ser conhecidos no
instante da carga
• Entretanto, o assembler é capaz de identificar
para o loader as partes do programa-objeto que
necessitam de modificação – são chamados de
programas relocáveis
16
Relocação de programas
• Exemplos de relocação de programas
17
Relocação de programas
• Resolução do problema da relocação
1. Quando gerar o código-objeto da instrução JSUB
com a qual estamos trabalhando, o assembler
inserirá o endereço de RDREC numa posição relativa
ao início do programa. (Este é o motivo pelo qual
inicializamos o contador de posição como 0 para a
montagem)
2. O assembler produzirá também um comando para o
loader, instruindo-o a somar o endereço inicial do
programa ao campo de endereço da instrução JSUB
em tempo de carga de programa
18
Relocação de programas
• O comando para o loader terá que fazer parte
do programa-objeto
• Incluindo um registro de modificação:
19
Relocação de programas
• O tamanho é armazenado em meios bytes
porque o campo de endereço a ser modificado
pode não ocupar um número inteiro de bytes
• A posição inicial é a posição do byte que
contém os bits mais à esquerda do campo de
endereço a ser modificado. Se este campo
ocupar um número ímpar de meios bytes, o
assembler levará em conta que ele se inicia no
meio do primeiro byte da posição inicial
20
Relocação de programas
• Na instrução JSUB, o registro de Modificação
seria M00000705
– O endereço inicial do programa deverá ser somado a
um campo que se inicia no endereço 000007 (com
relação ao início do programa)
– E tem 5 meios bytes de tamanho
• A instrução montada: 4B101036
– Os 12 1º bits (41B) inalterados
– Endereço de carga somado aos últimos 20 bits (01036)
21
Relocação de programas
• As únicas partes do programa que precisam
ser modificadas em tempo de carga são as que
especificam endereços diretos (em vez de
endereços relativos)
• A seguir o programa-objeto para o exemplo
– Há um registro de modificação para cada campo
de endereço que precise ser modificado quando o
programa for relocado (as 3 instruções +JSUB)
22
Relocação de programas
• Programa-objeto
23
Referências
• Leland L Beck. “Desenvolvimento de software
básico”. 2ª ed. Rio de Janeiro: Campus, 1993.
525p.
24
Download