Você está na página 1de 10

Lista de Exercícios de Arquitetura e Organização de Computadores

Professor Dr. Ronaldo Luiz Alonso

1. No documento de definição da ISA, explique as diferenças entre seções normativas e


seções informativas.
R: Nível ISA - é a interface entre o software e o hardware; seções normativas: que
impoem requisitos que devem ser atendidos na implementação seções informativas:
que ajuda o leitor a entender os requisitos sem entrar na definição formal

2. Explique o que é alinhamento de memória.


• R: Existe alinhamento quando palavras de 4 bytes só aparecem em endereços
múltiplos de 4, não podem começar por exemplo em 1 ou 2.
• A exigência do alinhamento por parte de algumas arquiteturas é justificada pelo fato
das memórias operarem c/ mais eficiência quando as informações são armazenadas
desta maneira.

3. Explique a semântica de memória serializada e a não serializada. Em qual delas é


necessário o uso da instrução SYNC? O que faz esta instrução? R: A semântica da
memória é mais um aspecto do modelo de memória do nível ISA. Em muitos projetos,
as microinstruções são reordenadas. Há uma chance da memória não ter o
comportamento esperado. Este problema é agravado como uso de
multiprocessadores. Há uma sequência de instruções de leitura/escrita a uma
memória compartilhada. Existem diversas soluções para este problema, como:
Serializar requisições de memória; Não prover garantias; Usar modelos de memória
intermediários. Serializar Requisições de Memória  Cada instrução é concluída antes da
próxima ser emitida. Forma simples de implementar. Degrada o desempenho do
sistema. Não Prover Garantias O programa deve executar uma instrução SYNC sempre
que necessitar uma ordenação. Bloqueia todas as requisições de memória até que as
anteriores tenham concluído.

4. No Pentium II explique o que se entende por modo real, modo virtual e modo
protegido.
R: Três modos de operação: Dois para utilizá−lo com o 8088.− Modo Real: Todas as
características adicionadas a partir do 8088 são desligadas e o Pentium II operara como um
simples 8088. Se o programa fizer algo errado toda a máquina para.
− Modo 8086 Virtual: Possibilita a execução de programas
compilados para o 8088 de maneira protegida. Neste modo um sistema
operacional está no controle de toda a máquina. Se o programa fizer algo errado
o sistema operacional é notificado, ao invés de toda a máquina parar
− Modo Protegido: o Pentium II opera como um Pentium II. Quatro
níveis de privilégio estão disponíveis e controlados por bits na PSW.

5. Quais registradores do Pentium II têm propósito geral? E quais têm propósito


específico?
R: Registradores de uso geral: Utilizados para armazenar variáveis locais e resultados
intermediários. Exemplos: EAX, EBX, ECX e EDX. Tais registradores possibilitam o
acesso rápido a dados muito utilizados.
Registradores de uso específico: São registradores que são usados para dados
específicos do processamento realizados pela CPU e que não podem ser utilizados para
outra finalidade. Exemplo: PC: Program Counter, SP: Stack Pointer, SS: Stack Segment,
CS: Code Segment, IP: Instruction Pointer, DS: Data Segment e assim por diante.

6. Explique como funciona as janelas de registradores utilizadas na UltraSparc II.


− simulação de uma pilha, usando registradores.
− Existem vários conjuntos de registradores, tal como existem vários
quadros na pilha.
− Exatamente 32 registradores estão visíveis a qualquer instantes
− CWP possui a informação de qual conjunto de registradores está atualmente em uso.
− A chamada de um procedimento esconde o conjunto antigo de
registradores e fornece um novo conjunto decrementando CWP.

7. Explique com exemplos no Pentium II os seguintes modos de endereçamento:


Endereçamento direto: A instrução contém o endereço (memória) de um operando. O conteúdo da memória
pode ser alterado, mas não o endereço. Funciona bem com variáveis globais, ex: MOV AL, [0004];
Endereçamento indireto: O endereço de uma variável é armazenado em um registrador.
Registrador funciona como um ponteiro. Ex: MOV AL,[BX]
Endereçamento imediato: A instrução contém o dado e não o endereço do dado => Operando imediato.
Não necessita de memória extra para buscar o operando. Funciona somente com constantes ex: MOV AL, 4;
Endereçamento indexado: A palavra da memória é referenciada como um offset a partir de um
registrador. Endereço fornecido por um registrador+offset ex: MOV AL,[BX+0020]
Endereçamento base-indexado: A palavra da memória é referenciada pela soma de dois registradores.
Endereço fornecido por registrador_base+registrador(+offset) ex: MOV AL,[SI+BX+0005]

8. Dê um exemplo de arquitetura que usa endereçamento usando estrutura de pilha


R: Extremo da economia de bits: todos operandos implícitos numa pilha Utiliza a idéia da
notação pós-fixada, Uma boa arquitetura deveria decidir entre duas opções: oferecer ao
compilador todos os modos para todas as instruções, deixando que ele decida livremente,
oferecer ao compilador apenas uma possibilidade . Qualquer coisa entre essas duas exigirá que
o compilador tome decisões sofisticadas; O Pentium II é um exemplo desse problema,
dificultando a escrita de compiladores para ele.

9. Considere a operação ADD. Explique como esta operação poderia ser implementada:

Com três operandos.


Com dois operandos.
Com um operando.
Sem operandos.

Resposta:
Com três operandos:
add r1,r2,r3 ; soma r2 com r3 e coloca o resultado em r1
Com dois operandos:
add r1,r2 ; soma r2 com r1 e coloca o resultado em r1
Com um operando:
add r1 ; soma r1 com o conteúdo do acumulador
Com zero operandos:
add ; desempilha e soma dois operandos no topo da pilha e coloca o resultado no topo da
pilha.

10.Explique como a partir do opcode de uma instrução o processador sabe o modo de


endereçamento.

Existem bits adicionais no opcode de que indicarão o modo de endereçamento dos operandos
que seguem a instrução. Exemplo: Suponha que o opcode da instrução add seja 011, esta
instrução atua em dois operandos e suponha que tenhamos 3 modos de endereçamento:
constante imediata, direto, indireto e registrador.
Formaríamos o opcode da seguinte forma:
011 00 – add com constante imediata.
011 01 – add com endereço direto.
011 10 – add com conteúdo de endereço.
011 11 – add atuando em registradores.

Exemplos:
add r4, #16; adiciona 16 ao registrador r0 ; 011 00 100 00001000
add end, #16; adiciona 16 ‘a variável contida no endereço de memória end; 011 01 111
; 00001000 -- isso supondo que o endereço de memória end seja 111
add [end], #16 ; adiciona 16 ao conteúdo apontado pela variável contida no endereço de
; memória end -- 011 10 111 00001000 -- isso supondo que o endereço de
;memória end seja 111
add r0,r1 ; adiciona r0 a r1 e guarda o resultado em r0; 011 11 00 01

11.Explique quem é responsável por fazer a decodificação do modo de endereçamento, se é o


hardware ou se é o microcódigo. Justifique a resposta.

Depende da forma como a arquitetura é implementada. Geralmente quando existem muitos


modos de endereçamento a CPU é uma CPU CISC, ou seja, teóricamente é possível que tanto o
hardware quando o microcódigo fizessem a decodificação do modo de endereçamento.
Todavia o custo da implementação em hardware de diversos modos de endereçamento é
muito alto, razão pela qual é o microcódigo quem realiza essa tarefa em arquiteturas CISC.

12. O que se entende por expansão de códigos de operação? Como poderíamos minimizar o
tamanho total de um código executável?
Expansão de códigos de operação é justamente a quantidade de bits a mais que
colocamos na frente do opcode para especificar o modo de endereçamento. Existem
duas maneiras de diminuir o tamanho de um código executável. A primeira maneira é
diminuir a quantidade de operandos. Com isso diminuímos também a quantidade de
bits necessárias para especificar esses operandos. A segunda forma é realizada pelo
compilador, ou seja, se um determinado operando precisar ser utilizado mais de uma
vez ele é carregado em um registrador (a vantagem disso é que são necessários
menos bits para localizar o operando).

13. Dê um exemplo de como o endereçamento indexado poderia ser útil.

Uma importante utilização da indexação é fornecer um mecanismo eficiente para efectuar


operações iterativas, como por exemplo a cópia de um vetor para outro vetor.

14. Explique o que são traps e o que são interrupções e quais as diferenças entre elas.
• Chamada de Procedimento automática iniciada sempre que ocorrer alguma condição
específica causada pela execução do programa. As interrupções são modificações no
fluxo de controle causadas por um evento externo ao processamento do programa,
normalmente eventos de entrada e saída. Traps são síncronos com o programa e
interrupções são assíncronas.Programas processados com as mesmas entradas geram
traps exatamente nos mesmos lugares.Momento da ocorrência das interrupções pode
e deve variar a cada novo processamento (exemplo: momento em que o disco termina
a leitura ou que a pessoa aperta a tecla de um terminal).

15. A chamada ao sistema operacional poderia ser uma trap ou uma interrupção? Justifique.

É uma trap. *ou interrupção de software, acionada por meio de uma instrução especial : A
instrução "int" no 8088/286/386/Pentium

16. Qual a instrução de máquina faz a chamada ao sistema operacional no DOS? E no


Linux? Explique em um exemplo como esta chamada é realizada.

Tanto no DOS quanto no LINUX a chamada ao sistema operacional é realizada por meio da
instrução int.
Um exemplo de utilização desta chamada no DOS seria:

mov ah, 4cH


int 21H

No LINUX essa chamda seria:

mov ah, 00H


int 80H
• 17. Explique o que acontece no hardware da máquina quando ocorre uma interrupção
causada por um dispositivo externo
• .R: 1)Controlador de Dispositivo ativa uma linha de interrupção no processador.
• 2)Processador responde com ACK para o dispositivo.
• 3)Dipositivo coloca valor inteiro nas linhas de dados para se identificar.
• 4)Processador salva este valor inteiro em um registrador interno.
• 5)Processador coloca na pilha o PC e o PSW.
• 6)Processador busca no vetor de interrupção o novo PC (este pc é o endereço da
rotina que tratará a interrupção).

18. Suponha que o dispositivo a ser programado seja um monitor. Explique como deveria
ser a rotina que escreve na placa controladora.

R: O hardware da placa controladora lê o conteúdo presente na memória de vídeo e gera os


sinais de vídeo para comando do feixe de eletrons do CRT (bobina de deflexão e para
retraço da tela). Sendo assim a unica coisa que necessita ser feita por software é a escrita
de bytes na memória de vídeo desta forma, a partir de instruções de movimentação de
dados, escrevemos o conteúdo que queremos exibir na memória, a partir do endereço
0xB800 (no PC em modo texto).

19.Conhecidas as características de memórias mostradas a seguir, a serem usadas em uma


máquina de um endereço com acumulador, pergunta-se: quais valores serão carregados
no acumulador após a execução das seguintes instruções?

Palavra 20 contém o valor 40


Palavra 30 contém o valor 50
Palavra 40 contém o valor 60
Palavra 50 contém o valor 70

LOAD IMMEDIATE 20
LOAD DIRECT 20
LOAD INDIRECT 20
LOAD IMMEDIATE 30
LOAD DIRECT 30
LOAD INDIRECT 30

Solução:

Temos a seguinte situação


End Conteúdo
20 40
30 50
40 60
50 70

LOAD IMMEDIATE 20
O acumulador fica carregado com a constante imediata 20.
Resposta: 20

LOAD DIRECT 20
O acumulador fica carregado com o conteúdo da posição 20 de memória, ou seja, 40.
Resposta: 40.

LOAD INDIRECT 20
O acumulador fica carregado com o conteúdo apontado pela posição 20 de memória,
ou seja, o conteúdo da posição 40, ou seja 60.
Resposta: 60

LOAD IMMEDIATE 30
Resposta: 30

LOAD DIRECT 30
Resposta: 50

LOAD INDIRECT 30
Resposta: 70

20.Compare máquinas de 0, 1, 2 e 3 endereços escrevendo os programas para que cada uma


delas calcule o valor da expressão:

X = (A+B*C) / (D-E*F)

As instruções disponíveis para uso em cada uma destas máquinas são as seguintes:

0 Endereço 1 Endereço 2 Endereços 3 Endereços


PUSH M LOAD M MOV (X=Y) MOV (X=Y)
POP M STORE M ADD (X=X+Y) MOV (X=Y+Z)
ADD ADD M SUB (X=X-Y) SUB (X=Y-Z)
SUB SUB M MUL (X=X*Y) MUL (X=Y*Z)
MUL MUL M DIV (X=X/Y) DIV (X=Y/Z)
DIV DIV M

M é um endereço de memória de 16 bits e X, Y, e Z são endereços de memória de 16


bits ou números de registradores de 4 bits. A máquina que não faz referência a
qualquer endereço usa uma pilha, a que referencia somente um endereço usa um
acumulador, e as outras duas tem 16 registradores e instruções que operam sobre
todas as combinações de endereços de memória e registradores.

Resposta:
Máquina com 3 endereços:
mov r0, B
mov r1, C
mul r2, r0,r1 ; r2  r0*r1 , ou seja B*C
mov r3, A
add r4, r2,r3; r4  r2+r3, ou seja (A+B*C)
mov r5, E
mov r6, F
mul r7, r5,r6 ; r7  r6*r5, ou seja E*F
mov r8,D
sub r9, r8, r7; r9  r8-r7, ou seja D-E*F
div r10, r4, r9; r10  r4/r9, ou seja (A+B*C) / (D-E*F)
mov X, r10

Máquina com 1 endereço:


(A+B*C) / (D-E*F) X/Y
load B ; carrega B para o acumulador Acc  B
mul C ; multiplica o conteúdo do acumulador por C e coloca o resultado no acumulador.
; Acc  Acc*C; ou seja, B*C
add A; Acc  Acc + A; ou seja, A+B*C
store X ; X  Acc; ou seja, A+B*C
load E; Acc  E
mul F; Acc  Acc * F , ou seja E*F
store Y; Y  Acc, ou seja, E*F
load D; Acc  D
sub Y; Acc  Acc – Y, ou seja D– E*F
store Y ; Y  D- E*F
load X
div Y
store X

21.Elabore uma metodologia para trocar o conteúdo de duas variáveis A e B sem usar uma
terceira variável ou um registrador. Pense na instrução exclusive OR.

22.Por que os dispositivos de E/S colocam no barramento o conteúdo do vetor de interrupção?


Seria possível armazenar essas informações em uma tabela na memória?

Porque eles precisam se identificar para o processador. Seria possível armazenar essa
informações em uma tabela de memória se existissem várias linhas de interrupção. Existindo
somente uma linha de interrupção, o processador não sabe qual dispositivo o interrompeu,
sendo assim, ele não sabe também qual rotina de interrupção que deverá ser posteriormente
chamada para fazer o tratamento da referida interrupção. Com varias linhas de interrupção,
por outro lado, o processador sabe qual foi o dispositivo que o interrompeu. Neste caso, é
exatamente o controlador de interrupção que possui essa tabela e a CPU consultaria no caso
essa tabela para chamar o serviço de interrupção.

23.Por que procedimentos para serviços de interrupção precisam ter prioridades associadas a
eles, em contraste com procedimentos normais que não precisam disso?

Isso acontece porque uma interrupção pode interromper o processamento de um


procedimento, coisa que procedimentos não podem fazer entre si. Uma função ordinára,
sempre chama a outra, nunca interrompe a outra assincronamente (em qualquer ponto do
código da outra).
Além da interrupção interromper procedimentos ordinários (ou seja procedimentos comuns)
um uma interrupção também pode interromper outra interrupção, se a prioridade da segunda
for maior que a prioridade da primeira. Ou seja, qualquer interrupção sempre tem uma
prioridade maior do que procedimentos ordinários. Mas para uma interrupção poder
interromper outra interrupção, esta precisa ter uma prioridade maior do que a primeira.

24.Escreva uma sub-rotina em linguagem de montagem que converta um número binário


inteiro sem sinal em seu valor equivalente em ASCII.

Na rotina abaixo, ax é o parâmetro.


Como o quociente da divisão fica em AL e o resto em Ah, Ah é o parâmetro para função
converte_e_armazena que é o procedimento que converte um inteiro para seu valor ASCII.

int2ascii proc near


mov bx, 0aH ; coloca 10 em bx
INICIO_CONVERSAO:
div bl ; divide ax por bl --> quociente em al, resto em ah
call converte_e_armazena
cmp al,0
je FIM_CONVERSAO
xor ah,ah
jmp INICIO_CONVERSAO
FIM_CONVERSAO:
ret
endp

Para converter um inteiro para ASCII, eu simplesmente somo 30h com ele, pois 30h é o
valor ASCII correspondente ao caracter ‘0’. E esta função, armazena o valor
convertido em um vetor e decrementa o valor de SI usado para fazer o endereçamento
indexado deste vetor.

converte_e_armazena proc near


push bx
SI
xor ch,ch
mov cl, [Tam]
mov si, cx ; não consigo decrementar si diretamente.
mov bx, OFFSET Vetor
add ah, 30h
mov [bx][si],ah
dec cx
mov [Tam],cl
pop bx
ret
ENDP

25Considere o número binário 1001 0101 1100 0011 de 16 bits e mostre o efeito sobre ele das
seguintes operações:

a. Um deslocamento à direita de 4 bits sem extensão de sinal.


b. Um deslocamento à direita de 4 bits com extensão de sinal.
c. Um deslocamento à esquerda de 4 bits.
d. Uma rotação à esquerda de 4 bits.
e. Uma rotação à direita de 4 bits.

Resposta:

Um deslocamento à direita de 4 bits sem extensão de sinal.

0000 1001 0101 1100

Um deslocamento à direita de 4 bits com extensão de sinal.

1000 1001 0101 1100


Um deslocamento à esquerda de 4 bits.

0101 1100 0011 0000

Uma rotação à esquerda de 4 bits.

0101 1100 0011 1001

Uma rotação à direita de 4 bits.

0011 1001 0101 1100

Você também pode gostar