Ha, eu fiz isso. Muitas CPUs têm instruções simples, de tamanho fixo, com apenas alguns bytes. Para um CPU simples como o Motorola 6800, por exemplo, você pode colocar todas as suas instruções em uma única folha de papel . Cada instrução teria um opcode de dois bytes associado a ela e argumentos. Você poderia montar manualmente um programa procurando o código de operação de cada instrução. Você então escreveria seu programa em papel , anotando cada instrução com seu opcode correspondente. Depois de escrever o seu programa, você poderia gravar cada opcode em sequência para uma EPROM , que armazenaria seu programa. Conecte a EPROM à CPU com as instruções certas nos endereços corretos e você tem um programa simples de trabalho. E para responder sua próxima pergunta, sim. Foi doloroso (nós fizemos isso no ensino médio). Mas eu tenho que dizer que ligar todos os chips em um computador de 8 bits e escrever um programa manualmente me deu uma compreensão profunda da arquitetura do computador que eu provavelmente não teria conseguido de outra maneira.
Chips mais avançados (como x86) são muito mais difíceis de codificar manualmente, porque eles geralmente têm instruções de tamanho variável. Os processadores VLIW / EPIC, como o Itanium , são praticamente impossíveis de codificar manualmente porque lidar com pacotes de instruções que são otimizadas e montadas por compiladores avançados. Para novas arquiteturas, os programas quase sempre são escritos e montados em outro computador primeiro, depois carregados na nova arquitetura. Na verdade, para empresas como a Intel que realmente constroem CPUs, elas podem executar programas reais em arquiteturas que ainda não existem, executando-as em simuladores. Mas eu discordo ...
Quanto aos compiladores, na sua forma mais simples, eles podem ser pouco mais do que programas de "cortar e colar". Você pode escrever uma "linguagem de alto nível" muito simples, não otimizadora, que apenas agrupa instruções simples de linguagem de montagem sem muito esforço.
Se você quiser um histórico de compiladores e linguagens de programação, sugiro que você GOTO uma história de FORTRAN .