Arquitectura de Computadores (ACom) MEAer Acetatos das Aulas Teóricas Versão 5.0 - Português Aula N o 06: Título: : entradas e saídas, interrupções e temporizador Sumário: desenvolvimento do ; ; Entradas e saídas; ;. 2015/2016 Nuno.Roma@tecnico.ulisboa.pt
Arquitectura de Computadores (ACom) : entradas e saídas, interrupções e temporizador Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 1 / 47 Aula Anterior Na aula anterior... Recursos do Instruções do : Instruções Aritméticas Instruções Lógicas Instruções de Deslocamento Instruções de Controlo Instruções de Transferência de Dados Instruções Genéricas Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 2 / 47
Road Map Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 3 / 47 Planeamento Planeamento Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 4 / 47
Sumário Hoje: desenvolvimento do ; ; Entradas e saídas; ;. Bibliografia: Secções 14.5 e A.2 Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 5 / 47 Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 6 / 47
Constituído por duas ferramentas distintas (em Linux): Compilador de linguagem Assembly Invocação: $ p3as-linux <nome>.as Resultado: <nome>.exe - Código binário <nome>.lis - Listagem das referências (tags) utilizadas Simulador do Invocação: $ java -jar p3sim.jar <nome>.exe Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 7 / 47 Simulador do Simulador do : Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 8 / 47
Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 9 / 47 Vários periféricos disponíveis: Entrada: 8 Interruptores ON-OFF (switches) 15 Botões de pressão* Saída: 16 LEDs 4 Displays de 7 segmentos LCD de 2 linhas Entrada & Saída: Janela de texto Outros: Temporizador* * - Através de interrupção Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 10 / 47
LEDs Utilização: Acessíveis através do endereço FFF8h; O estado individual de cada LED (ligado/desligado) é definido por uma escrita para este porto; O LED da direita é controlado pelo bit menos significativo da palavra escrita. Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 11 / 47 LEDs Exemplo: LEDS EQU FFF8h ORIG 0000h... MOV R1,1100111011011011b MOV M[LEDS], R1... Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 12 / 47
Interruptores ON-OFF (switches) Utilização: Acessíveis através do endereço FFF9h; Uma leitura deste endereço permite ler, em simultâneo, o estado do conjunto dos 8 interruptores; Ao interruptor da direita corresponde o bit menos significativo da palavra lida. Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 13 / 47 Interruptores ON-OFF (switches) Exemplo: LEDS EQU FFF8h SWITCH EQU FFF9h ORIG 0000h... ReadSW: MOV R1, M[SWITCH] MOV M[LEDS], R1 BR ReadSW... Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 14 / 47
Displays de 7 Segmentos Utilização: Acessíveis através dos endereços FFF0h, FFF1h, FFF2h e FFF3h; Cada um destes portos controla, da direita para a esquerda, um conjunto de 7 segmentos de LEDs; Os 4 bits menos significativos determinam o caracter hexadecimal (0h a Fh) que aparece no display. Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 15 / 47 Displays de 7 Segmentos Exemplo: DISPLAY7SEG0 DISPLAY7SEG1 DISPLAY7SEG2 DISPLAY7SEG3 EQU FFF0h EQU FFF1h EQU FFF2h EQU FFF3h ORIG 0000h... MOV R1, 3 MOV R2, 15 MOV M[DISPLAY7SEG3], R2 SUB R2, R1 MOV M[DISPLAY7SEG2], R2 SUB R2, R1 MOV M[DISPLAY7SEG1], R2 SUB R2, R1 MOV M[DISPLAY7SEG0], R2... Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 16 / 47
LCD Utilização: Display com 16 colunas e 2 linhas de texto; Uma escrita para o porto FFF5h faz ecoar o caracter ASCII correspondente aos 8 LSBs da palavra escrita; O porto FFF4h é um porto de controlo: Bit 15 - Liga ou desliga o LCD; Bit 5 - Limpa o LCD; Bit 4 - Posiciona o cursor na linha 0 ou 1; Bits 3 a 0 - Posiciona o cursor na coluna especificada. Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 17 / 47 LCD Exemplo: LCD_CTR LCD_CHAR EQU FFF4h EQU FFF5h ORIG 8000h Text STR Hello World,0 ORIG 0000h... MOV R1, 1000000000100000b ; Activa e limpa o LCD MOV M[LCD_CTR], R1 MOV R1, 1000000000000011b ; Linha 0, Coluna 3 MOV M[LCD_CTR], R1 MOV R2, Text ; Ponteiro para o caracter a escrever Other: MOV R3, M[R2] CMP R3, R0 BR.Z EndLCD CMP R3, BR.NZ Cont OR R1, 0000000000010000b ; Muda de linha Cont: MOV M[LCD_CHAR], R3 ; Escreve caracter INC R2 INC R1 MOV M[LCD_CTR], R1 ; Avança para a próxima posiç~ao BR Other EndLCD: BR EndLCD Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 18 / 47
Janela de Texto Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 19 / 47 Janela de Texto Utilização: Permite ler caracteres do teclado do computador; Permite escrever caracteres numa janela com 24 linhas e 80 colunas; Estão reservados 4 portos: Porto de Leitura - FFFFh (leitura): Retorna o caracter ASCII correspondente à última tecla premida sobre a janela de texto; Porto de Escrita - FFFEh (escrita): Permite escrever um dado caracter ASCII na janela de texto; A janela mantém internamente um cursor onde este caracter é escrito; Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 20 / 47
Janela de Texto Utilização: Porto de Estado - FFFDh (leitura): Permite testar se existe ou não algum caracter para ler na janela de texto; caso não haja, uma leitura deste porto retorna 0; Porto de Controlo - FFFCh (escrita): Uma escrita do valor FFFFh inicializa (apaga) a janela de texto; Após a inicialização, a escrita de um caracter no porto de escrita incrementa automaticamente o cursor; É possível posicionar o cursor numa dada posição arbitrária da janela escrevendo, para o porto de controlo, a coordenada desejada de acordo com a seguinte representação: 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 Linha Coluna Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 21 / 47 Janela de Texto Exemplo: TXT_CTR EQU FFFCh TXT_ST EQU FFFDh TXT_WR EQU FFFEh TXT_RD EQU FFFFh ORIG 8000h Prompt STR Type some text (press. to finish):,0 Nome TAB 80 ORIG 0000h... MOV R2, Prompt NxChar: MOV R3, M[R2] CMP R3, R0 BR.Z RdKey MOV M[TXT_WR], R3 INC R2 BR NxChar ; Ponteiro para o caracter a escrever ; Escreve caracter RdKey:... Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 22 / 47
Janela de Texto Exemplo (cont):... MOV R2, R0 Wait: CMP M[TXT_ST], R0 ; Ciclo de espera por uma tecla primida BR.Z Wait MOV R1, M[TXT_RD] ; L^e a última tecla primida CMP R1,. BR.Z EndInp MOV M[TXT_WR], R1 ; Escreve caracter lido MOV M[R2+Nome], R1 INC R2 BR Wait EndInp: MOV M[R2+Nome], R0... Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 23 / 47 Janela de Texto Exemplo (cont):... MOV R1, FFFFh MOV M[TXT_CTR], R1 ; Inicializa e limpa a janela MOV R1, 050Ah ; Linha 5, coluna 10 MOV M[TXT_CTR], R1 ; Posiciona cursor MOV R2, R0 NxStep: MOV R3, M[R2+Nome] CMP R3, R0 BR.Z EndPrg MOV M[TXT_WR], R3 INC R2 INC R1 MOV M[TXT_CTR], R1 BR NxStep EndPrg: BR EndPrg ; Escreve caracter ; Avança para a próxima coluna ; Posiciona cursor Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 24 / 47
Janela de Texto Exemplo (cont):... MOV R1, FFFFh MOV M[TXT_CTR], R1 ; Inicializa e limpa a janela MOV R1, 050Ah ; Linha 5, coluna 10 MOV M[TXT_CTR], R1 ; Posiciona cursor MOV R2, R0 NxStep: MOV R3, M[R2+Nome] CMP R3, R0 BR.Z EndPrg MOV M[TXT_WR], R3 INC R2 INC R1 MOV M[TXT_CTR], R1 BR NxStep EndPrg: BR EndPrg ; Escreve caracter ; Avança para a próxima coluna ; Posiciona cursor Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 25 / 47 Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 26 / 47
: Acontecem quando a sequência normal das instruções é alterada por motivos externos (e não só) ao processador; Necessidade de efectuar algum processamento específico; Operações de entrada/saída (teclado, porto série, etc.). Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 27 / 47 Exemplos: Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 28 / 47
Exemplos: Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 29 / 47 Alternativa ao uso de interrupções: Polling - o processador amostra, a intervalos regulares, o valor sob observação; Problema: sobrecarga grande do processador!!! Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 30 / 47
Alternativa ao uso de interrupções: Polling - o processador amostra, a intervalos regulares, o valor sob observação; Problema: sobrecarga grande do processador!!! Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 30 / 47 Alternativa ao uso de interrupções: Polling - o processador amostra, a intervalos regulares, o valor sob observação; Problema: sobrecarga grande do processador!!! Melhor solução - : Possibilidade de um dispositivo exterior sinalizar que a sequência normal de instruções deve ser interrompida e que o controlo deve ser transferido para uma rotina de atendimento da interrupção. Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 30 / 47
Alternativa ao uso de interrupções: Polling - o processador amostra, a intervalos regulares, o valor sob observação; Problema: sobrecarga grande do processador!!! Melhor solução - : Possibilidade de um dispositivo exterior sinalizar que a sequência normal de instruções deve ser interrompida e que o controlo deve ser transferido para uma rotina de atendimento da interrupção. Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 30 / 47 Sinalização das : Cada processador disponibiliza uma ou mais linhas de interrupção que são activadas pelos dispositivos exteriores; Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 31 / 47
Sinalização das : Cada processador disponibiliza uma ou mais linhas de interrupção que são activadas pelos dispositivos exteriores; Identificação das : Após ter recebido a indicação de que uma interrupção vai ser atendida, o dispositivo utiliza um dos barramentos exteriores para identificar a interrupção - vector de interrupção; uma única linha de interrupção pode sinalizar várias interrupções diferentes! Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 31 / 47 Atendimento das : O processador acede a uma tabela que indica qual o endereço da sub-rotina que deve ser usada para atender o pedido - tabela de rotinas de interrupção; Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 32 / 47
Atendimento das : O processador acede a uma tabela que indica qual o endereço da sub-rotina que deve ser usada para atender o pedido - tabela de rotinas de interrupção; Transfere o controlo da execução para esta sub-rotina, após a salvaguarda (automática) na pilha de: Registo de Estado (RE); Program Counter (PC) Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 32 / 47 Atendimento das : O processador acede a uma tabela que indica qual o endereço da sub-rotina que deve ser usada para atender o pedido - tabela de rotinas de interrupção; Transfere o controlo da execução para esta sub-rotina, após a salvaguarda (automática) na pilha de: Registo de Estado (RE); Program Counter (PC) Para que os registos RE e PC sejam correctamente recuperados, as rotinas de atendimento das interrupções devem obrigatoriamente terminar com a instrução RTI (em vez de RET, como habitualmente). Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 32 / 47
Tabela de rotinas de interrupção: Residente numa zona fixa de memória; Possui tantas entradas quantas as interrupções do processador; Cada entrada contém o endereço do início da rotina de tratamento dessa interrupção. Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 33 / 47 Tabela de rotinas de interrupção: Residente numa zona fixa de memória; Possui tantas entradas quantas as interrupções do processador; Cada entrada contém o endereço do início da rotina de tratamento dessa interrupção. No esta tabela começa no endereço FE00h; Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 33 / 47
Tabela de rotinas de interrupção: Residente numa zona fixa de memória; Possui tantas entradas quantas as interrupções do processador; Cada entrada contém o endereço do início da rotina de tratamento dessa interrupção. No esta tabela começa no endereço FE00h; Exemplo: Caso seja activada a interrupção n, a execução da rotina de atendimento da interrupção ocorrerá a partir do valor guardado na posição de memória FE00h + n: PC M[FE00h + n] Se for a interrupção 5... PC M[FE05h] Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 33 / 47 NOTA: as interrupções podem ocorrer em qualquer momento, sem que o processador o possa prever... Exemplo: entre a execução de uma instrução aritmética e a instrução de salto condicional que dela depende: Loop: DEC R1 Interrupç~ao!!! BR.Z Loop Daí a necessidade em salvaguardar o Registo de Estado (RE)... Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 34 / 47
Activação/Inibição das : O programador pode desactivar um bit de estado (E) de modo a impedir que as interrupções sejam atendidas; Necessário em zonas de código onde a ocorrência de uma interrupção pode causar comportamentos indesejados; Como? Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 35 / 47 Activação/Inibição das : O programador pode desactivar um bit de estado (E) de modo a impedir que as interrupções sejam atendidas; Necessário em zonas de código onde a ocorrência de uma interrupção pode causar comportamentos indesejados; Como? []: Instruções ENI e DSI. Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 35 / 47
Activação/Inibição das : O programador pode desactivar um bit de estado (E) de modo a impedir que as interrupções sejam atendidas; Necessário em zonas de código onde a ocorrência de uma interrupção pode causar comportamentos indesejados; Como? []: Instruções ENI e DSI. No as interrupções são automaticamente inibidas durante o tempo em que o processador executa uma rotina de atendimento de interrupção. Porquê? Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 35 / 47 Activação/Inibição das : É ainda possível filtrar as interrupções que devem ser atendidas ou impedir o atendimento de outras através de uma máscara de interrupções: Colocar a zero o bit com peso igual ao vector de interrupção que se pretende inibir: 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 36 / 47
Activação/Inibição das : É ainda possível filtrar as interrupções que devem ser atendidas ou impedir o atendimento de outras através de uma máscara de interrupções: Colocar a zero o bit com peso igual ao vector de interrupção que se pretende inibir: 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 Em geral, a máscara reside numa determinada posição de memória do processador: []: endereço FFFAh Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 36 / 47 Activação/Inibição das : É ainda possível filtrar as interrupções que devem ser atendidas ou impedir o atendimento de outras através de uma máscara de interrupções: Colocar a zero o bit com peso igual ao vector de interrupção que se pretende inibir: 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 Em geral, a máscara reside numa determinada posição de memória do processador: []: endereço FFFAh Exemplo: activação das interrupções 0, 1 e 3 Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 36 / 47
Activação/Inibição das : É ainda possível filtrar as interrupções que devem ser atendidas ou impedir o atendimento de outras através de uma máscara de interrupções: Colocar a zero o bit com peso igual ao vector de interrupção que se pretende inibir: 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 Em geral, a máscara reside numa determinada posição de memória do processador: []: endereço FFFAh Exemplo: activação das interrupções 0, 1 e 3 MOV MOV R1, 0000 0000 0000 1011b M[FFFAh], R1 Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 36 / 47 Como é que é desencadeada uma interrupção? Botões de Pressão: Estão disponíveis 15 botões de pressão, cada um associado a um vector de interrupção; O accionamento do botão de índice i faz com que o chame a rotina de interrupção associada ao vector i: PC <- M[FE00h+i] Temporizador (vemos a seguir) Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 37 / 47
Passos necessários para a utilização de interrupções: 0. Inicialização do Stack!!! 1. Preenchimento da tabela de interrupções 2. Inicialização da máscara de interrupções 3. Activação das interrupções Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 38 / 47 Passos necessários para a utilização de interrupções: 0. Inicialização do Stack!!! SP INICIAL EQU FDFFh ; Programa principal Inicio: MOV R7, SP INICIAL MOV SP, R7... 1. Preenchimento da tabela de interrupções 2. Inicialização da máscara de interrupções 3. Activação das interrupções Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 38 / 47
Passos necessários para a utilização de interrupções: 0. Inicialização do Stack!!! 1. Preenchimento da tabela de interrupções ; Tabela de interrupç~oes ORIG FE00h INT0 WORD... INT1 WORD ResetCont INT2 WORD... ; Rotina de atendimento da interrupç~ao ResetCont: MOV M[Contador], R0 RTI 2. Inicialização da máscara de interrupções 3. Activação das interrupções Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 38 / 47 Passos necessários para a utilização de interrupções: 0. Inicialização do Stack!!! 1. Preenchimento da tabela de interrupções 2. Inicialização da máscara de interrupções INT MASK ADDR EQU FFFAh INT MASK EQU 0000000000000010b ; Programa principal Inicio:... MOV MOV... 3. Activação das interrupções R7, INT MASK M[INT MASK ADDR], R7 Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 38 / 47
Passos necessários para a utilização de interrupções: 0. Inicialização do Stack!!! 1. Preenchimento da tabela de interrupções 2. Inicialização da máscara de interrupções 3. Activação das interrupções ; Programa principal Inicio:... ENI... Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 38 / 47 Exemplo: SP INICIAL EQU FDFFh INT MASK ADDR EQU FFFAh INT MASK EQU 0000000000000001b ; Tabela de interrupç~oes ORIG FE00h INT0 WORD ResetCont ORIG 0000h ; Programa principal Inicio: MOV R7, SP INICIAL MOV SP, R7 MOV R7, INT MASK MOV M[INT MASK ADDR], R7 ENI... ; Rotina de atendimento da interrupç~ao ResetCont: MOV M[Contador], R0 RTI Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 39 / 47
Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 40 / 47 Como tratar a passagem do tempo num computador? Solução: temporizadores (timers) Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 41 / 47
Como tratar a passagem do tempo num computador? Solução: temporizadores (timers) O possui um temporizador (timer) para permitir contabilizar de forma precisa a passagem do tempo; Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 41 / 47 Como tratar a passagem do tempo num computador? Solução: temporizadores (timers) O possui um temporizador (timer) para permitir contabilizar de forma precisa a passagem do tempo; Implementado através de um contador que é decrementado a intervalos de tempo regulares de 100 ms; Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 41 / 47
Como tratar a passagem do tempo num computador? Solução: temporizadores (timers) O possui um temporizador (timer) para permitir contabilizar de forma precisa a passagem do tempo; Implementado através de um contador que é decrementado a intervalos de tempo regulares de 100 ms; Como contar 1 minuto e 30 segundos? Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 41 / 47 Como tratar a passagem do tempo num computador? Solução: temporizadores (timers) O possui um temporizador (timer) para permitir contabilizar de forma precisa a passagem do tempo; Implementado através de um contador que é decrementado a intervalos de tempo regulares de 100 ms; Como contar 1 minuto e 30 segundos? 1m30s = 90s = 900 intervalos de 100 ms Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 41 / 47
O temporizador é controlado por duas posições de memória: endereço FFF6h - corresponde ao temporizador propriamente dito, contendo o número de unidades de tempo a decrementar; endereço FFF7h - permite parar (=0) ou activar (=1) o funcionamento do contador; Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 42 / 47 O temporizador é controlado por duas posições de memória: endereço FFF6h - corresponde ao temporizador propriamente dito, contendo o número de unidades de tempo a decrementar; endereço FFF7h - permite parar (=0) ou activar (=1) o funcionamento do contador; Inicialmente a posição de memória FFF7h está a 0 sendo necessário escrever lá o valor 1 para que a contagem tenha início; Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 42 / 47
O temporizador é controlado por duas posições de memória: endereço FFF6h - corresponde ao temporizador propriamente dito, contendo o número de unidades de tempo a decrementar; endereço FFF7h - permite parar (=0) ou activar (=1) o funcionamento do contador; Inicialmente a posição de memória FFF7h está a 0 sendo necessário escrever lá o valor 1 para que a contagem tenha início; Quando o temporizador atinge o valor 0 (fim de contagem), a posição de memória FFF7h é automaticamente colocada a 0, parando a contagem; Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 42 / 47 O temporizador é controlado por duas posições de memória: endereço FFF6h - corresponde ao temporizador propriamente dito, contendo o número de unidades de tempo a decrementar; endereço FFF7h - permite parar (=0) ou activar (=1) o funcionamento do contador; Inicialmente a posição de memória FFF7h está a 0 sendo necessário escrever lá o valor 1 para que a contagem tenha início; Quando o temporizador atinge o valor 0 (fim de contagem), a posição de memória FFF7h é automaticamente colocada a 0, parando a contagem; Para iniciar nova contagem será pois necessário colocar novo valor em FFF6h e colocar 1 em FFF7h. Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 42 / 47
O temporizador está associado à interrupção 15, a qual é activada quando o contador atinge o valor 0 Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 43 / 47 O temporizador está associado à interrupção 15, a qual é activada quando o contador atinge o valor 0: Para garantir a máxima precisão, é conveniente que a re-programação do timer seja feita pela própria rotina de atendimento da interrupção!!! Re-iniciar intervalo de contagem em FFF6h Re-activar contagem em FFF7h Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 43 / 47
(exemplo) TopoPilha EQU FDFFh ; endereço do topo da pilha InterrupMask EQU FFFAh ; endereço da Máscara de Interrupç~oes TimerValue EQU FFF6h ; endereço do Temporizador TimerControl EQU FFF7h ; endereço do controlo do temporizador Int15_mask EQU 8000h ; 1000 0000 0000 0000 b TimeLong EQU 0050h EnableTimer EQU 0001h ORIG FE0Fh ; FE0Fh = FE00h + Fh (Fh = 15) INT15 WORD TimerSub ; Preenchimento da posiç~ao 15 da Tabela de Interrupç~oes ORIG 0000h MOV R1,TopoPilha MOV SP,R1 ; inicializa SP MOV R1,Int15_mask MOV M[InterruptMask],R1 ; Permite a interrupç~ao 15 (timer) MOV R1,TimeLong MOV M[TimerValue],R1 ; definir valor de contagem do timer MOV R1,EnableTimer MOV M[TimerControl],R1 ; inicia contagem ENI ; aceita interrupç~oes... ; esta subrotina é chamada quando o temporizador chegou ao fim (0) vai ser necessário ; definir novo valor de contagem e permitir que essa contagem comece ( M[FFF7h] = 1 ) TimerSub: PUSH R1 MOV R1,TimeLong MOV M[TimerValue],R1 ; definir valor de contagem do timer MOV R1,EnableTimer MOV M[TimerControl],R1 ; inicia contagem... POP R1 RTI Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 44 / 47 Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 45 / 47
Tradução de linguagem de alto nível para Assembly: Constantes Variáveis Estruturas de controlo Chamadas a sub-rotinas Passagem de parâmetros para sub-rotinas: Por registo Por memória Pela pilha Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 46 / 47 Nota de Agradecimento Agradecimento Algumas páginas desta apresentação foram extraidas de: [1] José Carlos Monteiro, Arquitectura de Computadores, Instituto Superior Técnico (IST), Universidade Técnica de Lisboa, Portugal, 2010. Prof. Nuno Roma ACom 2015/16 (MEAer) - DEEC-IST 47 / 47