# IBM 704

L’IBM 704, premier ordinateur de série doté de capacité d’arithmétique en virgule flottante, fut introduit par IBM en 1954.

## Historique

Sur le marché du calcul scientifique, l’IBM 704 succédait à l'IBM 701, dont il améliorait significativement l’architecture et l’implémentation. Du fait de ces améliorations, le 704 n'était pas compatible avec son prédécesseur.
Les améliorations par rapport au 701 incluaient le remplacement des tubes de Williams par une mémoire à tores magnétiques et l’ajout de trois registres d'index. Pour supporter ces améliorations, la longueur de l’instruction-machine était augmentée de 18 à 36 bits. Le jeu d'instructions du 704 deviendra la base de la série d’ordinateurs scientifiques de la série IBM 700/7000.
IBM indiquait que l'ordinateur pouvait exécuter 40 000 instructions par seconde. IBM a vendu 123 exemplaires de l'ordinateur entre 1955 et 1960.
Deux des utilisateurs de l’IBM 704, General Motors et North American Aviation, ont développé un système d'exploitation rudimentaire pour l’ordinateur, le GM-NAA I/O (General Motors and North American Aviation Input/Output system). Il est à noter que ce système d’exploitation n’a pas été créé par IBM, mais bien par des clients d’IBM qui voulaient maximiser l’utilisation de leurs ordinateurs. Les fabricants d'ordinateurs ne réalisaient pas encore la manne de revenus que pouvait représenter le développement de logiciels pour les ordinateurs. Ce sont plutôt les utilisateurs qui développaient des logiciels utilitaires et qui les distribuaient selon une pratique proche de ce qui se passe aujourd'hui pour les logiciels libres. Le système d'exploitation GM-NAA I/O a ainsi été utilisé par une quarantaine de clients d'IBM.
Les langages de programmation Fortran et LISP ont été initialement développés pour l'IBM 704. Le premier programme de traitement de musique a aussi été développé sur cet ordinateur par Max Mathews.
En avril 1958, IBM France présente un programme de jeu de dames anglaises sur l’IBM 704 ; l'évaluation de la position courante et de celles possibles au coup suivant sont enregistrées sur bande magnétique.
Edward O. Thorp a aussi utilisé l’IBM 704 et le langage Fortran dans le développement de sa théorie des jeux sur la probabilité de gagner au blackjack$^,$.

## Registres

L'IBM 704 avait un registre accumulateur de 38 bits (incluant deux bits de débordement), un registre multiplicateur-quotient de 36 bits et trois registres de diminution de 15 bits. Le registre de diminution était une sorte de registre d'index dont le contenu était soustrait de l'adresse de base au lieu d'y être ajouté. Les trois registres de diminution pouvaient participer à une même instruction : les 3 bits tag de l'instruction indiquaient lesquels des registres devaient participer à l'instruction.

## Formats des instructions

Il existait deux formats d'instruction appelés type A et type B. La plupart des instructions étaient de type B.
Les instructions de type A possédaient, en séquence :
* un code opération de 3 bits ;
* un décrément de 15 bits ;
* trois bits tag ;
* une adresse de 15 bits.
Les instructions de type A incluaient des sauts conditionnels en fonction des valeurs des registres de diminution spécifiés par les bits tag. Certaines instructions soustrayaient le décrément de l'instruction du contenu des registres de diminution. L'implémentation des instructions nécessitait que l'un des bits 2 ou 3 du code d'opération soit 1 pour distinguer les instructions de type A et B. Cette contrainte réduisait à 6 le nombre possible d'instructions de type A. L'une des instructions (l'instruction STR, code d'opération 101) n'a pas été implantée avant l'IBM 709.
Les instructions de type B possédaient, en séquence :
* un code opération de 12 bits (le deuxième et le troisième bits devaient être 0 pour les distinguer des instructions de type A) ;
* un flag de 2 bits ;
* quatre bits inutilisés ;
* trois bits tag ;
* une adresse de 15 bits.

## Format des données

Les nombres entiers étaient représentés par un bit de signe suivi de la valeur absolue de l'entier en format binaire.
Les nombres en virgule flottante en simple précision étaient représentés par un bit de signe, un exposant de 8 bits et une mantisse de 27 bits.
Les caractères alphanumériques étaient représentés par un code de 6 bits (le code BCD (6-bit)). On pouvait donc placer 6 caractères dans un mot de 36 bits.