Aldeia Numaboa
Um portal diferente em Português do Brasil
Informática da Aldeia

Tutoriais

Na Aldeia

Há 83 visitantes e 1 usuário registrado online

3308 registros
0 hoje
12 nesta semana
45 neste mês

Boas vindas: paulo

Estatística

Artigos: 1064
Leituras: 6041415
Arquivados: 21
Downloads: 533
Baixados: 172400
Glossário: 1208
Bibliografia: 25
Links: 90

Visitas de onde

Top 5:
Brasil flag 73%Brasil (49294)
Portugal flag 5%Portugal (3192)
EUA flag 3%EUA (2218)
Rússia flag 0%Rússia (264)
Holanda flag 0%Holanda (240)
67685 visitas de 100 países

Hoje:74
Ontem:2619
No mês:41870
Mês passado:25815
Total:67685
Recorde:3037
No dia:04.03.10
Leituras hoje:20633
Leituras Total:290061
Bots hoje:20
Dados desde:16.02.2010

Login



Kanji da hora




Faça contato






Qui

11

Jan

2007


19:25

AoA - Laboratório Cap.1 PDF Imprimir Indique esta página
(6 votos, média 4.2 de 5)


Nível intermediário Este é o módulo de laboratório do capítulo 1 do AoA, uma espécie de guia de estudo. Se o guia não tiver todas as informações necessárias para resolver os exercícios propostos, procure-as no tópico ao qual ele se refere.

As questões são numeradas sequencialmente de acordo com o capítulo. Assim, por exemplo, Q01.08 representa a oitava questão do capítulo 1. As respostas podem ser visualizadas clicando a pergunta. Sugiro responder as questões antes de verificar as respostas corretas, senão, qual é a vantagem que Maria leva? Exercício é para ser resolvido! piscada

O sistema decimal é, sem sombra de dúvida, o sistema numérico mais utilizado. Cada dígito à esquerda do ponto decimal representa um valor que varia de 0 a 9 vezes sucessivas potências positivas de dez. Da mesma forma, cada dígito à direita do ponto decimal representa um valor de sucessivas potências negativas de dez. Exemplos:

1234.567 é 1*1000 + 2*100 + 3*10 + 4 + 5*0.1 + 6 * 0.01 + 7 * 0.001
Isto também equivale ao valor 1*103 + 2 *102 + 3*101 + 4*100 + 5*10-1 + 6*10-2 + 7*10-3

5.23e+5 é 5*105 + 2*104 + 3*103

pergunta Q01.01 - Qual é a representação em "potência de dez" de 7009.001?

Fechar
7*103 + 0*102 + 0*101 + 9*100 + 0*10-1 + 0*10-2 + 1*10-3

o que, simplificado, será

7*103 + 9*100 + 1*10-3

O sistema de numeração binário funciona de um modo parecido com o do sistema decimal. Ao invés de sucessivas potências de dez, usa sucessivas potências de dois. Ao invés de dígitos de 0 a 9, permite apenas os dígitos 0 e 1. Exemplos:

1001 é 1*23 + 1*20 (o equivalente decimal é nove)
110.11 é 1*22 + 1*21 + 1*2-1 + 1*2-2 (o equivalente decimal é 6.75)

pergunta Q01.02 - Qual é a representação em "potência de dois" de 1101101.1?

Fechar
1*26 + 1*25 + 1*23 + 1*22 + 1*20 + 1*2-1

pergunta Q01.03 - Qual é o equivalente decimal de 1101101.1?

Fechar
O equivalente decimal de 1101101.1 é 109.5

Na linguagem Assembly, os números binários geralmente são agrupados em blocos de 4, 8, 16 e 32 bits (binary digits - dígitos binários). Além disto, a maioria dos valores usados no Assembly são inteiros. Neste texto usaremos a convenção normal de numeração dos bits, de 0 até n-1, onde n é o total de bits presentes no valor binário. O bit menos significativo (ou de ordem baixa - O.B.) é sempre o bit número zero e o bit mais significativo (ou de ordem alta - O.A.) é sempre o bit número n-1 do número binário.

pergunta Q01.04 - Num número binário de 16 bits, qual é o bit mais significativo (O.A.)?

Fechar
O bit número 15 é o mais significativo.

Programadores de linguagem Assembly, particularmente para o 80x86, com frequência trabalham com strings de bits de 4, 8, 16 e 32 bits de comprimento. É por isso que são usados vários nomes especiais para os dados binários dos referidos comprimentos. São eles, respectivamente: nibble, byte, word e double word (word duplo).

pergunta Q01.05 - Qual é o número do bit mais significativo num word? E num duplo word?

Fechar
O bit mais significativo num word é o bit 15.
O bit mais significativo num double word é o bit 31.

pergunta Q01.06 - Quantos bits há num byte?

Fechar
Um byte é composto por 8 bits.

pergunta Q01.07 - Quantos bytes há num duplo word?

Fechar
Um double word é composto por 4 bytes

pergunta Q01.08 - Qual é o número do bit menos significativo num nibble?

Fechar
O bit menos significativo num nibble (como em qualquer outro grupo) é o bit 0.

Na prática, os números binários são muito desajeitados para serem usados. É por isso que a maioria dos programadores utiliza o sistema de numeração hexadecimal. O sistema de numeração hexadecimal (também conhecido simplesmente como hexa) fornece notações muito mais compactas que o sistema binário e a conversão entre hexa e binário é bastante simples quando se usa a seguinte tabela:

Hexadecimal     Binário       Hexadecimal     Binário
    0            0000             8            1000
    1            0001             9            1001
    2            0010             A            1010
    3            0011             B            1011
    4            0100             C            1100
    5            0101             D            1101
    6            0110             E            1110
    7            0111             F            1111

pergunta Q01.09 - Qual é o equivalente binário do hexa FEDC?

Fechar
FEDC = 1111 1110 1101 1100

pergunta Q01.10 - Qual é o equivalente hexa do binário 11011010010010?

Fechar
0011 0110 1001 0010 = 3692h

pergunta Q01.11 - Qual é o equivalente hexa do binário 100010010000101?

Fechar
0100 0100 1000 0101 = 4485h

pergunta Q01.12 - Qual é o valor do bit O.A. do número de 16 bits 7F8C?

Fechar
É zero por que 7, o byte de O.A., é igual a 0111 1111

As quatro operações lógicas mais importantes são AND, OR, XOR e NOT. As tabelas lógicas para estas operações são:

AND |  0   1                    OR |  0   1
-------------                   ------------
 0  |  0   0                     0 |  0   1
 1  |  0   1                     1 |  1   1


XOR |  0   1                   NOT |
-------------                  ---------
 0  |  0   1                    0  |  1
 1  |  1   0                    1  |  0

AND, OR e XOR são funções diádicas (precisam de dois operandos) e NOT é monádica. Por exemplo:

1 AND 1 = 1
0 OR 0 = 0
1 XOR 0 = 1
NOT 1 = 0

De acordo com as tabelas verdade acima, estas quatro operações atuam apenas em operandos de bit único. Em Assembly, no entanto, com frequência é preciso trabalhar com strings de bits (bytes, words, etc), o que torna necessária uma extensão destas funções. Para trabalhar com strings de bits é preciso que ambas tenham o mesmo comprimento. Para ajustá-lo, basta adicionar zeros à esquerda da string menor. Depois disto, realiza-se a operação desejada bit a bit:

100010 AND 1110001 = 010 0010 AND 111 0001 = 010 0000
11110000 OR 0101010 = 1111 0000 OR 0010 1010 = 1111 1010
10100101 XOR 11110000 = 1010 0101 XOR 1111 0000 = 0101 0101
NOT F4h = NOT 1111 0100 = 0000 1011 = 0Bh

pergunta Q01.13 - Calcule (FBh AND 54h)

Fechar
FBh = 1111 1011 AND 54h = 0101 0100 -> 0101 0000 = 50h

pergunta Q01.14 - Calcule (12h OR 34h)

Fechar
2h = 0001 0010 OR 34h = 0011 0100 -> 0011 0110 = 36h

pergunta Q01.15 - Calcule (5Ah XOR 5Ah)

Fechar
5Ah = 0101 1010 XOR 5Ah = 0101 1010 -> 0000 0000 = 0h

pergunta Q01.16 - Calcule (NOT 4Fh)

Fechar
4Fh = 0100 1111 NOT = 1011 0000 = B0h

Você ainda se lembra da transformação de números positivos em negativos (e vice versa) usando o complemento de dois? Só para refrescar a memória:

  1. Transformar o número em binário
  2. Inverter todos os bits com NOT
  3. Somar 1 ao resultado
  4. Converter o binário para o sistema original

pergunta Q01.17 - Transforme -FFFFh no número positivo correspondente.

Fechar
FFFFh = 1111 1111 1111 1111
NOT = 0000 0000 0000 0000
+ 1 = 0000 0000 0000 0001

pergunta Q01.18 - Transforme -(FACEh AND F0F0h) no número positivo correspondente.

Fechar
FACEh = 1111 1010 1100 1110
F0F0h = 1111 0000 1111 0000
AND = 1111 0000 1100 0000
NOT = 0000 1111 0011 1111
+1 = 0000 1111 0100 0000
HEXA = 0F40

Para poder realizar operações com valores representados por um número de bits diferente (por exemplo, somar um byte com um word), é preciso expandir o valor representado com menos bits. Reveja as regras:

  • A extensão com sinal do valor de oito bits FCh para 16 bits é FFFCh.
  • A extensão com sinal do valor de 8 bits 7Fh para 16 bits é 007Fh.
  • A extensão com sinal do valor de 16 bits 8000h para 32 bits é FFFFFF80h.

pergunta Q01.19 - Faça a extensão com sinal do valor de 8 bits 5Fh para 16 bits.

Fechar
5Fh = 0101 1111
0000 0000 0101 1111
hexa = 005F

pergunta Q01.20 - Faça a extensão com sinal do valor de 8 bits 91h para 16 bits.

Fechar
91h = 1001 0001
1111 1111 1001 0001
hexa = FF91

pergunta Q01.21 - Faça a extensão com sinal do valor de 16 bits 91h para 32 bits.

Fechar
91h = 0000 0000 1001 0001
0000 0000 0000 0000 0000 0000 1001 0001
hexa = 0000 0091

pergunta Q01.22 - Faça a extensão com sinal do resultado de 16 bits de 01FFh AND FF81h) para 32 bits.

Fechar
01FFh = 0000 0001 1111 1111
FF81h = 1111 1111 1000 0001
AND = 0000 0001 1000 0001
0181 -> hexa de 16 bits
0000 0181 -> hexa de 32 bits

A contração, usada para reduzir o número de bits de um valor, só pode ser efetuada se o resultado mantiver o valor original. O princípio da contração com sinal é o mesmo da expansão com sinal, sendo apenas a operação inversa.

pergunta Q01.23 - É possível fazer a contração do valor de 16 bits FF80h para uma valor de 8 bits?

Fechar
FF80h = 1111 1111 1000 0000
80h = 1000 0000

Sim, o bit mais significativo permanece 1 e o valor original é mantido.

pergunta Q01.24 - É possível fazer a contração do valor de 16 bits 0102h para uma valor de 8 bits?

Fechar
0102h = 0000 0001 0000 0010
02h = 0000 0010

Não, o bit mais significativo permanece 0 mas o valor original é perdido.

Lembra dos campos bit e dos dados compactados? O exemplo era um campo bit para guardar datas. Os bits D eram para o dia, os bits M para o mês e os A para o ano - e tudo cabe direitinho em 16 bits. Veja abaixo:

Dados compactados

Lembra também das operações de shift (deslocamento) e rotate (rotação)? Só para refrescar a memória, aqui estão os diagramas:

Shift para a direita
Deslocamento para a direita
Shift para a esquerda
Deslocamento para a esquerda
Shift aritmético para a direita
Shift aritmético para a direita
Shift aritmético para a esquerda
Shift aritmético para a esquerda

pergunta Q01.25 - Como extrair o bit de sinal de um número usando uma rotação para a esquerda e uma instrução AND?

Fechar
O número de bits não importa. Digamos que sejam oito. Basta fazer um ROL 1 seguido de um AND 1. O bit de sinal é identificado por S:
padrão = Sxxx xxxx
ROL 1 = xxxx xxxS
1 = 0000 0001
AND = 0000 000S

pergunta Q01.26 - Numa data armazenada no campo bit acima, quais as operações necessárias para extrair o valor do ano?

Fechar
Os bits correspondentes ao ano ocupam as posições de 0 a 6. Basta fazer um AND 7Fh:

padrão = xxxx xxxx xAAA AAAA
7Fh = 0000 0000 0111 1111
AND = 0000 0000 0AAA AAAA

pergunta Q01.27 - Numa data armazenada no campo bit acima, quais as operações necessárias para extrair o valor do mês?

Fechar
Os bits correspondentes ao mês ocupam as posições de 7 a 10. Precisamos fazer um AND 78h seguido de 7 shifts para a direita (SHR 7):

padrão = xxxx xMMM Mxxx xxxx
78h = 0000 0111 1000 0000
AND = 0000 0MMM M000 0000
SHR 7 = 0000 0000 0000 MMMM

pergunta Q01.28 - Numa data armazenada no campo bit acima, quais as operações necessárias para extrair o valor do dia?

Fechar
Os bits correspondentes ao dia ocupam as posições de 11 a 15. Umas das possibilidades é fazer 11 shifts para a esquerda (SHR 11):
padrão = DDDD Dxxx xxxx xxxx
0DDD DDxx xxxx xxxx
00DD DDDx xxxx xxxx
...
0000 0000 000D DDDD

Outra possibilidade é fazer um AND F800h seguido por cinco rotações para a esquerda (ROL 5).
padrão = DDDD Dxxx xxxx xxxx
1111 1000 0000 0000
AND = DDDD D000 0000 0000
ROL 1 = DDDD 0000 0000 000D
ROL 1 = DDD0 0000 0000 00DD
...
ROL 1 = 0000 0000 000D DDDD

A terceira possibilidade é fazer cinco rotações para a esquerda seguidas de um AND 1Fh.
padrão = DDDD Dxxx xxxx xxxx
ROL 5 = xxxx xxxx xxxD DDDD
1Fh = 0000 0000 0001 1111
AND = 0000 0000 000D DDDD

pergunta Q01.29 - Numa data armazenada no campo bit acima, qual é o padrão de bits para a data 12.01.04?

Fechar
padrão = DDDD DMMM MAAA AAAA
0110 0000 1000 0100
hexa = 6084

pergunta Q01.30 - Quais as operações que você usaria para inserir o dia 20 na data acima?

Fechar
padrão = DDDD DMMM MAAA AAAA
7FFh = 0000 0111 1111 1111
AND = 0000 0MMM MAAA AAAA -> remove o dia anterior
ROL 5 = MMMM AAAA AAA0 0000 -> põe na posição
14h = 0000 0000 0001 0100 -> dia 20d = 14h
OR = MMMM AAAA AAA1 0100 -> põe dia
ROR 5 = 1010 0MMM MAAA AAAA -> volta para posição original

O conjunto de caracteres ASCII é provavelmente o código mais universal que existe hoje em dia. O conjunto padrão de caracteres ASCII inclui 128 códigos diferentes, arranjados em quatro grupos de 32 códigos. Os dígitos de 0 a 9 possuem os códigos de 30h a 39h. Estes grupos podem ser identificados através dos bits 5 e 6:

Bit 6Bit 5Grupo
00Caracteres de controle
01Dígitos e caracteres de pontuação
10Maiúsculas e especiais
11Minúsculas e especiais

pergunta Q01.31 - Qual operação lógica é usada para converter minúsculas em maiúsculas?

Fechar
minúsculas = 011x xxxx
5Fh = 0101 1111
AND = 010x xxxx = maiúsculas

pergunta Q01.32 - Qual operação lógica é usada para converter maiúsculas em minúsculas?

Fechar
maiúsculas = 010x xxxx
20h = 0010 0000
OR = 011x xxxx = minúsculas

pergunta Q01.33 - Qual operação lógica é usada para transformar o caracter "5" no seu valor numérico?

Fechar
caracter 5 = 0011 0101 (35h)
Fh = 0000
AND = 0000 0101 = valor 5

pergunta Q01.34 - Qual operação lógica é usada para transformar o valor numérico 5 no caractere "5"?

Fechar
valor 5 = 0000 0101
30h = 0011 0000
OR = 0011 0101 = 35h

Última atualização ( Ter, 16.06.2009 12:04 )
 

Topo

Topo

Exceto onde especificamente citado, todo material deste site está sob Licença Creative Commons