... que um programa em particular diz à CPU para buscar as informações de um endereço específico e o programa define como tratá-las.
Exatamente. Mas a RAM não é lida "sequencialmente" e significa Memória de acesso aleatório, que é exatamente o oposto.
Além de saber o que um byte é , você nem sei se é um byte , ou um fragmento de um item de maior, como um número de ponto flutuante.
Eu gostaria de acrescentar outras respostas, dando alguns exemplos específicos.
Considere 01000001
. O programa pode copiá-lo de um lugar para outro como parte de uma grande parcela de dados, sem levar em consideração seu significado. Mas copiar isso para o endereço usado pelo buffer de vídeo em modo de texto fará com que a letra A
seja exibida em alguma posição na tela. A mesma ação exata quando a placa está no modo de gráficos CGA exibirá um pixel vermelho e um pixel azul.
Em um registro, poderia ser o número 65 como um número inteiro. Fazer aritmética para definir o bit de 32 pode significar algo sem contexto, mas pode estar especificamente alterando uma letra para minúscula.
A CPU 8086 (ainda) possui instruções especiais chamadas DAA ※ que são usadas quando o registro contém 2 dígitos decimais; portanto, se você acabou de usar essa instrução, está interpretando como dois dígitos 41
.
Os programas falham porque uma palavra de memória é lida, pensando que é um ponteiro quando algo foi armazenado lá.
Usando um depurador, inspecionando a memória, um mapa é usado para orientar a interpretação para exibição. Sem essas informações de símbolo, um depurador de baixo nível permite especificar: mostrar este endereço como palavras de 16 bits, mostrar esse endereço como ponto flutuante longo, como seqüências de caracteres ... o que for. Olhando para um despejo de pacotes de rede ou um formato de arquivo desconhecido, intrigá-lo é um desafio.
Essa é uma fonte importante de poder e flexibilidade na arquitetura moderna dos computadores: uma célula de memória pode significar qualquer coisa , dados ou instrução, implícita apenas no que "significa" para o programa, pelo que faz com o valor e como isso afeta as operações subseqüentes. o significado é mais profundo que a largura do número inteiro: esses caracteres são ... caracteres em ascii ou ebcdic? Formando palavras em inglês ou códigos de produto SQU? O endereço para o qual enviar ou o endereço de retorno de onde veio? A interpretação nível mais baixo (bits lógicos; integer-like, assinado ou não assinado; flutuador; BCD; ponteiro) é contextual no nível de instrução de conjunto, mas você vê que é tudo o contexto em algum nível: o deendereço é o que é devido à localização impressa no envelope. É contextual às regras do carteiro, não da CPU. O contexto é um grande continuum, com bits em uma extremidade.
※ Nota de rodapé: a instrução DAA é codificada como um byte 00100111
. Portanto, esse byte é a instrução acima mencionada, se lida no fluxo de instruções, e os dígitos, 27
se interpretados como dígitos bcd, e 0x27 = 39 como um número inteiro, que é o número 9 em ASCII e parte da tabela de interrupção (metade da INT 13 Endereço de 2 bytes, usado para rotinas de serviço do BIOS).