# IBM 704

Der IBM 704 der 700/7000 series war der erste in kleiner Stückzahl hergestellte Großrechner, der Gleitkommaarithmetik beherrschte. IBM stellte den von Gene Amdahl mitentwickelten Rechner im April 1954 der Öffentlichkeit vor.
Zu seinem Vorgänger, der 1953 erbauten IBM 701, auch Defense Calculator genannt, dessen überwiegende Produktion an das US-Verteidigungsministerium und die Militärflugzeugindustrie ging, war der IBM 704 nicht kompatibel.
Laut Angaben des Herstellers, der bis 1960 123 Anlagen herstellte, konnte der IBM 704 bis zu 40.000 Befehle pro Sekunde ausführen.

## Architektur

Der Rechner hatte gegenüber der IBM 701 eine verbesserte Rechnerarchitektur, drei zusätzliche Indexregister und Kernspeicher statt Williamsröhren. Der neue Befehlssatz wurde zur Grundlage der IBM 700/7000-wissenschaftlichen Großrechnerserie.

### Wortgröße und Datenformate

Der IBM 704 war eine Wort-orientierte Maschine mit einer Wortgröße von 36 bit. Ein Wort konnte entweder eine Instruktion,$^{:7–8}$ eine Integer-Zahl im sign-magnitude-Format, eine Floating-Point Zahl sein.$^{:8–9}$ oder sechs Buchstaben mit je sechs Bit im BCD-Code umfassen.$^{:35}$
Gleitkommazahlen hatten die Basis 2, ein Vorzeichen-Bit, ein 8-bit Exponent und eine Mantisse von 27 bits.$^{:8–9}$

### Speicher

Der IBM 704 war in drei Ausbaustufen verfügbar: 4096, 8192 und 32768 Worte Kernspeicher, nach heutigen Begriffen 18, 36 und 144 KiB. Weiterhin verfügte die Maschine über Trommelspeicher mit je 8192 Worten (36 Kib).$^{:37–38}$

### Register

Der IBM 704 verfügte über folgende Register, die für den Programmierer sichtbar waren:
* Einen Akkumulator AC. Dieser verfügte über 36 bit plus 2 bit zur Darstellung von Vorzeichen und Overflow.$^{:9}$
* Ein Multiply-Quotient-Register MQ. Dieses verfügte über 36 bit.$^{:9–10}$
* Drei Indexregister A, B und C.$^{:9–10}$ Aus heutiger Sicht ungewöhnlich war, dass Inhalt der Indexregister von der Basisadresse subtrahiert wurde, weswegen sie auch Dekrementregister genannt wurden. Bei der Angabe mehrere Index-Register in einer Instruktion wurde ihr Inhalt über ein logisches Oder verknüpft.

### Instruktionen

Der IBM 704 verfügte über zwei Instruktionstypen, Typ A und Typ B.
Typ A-Instruktionen verfügten über ein Präfix von drei Bit, ein Dekrement-Feld von 15 bit, drei „tag“-Bits für die zu verwendeten Indexregister und eine 15-bit-Adresse. Ein Beispiel ist die TIX Instruktion: Falls die Zahl in dem angegebenen Index-Register größer als das Dekrement ist, wird sie von dem Index-Register abgezogen und ein Sprung zu der Adresse durchgeführt, ansonsten wird die Ausführung mit der nächsten Instruktion durchgeführt.
Typ B-Instruktionen hatten einen 12-Bit-Code mit der Operation, wobei die ersten beiden Bits Null waren, sechs ungenutzte Bits, drei „tag“-Bits für die verwendeten Indexregister und eine 15-bit-Adresse.

## Historische Bedeutung

Die Programmiersprachen Fortran und LISP wurden als erstes für diesen Rechner entwickelt. Die Benennung der primitivsten Lisp-Befehle für den Umgang mit Listen (car, cdr) gehen bis heute auf die Benennung der Register des IBM 704 zurück. Die Buchstaben in dem Wort car beziehen sich auf die englische Beschreibung „contents of the address part of register“ (Inhalt des Registeradressteils) und die in cdr auf die englische Beschreibung „contents of the decrement part of register“ (Inhalt des Registerdekrementteils).
Der IBM 704 war 1961 der erste Rechner, der bei den Bell Labs per Sprachsynthese ein Lied wiedergeben konnte. Dabei handelte es sich um Daisy Bell von Harry Dacre. Später wurde die Idee in Stanley Kubricks 2001: Odyssee im Weltraum übernommen.

## Zuverlässigkeit

Da der IBM 704 Röhren verwendete, war seine Zuverlässigkeit nach heutigen Maßstäben sehr gering. Er fiel im Durchschnitt nach etwa acht Stunden aus. Das stellte eine Begrenzung der Größe der ersten Fortran-Programme dar, da große Programme häufig vor dem Ausfall der Maschine nicht fertig übersetzt werden konnten.