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.
9. Considere a operação ADD. Explique como esta operação poderia ser implementada:
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.
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
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).
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
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:
18. Suponha que o dispositivo a ser programado seja um monitor. Explique como deveria
ser a rotina que escreve na placa controladora.
LOAD IMMEDIATE 20
LOAD DIRECT 20
LOAD INDIRECT 20
LOAD IMMEDIATE 30
LOAD DIRECT 30
LOAD INDIRECT 30
Solução:
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
X = (A+B*C) / (D-E*F)
As instruções disponíveis para uso em cada uma destas máquinas são as seguintes:
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
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.
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?
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.
25Considere o número binário 1001 0101 1100 0011 de 16 bits e mostre o efeito sobre ele das
seguintes operações:
Resposta: