-----------------------------------------------------------------------------------------
>Quando dizer que um resultado é 'válido' ou não? Consegui entender que é quando o resultado não é exato (ex: 10-8=15),
mas como descubro isso observando os números binários?
Na questao 10, existe a indicacao de que os padroes tem 32 bits em complemento a 2 (por isso, 32 palitos correspondem ao '-1' ).
Nao interprete os padroes antes do calculo.
Somente depois de obter o padrao resultante tente interpretar cada sequencia. Primeiro, opere:
o avanco ('+') de 1 posicao
'0000 0000 0000 0000 0000 0000 0000 0001' na catraca que marca
'1111 1111 1111 1111 1111 1111 1111 1111' faz com que esta passe a exibir (o sucessor):
'0000 0000 0000 0000 0000 0000 0000 0000'
Agora, como tais padroes de 32 bits representam inteiros em complemento a 2 (segundo o enunciado), o significado de
1111 1111 1111 1111 1111 1111 1111 1111
+ 0000 0000 0000 0000 0000 0000 0000 0001
= 0000 0000 0000 0000 0000 0000 0000 0000
é 'menos 1 mais 1 igual a zero'. Obtivemos, entao, com o movimento automatico, um resultado 'correto' do ponto de vista aritmetico,
no caso, um 'zero valido'.
Note que se houvessemos indicado que se tratava de valores inteiros sem sinal em padroes de 32 bits,
a interpretacao para o valor dos 32 uns seria
2³² - 1 = 4 294 967 296 - 1 = 4 294 967 295
e a interpretacao para o valor a ser somado seria 1.
O resultado aritmetico correto deveria ser 4 294 967 296 (= 4 294 967 295 + 1), mas, como o padrao resultante do movimento do dispositivo automatico
foi 'zero' (na interpretacao de 32 bits sem sinal), dizemos que o resultado é 'zero invalido'.
A mesma coisa para a outra operacao
0000 1111 1111 1111 1111 1111 1111 1111
- 1000 0000 0000 0000 0000 0000 0000 0000
=1000 1111 1111 1111 1111 1111 1111 1111
que indica, em um primeiro momento, que ao RECUARMOS (' - ') de
'1000 0000 0000 0000 0000 0000 0000 0000' posicoes a catraca com o padrao
'0000 1111 1111 1111 1111 1111 1111 1111' ela passarah a exibir o padrao
'1000 1111 1111 1111 1111 1111 1111 1111'.
Em um primeiro momento, apenas isso.
Agora, interpretando o resultado como de uma operacao sobre padroes de 32 bits em complemento a 2, vemos que ao subtrairmos do primeiro padrao
'0000 1111 1111 1111 1111 1111 1111 1111' (positivo, pois se trata de complemento a 2)
certo valor
'1000 0000 0000 0000 0000 0000 0000 0000' (negativo, pois se trata de complemento a 2)
obtivemos, segundo a catraca, o valor negativo
'1000 1111 1111 1111 1111 1111 1111 1111'
Como nao estah correto aritmeticamente que 'positivo' 'menos' 'negativo' 'resulta' 'negativo', dizemos que obtivemos um resultado
'invalido negativo' na operacao acima sobre padroes em complemento a 2 de 32 bits.
-----------------------------------------------------------------------------------------
>Entendi que no RI é que é executado o comando. Mas lá dentro quem executa? Li que a ALU executa as operações da instrução. Seria ela?
O RI mantem o padrao que serah decodificado e depois executado pela ALU. O RI (Registrador de Instrucoes) nao executa nada, apenas guarda o valor.
-----------------------------------------------------------------------------------------
>Qual a conversão para decimal (sem muito trabalho) do hexadecimal FA3E48EEF5A?
F A 3 E 4 8 E E F 5 A em hexadecimal equivale ao binario
1111 1010 0011 1110 0100 1000 1110 1110 1111 0101 1010
isto eh, decompondo em parcelas mais faceis de calcular, temos
1111 1010 0000 0000 0000 0000 0000 0000 0000 0000 0000 (255-5)x2³⁶=171 79 869 184 000
11 1110 0000 0000 0000 0000 0000 0000 0000 2³⁴-2²⁹ = 17 179 869 184
- 536 870 912 =
= 16 642 998 272
100 1000 0000 0000 0000 0000 0000 2²⁶+2²³ = 67 108 864 + 8 388 608
1110 0000 0000 0000 0000 2²⁰-2¹⁷ = 1 048 576
-131 072
= 917 504
1110 0000 0000 0000 2¹⁶-2¹³ = 65 536
-8 192
= 57 344
1111 0000 0000 2¹²-2⁸ = 4 096
-256 =
= 3 840
0101 1010 5x16+10 = 90
17179869184000 +
16642998272 +
67108864 +
8388608 +
917504 +
57344 +
3840 +
90 =
17196588658522d = 1111 1010 0011 1110 0100 1000 1110 1110 1111 0101 1010b = FA3E48EEF5Ah
-----------------------------------------------------------------------------------------
>O que é exatamente o 'excesso de 8'?
No caso das notacoes por excesso, se adiciono (ou subtraio) um valor acrescido de alguma coisa a outro valor acrescido da mesma coisa, obtenho
um novo valor acrescido DUAS VEZES daquela alguma coisa. Assim, por exemplo, temos a adicao por excesso de 5:
(x + 5) + (y + 5) = x + y + 10 (agora por excesso de 10, e nao por excesso de 5, nao eh?)
Em padroes binarios é facil visualizar as representacoes por excesso de uma potencia de dois. Assim, se dissermos que o padrao de 4 bits '1001'
representa um valor 'por excesso de 8', devemos subtrair 8 para obter o valor que o padrao representa. Como '1001' corresponde a 2³ + 1
(isto eh, 8+1=9), o valor que '1001' representa 'por excesso de 8' é 1 (=9-8). Veja que se retirarmos a 'moeda' que vale 8 do padrao '1001' ficaremos
com o padrao '0001' (que corresponde a '1').
No caso de um padrao de 40 bits, por exemplo, representando valores por excesso de 2³⁹ (isto eh, por excesso da 'moeda' mais à esquerda do padrao de
40 bits), temos que subtrair 2³⁹ (retirar aquela 'moeda') do padrao para obter o valor representado. Assim, por exemplo, o padrao de 40 bits
1000 1111 1111 0001 0001 1101 1010 1111 1001 1101
representa, por excesso de 2³⁹, o valor positivo
0000 1111 1111 0001 0001 1101 1010 1111 1001 1101
^
(retiramos o 1 que representa a 'moeda' 2³⁹)
***
Para padroes de 40 bits que representam valores por excesso de 2³⁹ mas que tem zero no lugar da 'moeda' 2³⁹ (valores menores do que zero),
temos, por exemplo,
(note agora a ausencia do '1' mais aa esquerda):
0000 1111 1111 0001 0001 1101 1010 1111 1001 1101
que representa, por excesso de 2³⁹, o numero negativo (em complemento a 2)
1000 1111 1111 0001 0001 1101 1010 1111 1001 1101
Isto eh,
0000 1111 1111 0001 0001 1101 1010 1111 1001 1101
- 1000 0000 0000 0000 0000 0000 0000 0000 0000 0000
= 1000 1111 1111 0001 0001 1101 1010 1111 1001 1101
cujo valor absoluto é (calculando 'complemento a 2' = 'complemento a 1' + 1):
0111 0000 0000 1110 1110 0010 0101 0000 0110 0010 + 1 =
0111 0000 0000 1110 1110 0010 0101 0000 0110 0011
***
Consute a tabela que lista padroes em complemento a 2, sem sinal e por excesso de 8.
Verifique agora o seguinte padrao de 4 bits, supondo que representa um valor por excesso de 8:
0011 representa o valor 0011 - 1000 = 1011 (valor negativo, representado em complemento a 2)
O valor absoluto de 1011 (valor negativo, representado em complemento a 2) é 0100 +1 = 0101, que corresponde aa distancia entre o zero e 0011 por
excesso de 8, ou entre o zero e 1011 em complemento a 2. Verifique isso na tabela mencionada.
-----------------------------------------------------------------------------------------
>Como fazer conversões para decimal a partir de hexadecimais de 3 casas?
>Por exemplo:
>3FF = 1023 em DECIMAL.
>Mas como cheguei a isso?
Tente ler, entender e fazer alguns exemplos de padroes hexadecimais e conversões mencionadas em "SEMELHANÇAS, EQUIVALÊNCIAS E CONVERSÕES". Ali
comecamos com padroes bem simples e vamos avancando para os (aparentemente) mais complicados. Veja que a tabela de potencias de 2 nos fornece valores
uteis, e o fato de sabermos obter imediatamente sucessores e antecessores de quaisquer padroes dados tambem facilita o raciocinio para cada caso.
O exemplo que mencionou tem conversao bem facil. Veja que 3FF hexadecimal corresponde a
0011 1111 1111 binario, que é o antecessor de 0100 0000 0000 binario. (Isso voce tem que saber - verifique as folhas mencionadas).
Voce encontra para 2¹⁰ (1 seguido de 10 zeros em binario) na tabela a conversao decimal 1024. O antecessor é 1023.
Veja que FFh corresponde a 255d (pois é antecessor de 100hexa = 256decimal). Se somarmos 255 com 3x256 (FFh +300h = 3FFh) vamos obter 1023d.
-----------------------------------------------------------------------------------------
> 1- Não consigo entender direito 'complemento a 1' e 'complemento a 2'.
Suponha o padrao binario 1110 1101 0011 0001.
O complemento a 1 desse padrao é o que falta para ele se tornar 1111 1111 1111 1111.
Se acrescentarmos
0001 0010 1100 1110 ao padrao
1110 1101 0011 0001 teremos
1111 1111 1111 1111
Em outras palavras, o complemento a 1 de um padrao é a 'inversao' de cada bit do padrao: onde havia zero, passa a haver 1; onde havia 1,
passa a haver zero.
O complemento a 1 é um auxiliar importante para descobrirmos o valor de uma representacao binaria de numero negativo em complemento a 2.
Recorde que o antecessor de
0000 0000 0000 0000 (catraca binaria, com 16 bits) eh
1111 1111 1111 1111.
Na representacao em complemento a 2 (neste caso com 16 bits), o antecessor de zero (isto eh, o valor '-1') é representado por 16 palitos.
Isto significa que falta 1 movimento para a frente ('avanco') para a catraca chegar a 0000 0000 0000 0000 (zero).
Do mesmo modo, faltam 2 movimentos para a frente para uma catraca exibindo o padrao
1111 1111 1111 1110 chegar a zero. Portanto, 1111 1111 1111 1110 corresponde ao valor '-2' em complemento a 2 (supondo uma catraca de 16 bits).
E assim por diante.
Falamos de 'complemento a 2' porque a distancia de um valor negativo do zero é igual aa distancia do valor ao '-1' mais um.
Isto eh, falta 0000 0000 0000 0001 para o valor 1111 1111 1111 1110 chegar ao 1111 1111 1111 1111.
E para chegar ao sucessor de 1111 1111 1111 1111, isto eh, ao zero, falta mais 1 movimento.
Verifique as tabelas com as representacoes 'sem sinal', 'complemento a 2' e 'por excesso'.
>
> 2- A questão do negativo e positivo é apenas conceitual? Eu fico meio perdida com isso, pode me explicar?
>
Reproduzindo parte de resposta que dei a uma colega sua, considere o exemplo:
1111 1111 1111 1111 1111 1111 1111 1111
+ 0000 0000 0000 0000 0000 0000 0000 0001
= 0000 0000 0000 0000 0000 0000 0000 0000
----------
Nao interprete os padroes antes do calculo.
Somente depois de obter o padrao resultante tente interpretar cada sequencia. Primeiro, opere:
o avanco ('+') de 1 posicao
'0000 0000 0000 0000 0000 0000 0000 0001' na catraca que marca
'1111 1111 1111 1111 1111 1111 1111 1111' faz com que esta passe a exibir (o sucessor):
'0000 0000 0000 0000 0000 0000 0000 0000'
Agora, SE tais padroes de 32 bits representam inteiros em complemento a 2 (segundo o enunciado), o significado de
1111 1111 1111 1111 1111 1111 1111 1111
+ 0000 0000 0000 0000 0000 0000 0000 0001
= 0000 0000 0000 0000 0000 0000 0000 0000
é 'menos 1 mais 1 igual a zero'. Obtivemos, entao, com o movimento automatico, um resultado 'correto' do ponto de vista aritmetico, no caso,
um 'zero valido'.
Note que SE representarem inteiros sem sinal em padroes de 32 bits,
a interpretacao para o valor dos 32 uns seria
2³² - 1 = 4 294 967 296 - 1 = 4 294 967 295
e a interpretacao para o valor a ser somado seria 1.
O resultado aritmetico correto deveria ser 4 294 967 296 (= 4 294 967 295 + 1), mas, como o padrao resultante do movimento do dispositivo
automatico foi 'zero' (na interpretacao de 32 bits sem sinal), dizemos que o resultado é 'zero invalido'.
A mesma coisa para qualquer outra operacao. Por exemplo,
0000 1111 1111 1111 1111 1111 1111 1111
- 1000 0000 0000 0000 0000 0000 0000 0000
=1000 1111 1111 1111 1111 1111 1111 1111
que indica, em um primeiro momento, que ao RECUARMOS (' - ') de
'1000 0000 0000 0000 0000 0000 0000 0000' posicoes a catraca com o padrao
'0000 1111 1111 1111 1111 1111 1111 1111' ela passarah a exibir o padrao
'1000 1111 1111 1111 1111 1111 1111 1111'.
Em um primeiro momento, temos apenas isso (o efeito 'mecanico' do movimento da 'catraca').
Agora, interpretando o resultado como de uma operacao sobre padroes de 32 bits em complemento a 2, vemos que ao subtrairmos do primeiro padrao
'0000 1111 1111 1111 1111 1111 1111 1111' (positivo, pois se trata de complemento a 2)
certo valor
'1000 0000 0000 0000 0000 0000 0000 0000' (negativo, pois se trata de complemento a 2)
obtivemos, segundo a catraca, o valor negativo
'1000 1111 1111 1111 1111 1111 1111 1111'
Como nao estah correto aritmeticamente que 'positivo' 'menos' 'negativo' 'resulta' 'negativo', dizemos que obtivemos um resultado
'invalido negativo' na operacao acima sobre padroes em complemento a 2 de 32 bits.
----------
>
> 3- Queria também uns exemplos dos conceitos que você deu na aula, alguns eu entendi, outros não ficaram muito claros.
>
Voce leu as folhas que falam do ciclo de instrucao (busca-atualiza-executa)? Exatamente, o que foi que nao entendeu ali?
> a) Endereço:
>
> - Direto
O endereco (a referencia) localiza o conteudo buscado. Exemplo: o numero da gaveta permite referenciar (localizar) seu conteudo.
>
> - Indireto
>
O endereco (a referencia) localiza um outro endereco que pode localizar o conteudo buscado. Exemplo: o numero da gaveta localiza uma ficha que,
por sua vez, permite localizar um conteudo.
> - Implícito
>
Exemplo: 'some certo valor com outro valor' (o resultado vai para o registrador padrao).
> - Explícito
>
Exemplo: 'some certo valor com outro valor e coloque o resultado em y' (o resultado vai para o registrador y).
> - Ponteiros
>
Ou apontadores, ou indices. Valores que referenciam um conteudo atraves do seu endereco, isto eh, 'apontam' para o conteudo.
O IP (instruction pointer) referencia uma instrucao na memoria atraves do seu endereco.
> b) Fluxo sequencial:
>
A execucao sequencial de instrucoes que se encontram em locais contiguos de memoria; sem saltos, sem desvios.
> - Desvio (saltos)
A ruptura daquele fluxo sequencial (sem saltos).
>
> - Condicional
>
Desvio que serah ou nao executado dependendo de algum resultado anterior (deu zero? deu negativo? ultrapassou certo limite?)
> - Incondicional
>
Desvio que serah executado independentemente de resultados anteriores.
> - Com retorno
>
Na chamada (Call) para outra rotina, o lugar de retorno é armazenado e, apos a execucao da rotina do desvio, volta-se (Ret) para a rotina original.
> - Sem retorno
>
O lugar de retorno nao é armazenado e nao se volta para a rotina original apos a rotina do desvio.
> - Call / Ret
>
> c) Instruções
>
> - De transferência
>
Copia ('move') padroes de um lugar (registradores, posicoes de memoria, portas de entrada e saida) para outros lugares.
> - Lógico - aritméticas
>
'Calcula', a partir de argumentos de entrada, resultados logicos ou aritmeticos. Por exemplo, 'ADD 3,2' poderia ser uma
instrucao aritmetica que calcula a soma do argumento '3' com o argumento '2' e coloca o resultado no registrador padrao (acumulador).
Ou, 'AND X,Y' compara bit a bit os registradores 'X' e 'Y' e coloca o resultado logico no registrador padrao.
(Se os bits correspondentes de 'X' e 'Y' sao '1', o bit resultado é '1', caso contrario o bit resultado é '0')
> - De controle
>
Permite os saltos. Exemplos: 'JMP 30' pode ser 'pular para a instrucao no endereco 30'; ou 'CALL 23' pode ser 'chamar a rotina
que comeca no endereco 23'.
> d) Escrita / Leitura
>
Na memoria, da memoria:
STORE (escrever na memoria), LOAD (carregar registrador a partir da memoria), WRITE (escrever na memoria), READ (ler da memoria)
> - Armazenamento
>
Guarda de valores (padroes) para uso posterior. A memoria é um dispositivo de armazenamento, os registradores tambem.
Tambem sao dispositivos de armazenamento os Discos Rigidos, os Pen Drives, etc.