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