Je vais prendre votre question à la lettre et discuter principalement des microprocesseurs, pas des ordinateurs en général.
Tous les ordinateurs ont une sorte de code machine. Une instruction consiste en un opcode et un ou plusieurs opérandes. Par exemple, l'instruction ADD pour Intel 4004 (le tout premier microprocesseur) a été codée en tant que 1000RRRR, où 1000 est le code opération pour ADD et RRRR représente un numéro de registre.
Les tout premiers programmes informatiques ont été écrits à la main, codant à la main les 1 et les 0 pour créer un programme en langage machine. Ceci est ensuite programmé dans la puce. Les premiers microprocesseurs utilisaient une ROM (Read-Only Memory); elle a ensuite été remplacée par EPROM (mémoire effaçable programmable effaçable à la lumière ultraviolette); à présent, les programmes sont généralement programmés dans une EEPROM ( "Electrically ...- EPROM" , qui peut être effacée sur une puce), ou plus précisément dans une mémoire Flash.
La plupart des microprocesseurs peuvent maintenant exécuter des programmes en dehors de la RAM (c'est à peu près standard pour tout sauf les microcontrôleurs), mais il doit y avoir un moyen de charger le programme dans la RAM en premier lieu. Comme Joby Taffey l'a souligné dans sa réponse, cela a été fait avec des commutateurs à bascule pour l'Altair 8080, qui était alimenté par un Intel 8080 (qui suivait les modèles 4004 et 8008). Dans votre PC, il existe un peu de ROM appelée BIOS qui est utilisée pour démarrer l’ordinateur et charger le système d’exploitation dans la RAM.
Le langage machine devient rapidement fastidieux, c'est pourquoi des programmes d'assembleur ont été développés, qui prennent un langage d'assembleur mnémonique et le traduisent, généralement une ligne de code d'assemblage par instruction, en code machine. Ainsi, au lieu de 10000001, on écrirait ADD R1.
Mais le tout premier assembleur a dû être écrit en code machine. Ensuite, il pourrait être réécrit dans son propre code assembleur et la version en langage machine l’assemblerait pour la première fois. Après cela, le programme pourrait se monter tout seul. Cela s'appelle amorçage et est également effectué avec les compilateurs - ils sont généralement d'abord écrits en assembleur (ou dans un autre langage évolué), puis réécrits dans leur propre langage et compilés avec le compilateur original jusqu'à ce que le compilateur puisse se compiler lui-même.
Depuis que le premier microprocesseur a été développé longtemps après que les ordinateurs centraux et les mini-ordinateurs étaient sur le marché, et que le 4004 n’était de toute façon pas vraiment adapté pour exécuter un assembleur, Intel a probablement écrit un assembleur croisé fonctionnant sur l’un de ses grands ordinateurs, et a traduit le code d’assemblage pour 4004 en une image binaire pouvant être programmée dans la ROM. Encore une fois, il s’agit d’une technique couramment utilisée pour porter les compilateurs sur une nouvelle plate-forme (appelée compilation croisée ).