Um software compilado contém 0 e 1 binários?

1

Eu sei que depois de compilar um software ou aplicativo, seu código é convertido em linguagem de máquina.

Um software compilado contém um binário 0 e 1?

O que acontece depois de compilar um software? O código é convertido em binário 0 e 1? O que realmente acontece com seu código-fonte? Como uma quantidade tão grande de 0 e 1 é armazenada no computador?

    
por Torpido 21.07.2011 / 19:55

4 respostas

7

Sim. Cada pedaço de informação no seu computador é composto de bits (em PCs é normalmente 8 bits por byte, e alguns sistemas definem bytes como tendo um número diferente de bits). Embora o código-fonte, tecnicamente, seja armazenado em formato binário, várias abordagens e métodos podem ser usados para identificá-lo como "texto".

Binário é a notação usada para descrever a representação de base 2 dos dados (1s e 0s). Este documento explica esta notação em grande detalhe, e provavelmente será do seu interesse:

Código binário
link

Após a compilação, os dados binários resultantes geralmente representam uma seqüência de instruções (também conhecidas como seqüências de códigos de bytes) que o processador entende e age de acordo. Há um grande número de instruções que realizam operações matemáticas, modificam o conteúdo da memória, comunicam-se com periféricos e lidam com várias outras coisas.

Uma linguagem de alto nível como C, Pascal, Perl, etc., pode ser compilada em código binário que é então executado diretamente pela CPU, e este código binário é mais comumente chamado de "linguagem de máquina".

O código-fonte do Assembler (que não é considerado uma "linguagem de alto nível") é a forma de código-fonte mais próximo da linguagem da máquina, mas também precisa ser compilado em código binário para a CPU processá-lo corretamente. / p>

Quando o código interpretado é executado (como com um script), ele é compilado on-the-fly por um interpretador à medida que cada linha ou seção é encontrada, e tende a ser executado muito mais lento que o código binário como resultado. BASIC (como o GW-BASIC dos dias do DOS nos anos 80 e início dos anos 90), embora não conhecido como linguagem de script, também foi interpretado (incluindo os loops - não houve cache, cada linha foi continuamente reinterpretada).

    
por 21.07.2011 / 19:59
1

Tudo em um computador é uma coleção de bytes. Como os bytes são um número definido (geralmente 8) de uns e zeros, na verdade, tudo em um computador é uns e zeros.

Um programa é um fluxo de instruções.

O trabalho da CPU buscando bytes da RAM e executando uma ação com base no valor desse byte. Um fluxo de tais bytes forma um programa. Bytes neste contexto são chamados de opcodes e representam operações elementares.

A compilação é um processo de várias etapas que essencialmente "converte" ou "converte" o texto do código-fonte em um fluxo de opcodes. Nada acontece com o código-fonte original.

Os compiladores são programas cujo trabalho é ler o texto do código-fonte e fazer a conversão para o idioma da máquina. Central para o funcionamento de qualquer compilador é um conceito chamado parser que analisa cada caractere (byte) de cada linha de texto, separa-o em palavras e operadores (ou seja, tokens ) e descobre com base na presença e na ordem de palavras específicas que a linguagem de máquina opta em gerar.

Os programas raramente são executados do início ao fim. Geralmente as decisões (isto é, declarações condicionais ) são feitas com base nos dados recolhidos pelo programa e o programa pode saltar (também conhecido como salto ou sucursal ) para diferentes seções de si mesmo. Alternativamente, seções dos programas podem ser escritas como sub-rotinas ou funções e podem ser reutilizadas ou chamadas por todo o programa. Devido a isso, a maioria dos compiladores tem que fazer duas passagens ou mais através do código-fonte para descobrir onde todos os "saltos" terminarão. Isso é chamado de vinculando .

Um grande número de zeros e de unidades pode ser armazenado principalmente devido aos avanços na tecnologia de fabricação de chips e ao fato de que uma CPU pode acessar uma quantidade de RAM de 2 à potência do número de linhas de endereço tem. Uma CPU de 32 bits geralmente tem pelo menos 32 linhas de endereço, ou seja, 2 ^ 32 ou 4Gbytes de RAM. A memória nem sempre foi tão barata ou abundante. Os anúncios de computadores no final dos anos 70 / início dos anos 80 mostram que a RAM era de US $ 500 ou mais para 4Kbytes, e ainda mais cara quanto antes você passa.

    
por 21.07.2011 / 23:47
1

Como outras respostas disseram, sim, os computadores armazenam e manipulam dados e instruções BINARY, para que, ou melhor, seus elementos mais básicos (transistores, etc.) sejam computados com dois estados, On / Off, Low / High ou 0 e 1.

Mas existem (ou foram) outros métodos! Existem computadores analógicos, o oposto dos computadores DIGITAL, onde digital significa que você pode apontar valores DISCREET e específicos (dígito < - > finger). Em computadores analógicos, você não pode, não há valores de natureza distinta, tudo é algo entre (como em números inteiros e números reais). Mas não há "programa" que é compilado para código de máquina. Existem elementos mecânicos / eletrônicos que determinam o "programa"

Mais interessante: há computadores DIGITAL que não são não que operam binário, mas TERNARY :

link

link

Nestes computadores existem TRÊS estados, -1/0/1. E existem até programas que são compilados em um código de máquina. Então, concluindo: talvez. O software compilado may também contém três identificadores digitais, -1, 0 e 1;)

    
por 22.07.2011 / 00:32
0

Enquanto a resposta sim está correta, a resposta não é mais correta.

As informações são armazenadas (como já foi dito) em cargas elétricas: on e off ou talvez positive e negative ou high e low ou low e high e alguns sistemas usaram corrente em vez de carga. Mas, em resumo, existem dois estados elétricos.

Para facilitar as coisas, as pessoas abstraíram isso para 0 e 1, dessa forma, elas não precisavam saber como o hardware fazia isso e o código era mais portátil.

Mais tarde, mais camadas de abstração foram adicionadas: assembler, códigos de caracteres (ASCII etc), então…

então

if (a==b)
{
    …
}

pode se tornar

ld r1 a
ld r0 b
cmp r1,r0
br.z %endif1
…
%endif1

Agora você pode ouvir que cmp r1,r2 é convertido em 0110110111001010 , mas isso não é exatamente correto. Porque 0110110111001010 é uma seqüência de 16 caracteres (pelo menos 16 bytes descompactados) que representa 2 bytes de dados. Mas é errado dizer isso? Bem, apenas da mesma maneira que eu dizendo que eu tinha espaguete para o jantar é errado. Não tive uma sequência de caracteres s p a g h e t t i para o jantar. Eu não posso te mostrar o que eu tive. Eu posso mostrar uma foto, mas não comi uma foto. Portanto, lembre-se que 0 s e 1 s são apenas uma representação do que realmente está acontecendo. E quando digo que vejo uma lua no céu, esse 1 representa algo completamente diferente. E quando digo que os caracteres 1 e l e os caracteres 0 e O , podem ser confundidos, estes 1 s e 0 s são novamente uma coisa diferente.

    
por 27.09.2012 / 15:41

Tags