Encontrei um ótimo programador chamado Steve Wozniak

Era uma vez, quando os computadores eram grandes e os negócios eram chatos, algo inesperado aconteceu. Jovens hackers encontraram uma maneira de montar computadores pessoais em microprocessadores baratos a partir de teletipos e semáforos. Um deles era Steve Wozniak. Esses caras consideraram as limitações de seus computadores um desafio, sentaram-se e fizeram esses pequenos chips fazerem coisas incríveis. Aqui está o que o Dr. Dobb's Journal publicou em agosto de 1976 :



Este é um conjunto de procedimentos aritméticos em números reais. O microprocessador (6502, o mesmo que nos Apple I e II) só poderia funcionar com bytes, ou seja, números inteiros entre 0 e 255. Pior, ele só poderia adicioná-los e subtraí-los. Mas com esta biblioteca você pode calcular 1,26271099,56 , ou mesmo pegue a raiz quadrada de pi. Surpreendentemente, um autor do programa chamado Steve Wozniak ajustou as funções básicas (adição, subtração, multiplicação e divisão) em 239 bytes, usando um total de 127 instruções.

Esta é uma peça de programação bastante impressionante. Depois de ler várias vezes, posso dizer que ele é simplesmente brilhante. Por exemplo, ciclos de procedimentos de multiplicação e divisão são acionados 23 vezes, uma vez para cada bit no resultado. Você acha que o Woz gastará dois bytes escrevendo constantes 23 nos dois lugares? Claro que não! Carrega a constante 23 na rotina preliminar que os dois loops usam:



Como outro exemplo, os algoritmos devem assumir os valores absolutos de M1 e M2. Você poderia escrever

  M1 = abs (M1);
 M2 = abs (M2); 

Woz não se repete assim. Ele escreve um procedimento que assume o valor absoluto de M1 e altera M1 e M2. Em seguida, ele chama esse procedimento duas vezes , para que o mesmo resultado seja alcançado com metade da quantidade de código. Além disso, a substituição de M1 e M2 também é necessária em outro lugar, para que o código faça um trabalho duplo.

Obviamente, esse fatoração intensiva dificulta o rastreamento do fluxo, mas é incrível o quão longe esse código está adiantado. Lendo outros artigos da edição de 1976, você encontra uma tonelada de código não tão bem escrito. Isso é compreensível: as pessoas descobriram como tirar proveito dos novos microprocessadores. E no meio de todo esse diamante, que pode muito bem ser digno de um hacker moderno da demoscene. Para comparação, aqui está o mesmo nível de engenho total que neste incrível código 6502, 30 anos depois.

Chega de história. Por que eu estudei cuidadosamente esse código antigo em 2019? O fato é que estou trabalhando em um novo companheiro para o I²CDriver e o SPIDriver , e ele teve que executar operações de ponto flutuante no processador Silicon Labs EFM8 de 8 bits (baseado em 8051), usado em projetos anteriores. Agora ele realiza esses cálculos com facilidade, assim como a biblioteca 6502. Eu não precisava de um código tão pequeno e otimizado, mas agora ele funciona muito rapidamente, um pouco mais rápido que a biblioteca Keil semelhante . Grande código nunca morre!

Source: https://habr.com/ru/post/pt459584/


All Articles