Li neste tutorial de programação de montagem que 8 bits são usados para dados, enquanto 1 bit é para paridade, que é usada para detectar erros de paridade (causados por falha de hardware ou distúrbio elétrico).
Isso é verdade?
Li neste tutorial de programação de montagem que 8 bits são usados para dados, enquanto 1 bit é para paridade, que é usada para detectar erros de paridade (causados por falha de hardware ou distúrbio elétrico).
Isso é verdade?
Respostas:
Um byte de dados tem oito bits, pode haver mais bits por byte de dados usados no sistema operacional ou até no nível do hardware para verificação de erros (bit de paridade ou mesmo um esquema de detecção de erros mais avançado), mas os dados são oito bits e qualquer bit de paridade é geralmente invisível para o software. Um byte foi padronizado para significar 'oito bits de dados'. O texto não está errado ao dizer que pode haver mais bits dedicados ao armazenamento de um byte de dados do que os oito bits de dados, mas esses normalmente não são considerados parte do byte em si, o próprio texto aponta para esse fato.
Você pode ver isso na seção a seguir do tutorial:
Doubleword: a 4-byte (32 bit) data item
4 * 8 = 32, pode levar até 36 bits no sistema, mas, para seus propósitos e propósitos, são apenas 32 bits.
char
em C (que é o objetivo do link) é exatamente a menor unidade de memória endereçável. É apenas chamado de char , mas o C Standard torna sinônimo de byte .
Tradicionalmente, um byte pode ter qualquer tamanho e é apenas a menor unidade de memória endereçável. Atualmente, os bytes de 8 bits foram praticamente padronizados para o software. Como JustAnotherSoul disse, o hardware pode armazenar mais bits do que os 8 bits de dados.
Se você estiver trabalhando em dispositivos lógicos programáveis, como FPGAs, poderá ver que a memória interna é frequentemente endereçável como blocos de 9 bits e, como autor do HDL, você pode usar esse 9º bit para verificação de erros ou apenas para armazenar quantidades maiores de dados por "byte". Ao comprar chips de memória para hardware personalizado, geralmente você tem a opção de unidades endereçáveis de 8 ou 9 bits (ou 16/18, 32/36, etc), e cabe a você decidir se possui "bytes" de 9 bits e quais você faz com esse nono bit, se optar por tê-lo.
Esse texto é extremamente mal formulado. Ele está quase certamente falando sobre RAM ECC (código de correção de erros) .
A ram ECC normalmente armazena informações em 8 bits usando 9 bits. O bit por byte extra é usado para armazenar códigos de correção de erros.
(Nos dois casos, todos os bytes são distribuídos por todos os chips. Imagem cortesia de Puget Systems )
Tudo isso é totalmente invisível para os usuários do hardware. Nos dois casos, o software que usa essa RAM vê 8 bits por byte.
Como um aparte: os códigos de correção de erros na RAM normalmente não são na verdade 1 bit por byte; eles são 8 bits por 8 bytes. Isso tem a mesma sobrecarga de espaço, mas tem algumas vantagens adicionais. Veja SECDED para mais informações.
De um modo geral, a resposta curta é que um byte é de 8 bits. Isso simplifica demais o assunto (às vezes até o ponto da imprecisão), mas é a definição com a qual a maioria das pessoas (incluindo um grande número de programadores) está familiarizada, e a definição que quase todo mundo usa como padrão (independentemente de quantos bytes de tamanho diferente eles " tive que trabalhar).
Mais especificamente, um byte é a menor unidade de memória endereçável para a arquitetura fornecida e geralmente é grande o suficiente para conter um único caractere de texto. Na maioria das arquiteturas modernas, um byte é definido como 8 bits; A ISO / IEC 80000-13 também especifica que um byte é de 8 bits, assim como o consenso popular (o que significa que se você estiver falando, digamos, de bytes de 9 bits, terá muitos problemas, a menos que explicitamente (você não quer dizer bytes normais).
No entanto, existem excepções a esta regra. Por exemplo:
sizeof(char)
, além de afirmar indiretamente que um char
deve ter no mínimo 8 bits, cada byte deve ter um endereço exclusivo e não deve haver espaços entre bytes contíguos em memória. Isso é para tornar os idiomas mais portáteis do que seriam se exigissem explicitamente bytes de 8 bits. [O número de bits em um byte é especificado como CHAR_BIT
, no cabeçalho da biblioteca C "limites" ( limits.h
em C, climits
em C ++).]
Portanto, na maioria dos casos, um byte geralmente terá 8 bits. Caso contrário, provavelmente é de 9 bits e pode ou não fazer parte de uma palavra de 36 bits.
Observe que o termo byte não está bem definido sem contexto. No que diz respeito às arquiteturas de computadores, você pode assumir que um byte é de 8 bits, pelo menos para arquiteturas modernas. Isso foi amplamente padronizado por linguagens de programação como C, que exigia que os bytes tivessem pelo menos 8 bits, mas não fornecia nenhuma garantia para bytes maiores, tornando 8 bits por byte a única suposição segura.
Existem computadores com unidades endereçáveis maiores que 8 bits (geralmente 16 ou 32), mas essas unidades são geralmente chamadas de palavras de máquina, não bytes. Por exemplo, um DSP com palavras de 32K e 32 bits de RAM seria anunciado como tendo 128 KB ou RAM, e não 32 KB.
As coisas não são tão bem definidas quando se trata de padrões de comunicação. O ASCII ainda é amplamente utilizado e possui bytes de 7 bits (que se encaixam perfeitamente em bytes de 8 bits nos computadores). Os transceptores UART ainda são produzidos para ter um tamanho de byte configurável (geralmente, você escolhe entre pelo menos 6, 7 e 8 bits por byte, mas 5 e 9 não são inéditos).
Um byte é geralmente definido como a menor unidade de espaço de memória endereçável individualmente. Pode ser de qualquer tamanho. Existem arquiteturas com tamanhos de bytes entre 6 e 9 bits, talvez até maiores. Também existem arquiteturas em que a única unidade endereçável é o tamanho do barramento; em tais arquiteturas, podemos dizer que elas simplesmente não têm byte ou o byte é do mesmo tamanho da palavra (em um caso em particular, eu sei ser de 32 bits); de qualquer forma, definitivamente não é de 8 bits. Da mesma forma, existem arquiteturas endereçáveis por bits; nessas arquiteturas, poderíamos argumentar novamente que os bytes simplesmente não existem, ou poderíamos argumentar que os bytes têm 1 bit; de qualquer maneira é uma definição sensata, mas 8 bits está definitivamente errado.
Em muitas arquiteturas de uso geral, um byte contém 8 bits. No entanto, isso não é garantido. Quanto mais você se afastar do mainstream e / ou das CPUs de uso geral, maior será a probabilidade de encontrar bytes não de 8 bits. Isso vai tão longe que alguns softwares altamente portáteis tornam o tamanho configurável. Por exemplo, versões mais antigas do GCC continham uma macro chamada BITS_PER_BYTE
(ou algo parecido), que configurava o tamanho de um byte para uma arquitetura específica. Acredito que algumas versões mais antigas do NetBSD possam ser executadas em arquiteturas que não sejam de 8 bits por byte.
Se você realmente deseja enfatizar que está falando de uma quantidade exata de 8 bits, e não da menor quantidade endereçável de memória, por maior que seja, você pode usar o termo octeto , que é, por exemplo, usado em muitas RfCs mais recentes.
CHAR_BIT
(encontrada em limits.h
), eu não estou ciente deBITS_PER_BYTE
Quando eu comecei a programar em 1960, tínhamos palavras de 48 bits com bytes de 6 bits - elas não eram chamadas assim, eram chamadas de caracteres. Depois trabalhei no computador Golem com palavras de 75 bits e bytes de 15 bits. Mais tarde, os bytes de 6 bits eram a norma, até a IBM lançar o 360, e atualmente um byte é geralmente equivalente a um octeto, ou seja, 8 bits de dados. Alguns hardwares tinham bits adicionais para detecção de erros e possivelmente correção de erros, mas estes não eram acessíveis pelo software.
Um byte é de 8 bits.
No passado distante, havia definições diferentes de uma palavra de memória e de um byte. A sugestão de que essa ambiguidade seja generalizada ou seja predominante na vida de hoje é falsa.
Desde pelo menos o final dos anos 70, um byte tem 8 bits. A população em massa de computadores domésticos e PCs utilizou inequivocamente um byte como valor de 8 bits em sua documentação, assim como todas as folhas de dados e documentação de unidades de disquete, unidades de disco rígido e PROM / EPROM / EEPROM / Flash EPROM Chips de memória / SRAM / SDRAM que li nesse período. (E eu pessoalmente li muitos deles durante esse período.) A Ethernet e alguns outros protocolos de comunicação se destacam para mim como incomuns ao falar sobre octetos.
A ambiguidade do termo byte é em si uma coisa rara e obscura. Pouquíssimos da população de programadores, engenheiros de projeto, engenheiros de teste, vendedores, engenheiros de serviço ou apostadores médios nos últimos 30 anos ou mais pensariam que isso significaria algo diferente de um valor de 8 bits, se reconhecessem a palavra. .
Quando um byte é tratado pelo hardware, como quando armazenado em chips de memória ou comunicado ao longo do fio, o hardware pode adicionar dados redundantes ao byte. Isso pode ajudar posteriormente na detecção de erros de hardware, para que dados não confiáveis possam ser reconhecidos e descartados (por exemplo, paridade, soma de verificação, CRC). Ou pode permitir que erros nos dados sejam corrigidos e recuperados (por exemplo, ECC). De qualquer forma, os dados redundantes serão descartados quando o byte for recuperado ou recebido para processamento adicional. O byte permanece o valor central de 8 bits e os dados redundantes permanecem dados redundantes.
Primeiro, o tutorial que você está referenciando parece bastante desatualizado e parece direcionado para versões desatualizadas de processadores x86, sem declará-lo, portanto muitas das coisas que você lê lá não serão entendidas por outros (por exemplo, se você alegar que uma PALAVRA é de 2 bytes, as pessoas não saberão do que você está falando ou saberão que você foi ensinado com base em processadores x86 muito desatualizados e saberão o que esperar).
Um byte é o número de bits que alguém decide que deve ser. Poderia ser 8 bits, 9 bits ou 16 bits, qualquer coisa. Em 2016, na maioria dos casos, um byte terá oito bits. Para estar seguro, você pode usar o termo octeto - um octeto é sempre, sempre, oito bits.
A verdadeira confusão aqui está confundindo duas perguntas: 1. Qual é o número de bits em um byte? 2. Se eu quisesse transferir um byte de um lugar para outro, ou se quisesse armazená-lo, usando meios físicos práticos, como faria isso? A segunda pergunta geralmente é de pouco interesse para você, a menos que você trabalhe em uma empresa que fabrica modems, discos rígidos ou unidades SSD. Na prática, você está interessado na primeira pergunta e, na segunda, apenas diz "bem, alguém cuida disso".
O bit de paridade mencionado é um mecanismo primitivo que ajuda a detectar que quando um byte é armazenado na memória e, posteriormente, o byte é lido, a memória foi alterada por algum acidente. Não é muito bom nisso, porque não descobrirá que dois bits foram alterados; portanto, uma mudança provavelmente não será detectada e não poderá se recuperar do problema porque não há como descobrir quais dos 8 bits foram alterados. , ou mesmo se o bit de paridade foi alterado.
Os bits de paridade praticamente não são usados nessa forma primitiva. Os dados armazenados permanentemente são geralmente protegidos de maneiras mais complicadas, por exemplo, adicionando uma soma de verificação de 32 bits ou mais a um bloco de 1024 bytes - que ocupa muito menos espaço extra (0,4% neste exemplo, em vez de 12,5%) e é muito mais menos propenso a não descobrir quando algo está errado.
WORD
, o que ... meio que prova o seu ponto, já que muitos nomes de tipo WinAPI estão desatualizados, mas mantidos para compatibilidade com versões anteriores. xP
No uso moderno, um byte é de 8 bits, ponto final (embora historicamente tenha outras definições). Por outro lado, uma palavra de dados é o que o hardware em questão manipula como uma unidade atômica - pode ser 8 bits, 9 bits, 10 bits, 12 bits, 16 bits, 20 bits, 24 bits, 32 bits, etc. Vários computadores sistemas ao longo dos anos tiveram todos os tipos de tamanhos de palavras diferentes.
Para implementar um sistema de memória ou um protocolo de transmissão, é benéfico adicionar detecção / correção de erros que envolvam bits adicionais. Eles não produzem um byte de 9 bits porque, como afirmado acima, um byte é de 8 bits.
Vários esquemas adicionam detecção e / ou correção de erros de várias maneiras.
O uso típico da paridade é adicionar um bit extra à palavra de transmissão para que o receptor possa detectar um único bit de erro.
Um esquema que pode fornecer correção de erro de bit único envolve a adição de 4 bits de ECC por palavra de dados de 32 bits. Isso só é aritmeticamente equivalente a 1 bit por byte, mas não pode / não funciona dessa maneira. Uma palavra de dados de 36 bits pode transportar informações suficientes para se recuperar de um erro de bit único para um espaço de dados de 32 bits.
8 bits. Dentro do processador e do teclado, são 9 e 11 bits. Os dados do usuário são representados em 8 bits. As teclas do teclado enviam cantos que são divididos em 11 bits. 1 bit inicial, 1 final, 1 paridade e 8 bits representando uma tecla pressionada.