Organização Básica de computadores e linguagem de...

Post on 12-Nov-2018

214 views 0 download

Transcript of Organização Básica de computadores e linguagem de...

Organização Básica de computadores e linguagem de

montagem

2o Semestre de 2011

Prof. Edson Borin

Entrada e Saída

Entrada e Saída

• Dispositivos de E/S (Entrada/Saída) ou I/O (Input/Output) permitem a entrada e saída de dados do processador.

• Ex: Teclado, Mouse, Monitor, Impressora, Placa de rede, disco rígido, unidade de CD-ROM.

• Como funciona?

Saída6 CAPÍTULO 2. ORGANIZAÇÃO BÁSICA DE COMPUTADORES

Barramento de dados

Barramento de controle

Barramento de endereço

Processador Memória

Entradae

Saída

Figura 2.1: Esquema simplificado de um computador

os dados podem trafegar nas duas direções, enquanto que no barramento de

endereços a informação trafega em uma única direção. O barramento de en-

dereços contém tantos fios (bits) quantos forem necessários para endereçar

todas as palavras da memória. O número de fios (bits) do barramento de

dados é igual ao tamanho de cada palavra na memória. Assim, para comu-

nicação com uma memória organizada como 2 MB palavras de 32 bits (total

de 8 MB), o processador deve dispor de um barramento de dados com 32 fios

(largura da palavra), e um barramento de endereço com pelo menos 21 fios

(para endereçar 2 MB palavras).

A comunicação entre o processador e a memória é feita da seguinte ma-

neira. Quando o processador necessita de um dado na memória, ele especifica

pelo barramento de endereços qual o endereço de memória da palavra que

contém o dado. Feito isto, o processador especifica pelo barramento de con-

trole que a operação é de leitura em memória (note que isto pode ser realizado

com apenas um fio do barramento). A memória coloca então o valor da palavra

especificada no barramento de dados, que é finalmente lido pelo processador.

A operação de escrita na memória é similar. O processador coloca no

barramento de endereços o endereço da palavra que deve ser modificada, e no

barramento de dados o valor a ser escrito. O processador indica pelo barra-

Escrever em um dispositivode Saída.

Saída

• Como o programa realiza uma saída?• Escreve em uma porta, que está associada a um

dispositivo de saída.• 2 opções comuns:

–Instrução especial para saída. Ex:out 10h, r1

–Instrução de store em uma faixa de endereços reservada. Ex:

st 10h, r1Como o processador sabe se é uma saída ou acesso à memória?

Entrada6 CAPÍTULO 2. ORGANIZAÇÃO BÁSICA DE COMPUTADORES

Barramento de dados

Barramento de controle

Barramento de endereço

Processador Memória

Entradae

Saída

Figura 2.1: Esquema simplificado de um computador

os dados podem trafegar nas duas direções, enquanto que no barramento de

endereços a informação trafega em uma única direção. O barramento de en-

dereços contém tantos fios (bits) quantos forem necessários para endereçar

todas as palavras da memória. O número de fios (bits) do barramento de

dados é igual ao tamanho de cada palavra na memória. Assim, para comu-

nicação com uma memória organizada como 2 MB palavras de 32 bits (total

de 8 MB), o processador deve dispor de um barramento de dados com 32 fios

(largura da palavra), e um barramento de endereço com pelo menos 21 fios

(para endereçar 2 MB palavras).

A comunicação entre o processador e a memória é feita da seguinte ma-

neira. Quando o processador necessita de um dado na memória, ele especifica

pelo barramento de endereços qual o endereço de memória da palavra que

contém o dado. Feito isto, o processador especifica pelo barramento de con-

trole que a operação é de leitura em memória (note que isto pode ser realizado

com apenas um fio do barramento). A memória coloca então o valor da palavra

especificada no barramento de dados, que é finalmente lido pelo processador.

A operação de escrita na memória é similar. O processador coloca no

barramento de endereços o endereço da palavra que deve ser modificada, e no

barramento de dados o valor a ser escrito. O processador indica pelo barra-

Ler de um dispositivode Entrada.

Entrada

• Como o programa realiza uma entrada?• Lê de uma porta, que está associada a um

dispositivo de entrada.• 2 opções comuns:

–Instrução especial para entrada. Ex:in r1, 10h

–Instrução de load em uma faixa de endereços reservada. Ex:

ld r1, 10hComo o processador sabe se é uma entrada ou acesso à memória?

No Faíska

• Entrada–in rdest, expr8–in rdest, rfonte–inb rdest, expr8–inb rdest, rfonte

• Saída–out expr8, rdest–out rfonte, rdest–outb expr8, rdest–outb rfonte, rdest

Exemplo - Elevador

• Dois dispositivos. 1 de entrada e 1 de saída

• Entrada:–sensor de andar. Conectado à porta 20h.–quando acessado, responde com um byte indicando o andar atual (de 0 a 9)

Exemplo - Elevador

• Saída–mostrador digital: Conectado à porta 30h–dispositivo com 7 segmentos (a,b,...,g) luminosos que

ficam ligados ou desligados de acordo com o dado no registrador de controle.

–a saída corresponde em escrever um byte no registrador de controle.

4 CAPÍTULO 5. ENTRADA E SAÍDA

elevador:

1 SENSOR_DATA equ 20h ; porta do sensor

23 inb r0,SENSOR_DATA ; le valor do andar corrente

O mostrador é um dispositivo apenas de saída, com um único dígito, conforme a

Figura 5.1 (a). Os segmentos do mostrador, mais o ponto decimal, podem ser indivi-

dualmente ligados ou desligados. Cada segmento corresponde a um bit em um byte,

mostrado na Figura 5.1 (b). O mostrador está conectado à porta 30h, chamada de porta

de dados do mostrador. A operação de escrita de um byte nessa porta controla quais

segmentos são acesos e quais são apagados. Se um determinado bit tem o valor 1, o

segmento correspondente é aceso, caso contrário o segmento correspondente é apagado.

Assim, por exemplo, se um byte com o valor 7eh for escrito na porta do mostrador, o

dígito ‘0’ será mostrado (apenas os segmentos p e g apagados) e se um byte com o valor

30h for escrito na porta do mostrador o dígito ‘1’ será mostrado (apenas os segmentos be c ligados).

a

b

c

d

e

fg

p

bp gca e fd

6 0157 3 24

(a) (b)

Figura 5.1: Mostrador de sete segmentos (a) e os bits correspondentes no byte de controle

(b).

Exercício 5.1 Escrever um procedimento que atualize o valor do mostrador do elevador

com o valor lido do sensor.

Exemplo - Elevador5.2. SINCRONIZAÇÃO 5

1 ; *************

2 ; AtualizaAndar

3 ; *************

4 ; Lê andar corrente do sensor e atualiza valor do mostrador

5 ; Destrói: r0 e r2

67 ; definição das portas usadas

8 SENSOR_DATA equ 20h ; porta do sensor

9 DISPLAY_DATA equ 30h ; porta do mostrador

1011 AtualizaAndar:

12 inb r0,SENSOR_DATA ; lê valor do andar corrente

13 set r2,tab_digitos ; prepara para determinar codificação

14 add r2,r0 ; do digito lido

15 ldb r2,(r2) ; carrega a codificação correspondente

16 outb DISPLAY_DATA,r2; escreve no mostrador

17 ret

1819 ; tabela de codificação de dígitos

20 tab_digitos:

21 db 7eh,30h,6dh,79h,33h,5bh,5fh,70h,7fh,7bh

O procedimento AtualizaAndar simplesmente lê o valor do andar corrente e atualiza

o mostrador com o valor correspondente. A codificação dos dígitos é armazenada no

vetor de bytes tab_digitos. O valor lido do sensor é usado como índice nesse vetor

para determinar a codificação do dígito a ser mostrado.

5.2 Sincronização

Os exemplos vistos acima são muito simples, e não ilustram a principal diferença entre

acessos à memória e a dispositivos de E/S, que é a sincronização no acesso. No caso de

acessos de leitura à memória, como vimos, o processador espera apenas um tempo fixo

(chamado tempo de resposta, que é o tempo com que a memória responde a um acesso

de leitura mais o tempo necessário para que os barramentos se estabilizem), e executa

a leitura, tendo a certeza de que, se a memória estiver especificada corretamente para

atender a esse tempo de resposta, o dado estará disponível no barramento de dados.

Considere agora um dispositivo de entrada bastante utilizado, um teclado. Nos nossos

exemplos vamos utilizar um teclado similar aos utilizados em telefones, mostrado na

figura abaixo.

Considere que o teclado possa ser acessado através da porta 40h: uma leitura nessa

porta, chamada de porta de dados do teclado, recebe um valor correspondente à última

tecla pressionada. No entanto, como saber se uma tecla foi realmente pressionada (e

ainda não foi lida)? Para resolver esse problema, o teclado possui mais uma porta, cha-

mada de porta de estado do teclado, que pode ser consultada para saber o estado do

teclado. O estado do teclado é indicado por um byte em que os dois bits menos signifi-

cativos representam condições de operação do teclado:

Problemas com a abordagem anterior

• Suponha que o elevador suba 8 andares.

• Quando devemos chamar o procedimento AtualizaAndar?

Outro Exemplo - Teclado

• Teclado:–Dispositivo de Entrada–Duas portas: dados (40h) e estado (41h)–Dado lido representa caractere

inb r1, 40h ; lê dadoinb r2, 41h ; lê estado

Teclado simples

1 2 3

4 5 6

7 8 9

* 0 #

• E se o teclado for apertado múltiplas vezes?

• Como saber se o dado que está lá já foi lido?

Outro Exemplo - Teclado

• Teclado:–um bit de estado indica se o dado atual não foi lido pelo processador ainda (READY).

–outro bit de estado indica se mais de um botão já foi apertado antes do processador ler o dado, ou seja, houve dado perdido (OVRN)

Teclado simples

1 2 3

4 5 6

7 8 9

* 0 #

Outro Exemplo - Teclado (Busy waiting)

5.2. SINCRONIZAÇÃO 7

1 ; *******

2 ; LeTecla

3 ; *******

4 ; Le valor de tecla no teclado

5 ; Destroi: r0, r1, flags

6 ; Retorna: r0 com valor da tecla lida (de 0 a 11)

78 ; enderecos de portas

9 KEYBD_DATA equ 40h ; porta de dados

10 KEYBD_STAT equ 41h ; porta de estado

1112 ; bits de estado

13 KEYBD_READY equ 1 ; bit READY

14 KEYBD_OVRN equ 2 ; bit OVRN

1516 LeTecla:

17 inb r0,KEYBD_STAT ; lê porta de estado

18 set r1,KEYBD_READY

19 test r0,r1 ; dado pronto para ser lido?

20 jz LeTecla ; espera que dado esteja pronto

21 set r1,KEYBD_READY

22 test r0,r1 ; houve erro?

23 jnz Erro ;

24 inb r0,KEYBD_DATA ; le porta de dados

25 ret

26 ; aqui trata erro (não mostrado)

27 Erro:

O procedimento LeTecla espera até que uma tecla tenha sido pressionada e re-

torna o valor da tecla no registrador r0. O problema com esse procedimento é que,

como não é possível rever quando uma tecla será pressionada, o processador pode fi-

car muito tempo no laço das linhas 15 18. Esse é um problema típico de sincronização

da comunicação processador – E/S, e a solução adotada pelo procedimento LeTecla é

chamada de “espera forçada”.

Uma maneira de amenizar o problema é modificar o procedimento LeTecla para

retornar imediatamente se nenhuma tecla foi pressionada desde a última leitura:

Problemas com a abordagem anterior

• Suponha que o usuário demore para apertar algo.

• O que o processador faz?

Problemas com a abordagem anterior

• Suponha que o usuário demore para apertar algo.

• O que o processador faz?

• Como melhorar?

–Verifique o teclado de tempos em tempos e faça algum trabalho útil no entre as verificações.

•Ainda há o risco do usuário pressionar a tecla múltiplas vezes antes do programa verificar se alguma tecla foi pressionada.

•Talvez o usuário não seja tão rápido para causar este problema, mas e se for uma placa de rede.

Problemas com a abordagem anterior

• Suponha que o usuário demore para apertar algo.

• O que o processador faz?

• Como melhorar?

–Verifique o teclado de tempos em tempos e faça algum trabalho útil no entre as verificações.

•Ainda há o risco do usuário pressionar a tecla múltiplas vezes antes do programa verificar se alguma tecla foi pressionada.

•Talvez o usuário não seja tão rápido para causar este problema, mas e se for uma placa de rede.

Interrupção: O dispositivo

avisa o processador quando

acondeceu alguma coisa!

Interrupção

• Iniciativa de comunicação é do periférico• Exemplo:

–Quando o dado está disponível, o teclado “interrompe” o processador.

–O processador pára o que está fazendo para atender o teclado

–Após o processamento da leitura, o processador continua com o que estava fazendo.

Interrupção

• O processador pára o que está fazendo para atender o teclado.

• O que acontece com o programa que o processador estava executando???

Interrupção

• O processador pára o que está fazendo para atender o teclado.

• O que acontece com o programa que o processador estava executando???–Antes de tratar a interrupção, é importante salvar

todo o “contexto” do programa que está executando•Registradores,•flags,•Manter a pilha consistente...

Exemplo: Interrupção

set r1, 1000loop: call algo_util sub r1, 1h cmp r1, 0 jnz loop sys 20h

6 CAPÍTULO 2. ORGANIZAÇÃO BÁSICA DE COMPUTADORES

Barramento de dados

Barramento de controle

Barramento de endereço

Processador Memória

Entradae

Saída

Figura 2.1: Esquema simplificado de um computador

os dados podem trafegar nas duas direções, enquanto que no barramento de

endereços a informação trafega em uma única direção. O barramento de en-

dereços contém tantos fios (bits) quantos forem necessários para endereçar

todas as palavras da memória. O número de fios (bits) do barramento de

dados é igual ao tamanho de cada palavra na memória. Assim, para comu-

nicação com uma memória organizada como 2 MB palavras de 32 bits (total

de 8 MB), o processador deve dispor de um barramento de dados com 32 fios

(largura da palavra), e um barramento de endereço com pelo menos 21 fios

(para endereçar 2 MB palavras).

A comunicação entre o processador e a memória é feita da seguinte ma-

neira. Quando o processador necessita de um dado na memória, ele especifica

pelo barramento de endereços qual o endereço de memória da palavra que

contém o dado. Feito isto, o processador especifica pelo barramento de con-

trole que a operação é de leitura em memória (note que isto pode ser realizado

com apenas um fio do barramento). A memória coloca então o valor da palavra

especificada no barramento de dados, que é finalmente lido pelo processador.

A operação de escrita na memória é similar. O processador coloca no

barramento de endereços o endereço da palavra que deve ser modificada, e no

barramento de dados o valor a ser escrito. O processador indica pelo barra-

Teclado simples

1 2 3

4 5 6

7 8 9

* 0 #

Exemplo: Interrupçãoset r1, 1000loop: call algo_util sub r1, 1h cmp r1, 0 jnz loop sys 20h

trata_teclado: push r0 inb r0, 40h ... ; faça algo pop r0 iret

6 CAPÍTULO 2. ORGANIZAÇÃO BÁSICA DE COMPUTADORES

Barramento de dados

Barramento de controle

Barramento de endereço

Processador Memória

Entradae

Saída

Figura 2.1: Esquema simplificado de um computador

os dados podem trafegar nas duas direções, enquanto que no barramento de

endereços a informação trafega em uma única direção. O barramento de en-

dereços contém tantos fios (bits) quantos forem necessários para endereçar

todas as palavras da memória. O número de fios (bits) do barramento de

dados é igual ao tamanho de cada palavra na memória. Assim, para comu-

nicação com uma memória organizada como 2 MB palavras de 32 bits (total

de 8 MB), o processador deve dispor de um barramento de dados com 32 fios

(largura da palavra), e um barramento de endereço com pelo menos 21 fios

(para endereçar 2 MB palavras).

A comunicação entre o processador e a memória é feita da seguinte ma-

neira. Quando o processador necessita de um dado na memória, ele especifica

pelo barramento de endereços qual o endereço de memória da palavra que

contém o dado. Feito isto, o processador especifica pelo barramento de con-

trole que a operação é de leitura em memória (note que isto pode ser realizado

com apenas um fio do barramento). A memória coloca então o valor da palavra

especificada no barramento de dados, que é finalmente lido pelo processador.

A operação de escrita na memória é similar. O processador coloca no

barramento de endereços o endereço da palavra que deve ser modificada, e no

barramento de dados o valor a ser escrito. O processador indica pelo barra-

Teclado simples

1 2 3

4 5 6

7 8 9

* 0 #

Interrupção

• Diversos dispositivos de E/S.

• Como chamar o tradador de interrupção correto?

• Diversas opções:

–a) Um único tratador que verifica qual dispositivo interrompeu e chama o procedimento adequada.

–b) Múltiplos tratadores, um para cada dispositivo.

•Vetor de interrupções!

–Armazena o endereço das rotinas de tratamento.

Exemplo: Interrupçõesorg 0004hdw trata_teclado

org 0404hset r1, 1000loop: call algo_util sub r1, 1h cmp r1, 0 jnz loop sys 20h

org 0500htrata_teclado: push r0 inb r0, 40h ... ; faça algo pop r0 iret

0000 ...

0004 0500

.... ...

0404 set r1,1000

040c call algo_util

0414 sub r1, 1h

0418 cmp r1, 0

041c jnz 040c

0420 sys 20

.... ...

0500 push r0

0504 inb r0, 40h

.... ...

0520 pop r0

0524 iret

Vetor de Interrupções

Memória

Principal

0x15000x14FC0x14F80x14F40x14F00x14EC0x14E8

0x0000

Pilh

a

Interrupções no Faíska• Vetor de interrupções com 256 entradas• Endereço 0 ao 1023• Ao receber uma interrupção, o processador:

– termina a execução da instrução atual

– empilha o endereço da instrução atual (próxima)

– empilha o registrador de bits de estado– consulta o controlador de interrupções para determinar o tipo

de interrupção (T) mais prioritária

– Acessa a memória para determinar o endereço do tratador da interrupção. O acesso é no endereço 4 * T. O vetor de interrupções começa no endereço 0 da memória e cada entrada possui 4 bytes, logo a T-ésima entrada está no endereço 4 * T.

– desvia a execução para a rotina de tratamento: IP <= endereço do tratador

Interrupções no Faíska• Rotinas de interrupção retornam à execução do programa com a

instrução “iret”. Esta instrução:– Desempilha o registrador de bits de estado,

– Desmpilha o endereço da próxima instrução a ser executada, e

– Desvia a execução para a próxima instrução.

Interrupções

• E se ocorrer outra interrupção enquanto o processador estiver tratando uma interrupção???

Interrupções

• E se ocorrer outra interrupção enquanto o processador estiver tratando uma interrupção???–Se a nova interrupção for de maior prioridade, é

melhor interromper o tratamento atual e tratar a nova interrupção.

• Mas e se a rotina estiver “conversando” com um dispositivo que não pode esperar?

Interrupções

• E se ocorrer outra interrupção enquanto o processador estiver tratando uma interrupção???–Se a nova interrupção for de maior prioridade, é

melhor interromper o tratamento atual e tratar a nova interrupção.

• Mas e se a rotina estiver “conversando” com um dispositivo que não pode esperar?–Neste caso, podemos inibir interrupções!

•cli: clear interrupts•sti: set interrupts

Exemplo: relógioorg 12h * 4dw timer ; Interrupção do timerorg 400htempo_seg: ds 4 ; Variavel para guardar o tempo e seg....set r0, 1000 ; Programar o timer paraout TIMER_DATA, r0 ; interromper a cada 1000 ms

loop: ; laço principal. call mostra_tempo ; jmp loop

timer: ; tratador de interrupção push r0 ; incrementa o tempo em segundos. ld r0, tempo_seg add r0, 1 st tempo_seg, r0 pop r0 iret

Exemplo: relógioorg 12h * 4dw timer ; Interrupção do timerorg 400htempo_seg: ds 4 ; Variavel para guardar o tempo e seg....set r0, 1000 ; Programar o timer paraout TIMER_DATA, r0 ; interromper a cada 1000 ms

loop: ; laço principal. call mostra_tempo ; wait ; Dorme!!! jmp loop

timer: ; tratador de interrupção push r0 ; incrementa o tempo em segundos. ld r0, tempo_seg add r0, 1 st tempo_seg, r0 pop r0 iret