IBM 704
IBM 704 ime je za računalo prve generacije koje je razvila tvrtka IBM i jedan je iz serije računala IBM 700. Ovo računalo se proizvodilo od 1954. do 1964. godine.[1]. Povijesna važnost ovog računala jest da je na njemu bio razvijen programski jezik FORTRAN i LISP te SAP asembler.
Povijest razvoja IBM 700 serije
IBM 700 serija bila je prva generacija komercijalnih znanstvenih računala koju je IBM razvio početkom 1950-ih. Serija je započela s modelom IBM 701 (1952.), poznatim kao „Defense Calculator“, koji je bio namijenjen vojnoj i zrakoplovnoj industriji.
- IBM 702 (1953.) bio je poslovno orijentiran sustav, dok je IBM 703 bio eksperimentalni model.
- IBM 704 je postao temelj za razvoj FORTRAN-a (1957.), prvog visokorazinskog programskog jezika.
Pravi tehnološki iskorak dogodio se s modelom IBM 704 (1954.), prvim računalom koje je podržavalo:
- aritmetiku s pomičnim zarezom,
- indeksne registre,
- statusne indikatore,
- magnetsku jezgru kao primarnu memoriju.
Serija se nastavila s modelima IBM 709 (1958.) i IBM 7090 (1959.), koji su bili tranzistorski nasljednici i koristili se u NASA-i, NORAD-u i velikim znanstvenim centrima.
IBM 700 serija ostavila je dubok trag u povijesti računarstva, postavivši standarde arhitekture koji su se zadržali desetljećima.
Arhitektura IBM 704
IBM 704 bio je jedno od prvih komercijalnih računala koje je uvodilo napredne koncepte arhitekture, uključujući rad s pomičnim zarezom, indeksne registre i statusne indikatore. Sustav je bio dizajniran za znanstvene i tehničke izračune, što ga je činilo ključnim alatom u laboratorijima, sveučilištima i ranim zrakoplovnim projektima.
Aritmetička jedinica (AC i MQ)
Aritmetička jedinica sastojala se od dva glavna 36-bitna registra:
- AC (Accumulator) – glavni registar za aritmetiku.
- MQ (Multiplier/Quotient) – registar za množenje i dijeljenje.
Ova dva registra zajedno su omogućavala učinkovite operacije nad velikim brojevima i pomičnim zarezom.
Indeksni registri (XR1, XR2, XR4)
IBM 704 je koristio tri indeksna registra:
- XR1
- XR2
- XR4
Indeksni registri omogućavali su modifikaciju adresa, implementaciju petlji i rad s velikim poljima podataka. Ovo je bio preteča modernog adresiranja u procesorima.
Senzorni indikatori (SI)
Sustav je imao 36 senzorskih indikatora koji su služili kao statusne zastavice:
- indikatori grešaka (overflow, divide check)
- indikatori stanja I/O uređaja
- korisnički definirani indikatori
Programi su mogli testirati i postavljati SI bitove, što je omogućavalo primitivne oblike upravljanja tokom programa.
Memorija
IBM 704 koristio je magnetsku jezgru (magnetic core memory) kapaciteta:
- 4096 riječi × 36 bita
Ovo je bila jedna od najnaprednijih memorijskih tehnologija 1950-ih.
Ulazno/izlazni sustav
Podržani uređaji uključivali su:
- magnetske vrpce
- čitač kartica
- bušilicu kartica
- pisač
- konzolu operatera
I/O operacije su se signalizirale preko Sense Indicators.
Instrukcijski format
Instrukcije su bile 36-bitne, s poljima:
- opkod
- adresa
- indeksni modifikator
- bitovi za uvjetno grananje
Ovaj format omogućavao je fleksibilno adresiranje i kontrolu toka programa.
Instrukcijski skup IBM 704
| Grupa | Primjeri | Opis |
|---|---|---|
| Aritmetičke instrukcije | ADD, SUB, MPY, DIV | Operacije nad AC i MQ registrima; podrška za cijele brojeve i pomični zarez. |
| Logičke instrukcije | CLA, CLM, COM | Čišćenje, komplementiranje i manipulacija bitovima. |
| Uvjetno grananje | TRA, TMI, TPL, TZE | Skokovi ovisno o sadržaju AC ili MQ. |
| Rad sa Sense Indicators | TSI, SSI, RSI | Testiranje, postavljanje i resetiranje statusnih bitova. |
| Indeksno adresiranje | AXT, TXI | Modifikacija adresa pomoću XR1, XR2, XR4. |
| Ulazno/izlazne instrukcije | RDS, WRS, RWT | Rad s magnetskom vrpcom, kartičnim čitačem i pisačem. |
| Kontrola toka programa | HLT, NOP | Zaustavljanje programa, prazna instrukcija. |
Opkodovi IBM 704
| Opkod | Mnemonik | Grupa | Opis |
|---|---|---|---|
| 000 | NOP | Kontrola | Prazna instrukcija; ne radi ništa. |
| 001 | HLT | Kontrola | Zaustavlja izvršavanje programa. |
| 002 | TRA | Grananje | Bezuvjetni skok na adresu. |
| 003 | TRN | Grananje | Skok ako je AC negativan. |
| 004 | TMI | Grananje | Skok ako je AC manji od nule. |
| 005 | TPL | Grananje | Skok ako je AC veći od nule. |
| 006 | TZE | Grananje | Skok ako je AC jednak nuli. |
| 007 | TOV | Grananje | Skok ako je overflow zastavica postavljena. |
| 010 | ADD | Aritmetika | Zbrajanje sadržaja memorije s AC. |
| 011 | SUB | Aritmetika | Oduzimanje sadržaja memorije od AC. |
| 012 | MPY | Aritmetika | Množenje; rezultat ide u AC/MQ. |
| 013 | DIV | Aritmetika | Dijeljenje; količnik u MQ, ostatak u AC. |
| 014 | CLA | Logičke | Učitava vrijednost u AC. |
| 015 | CLM | Logičke | Učitava vrijednost u MQ. |
| 016 | COM | Logičke | Komplementira AC. |
| 020 | SHL | Logičke | Pomak ulijevo. |
| 021 | SHR | Logičke | Pomak udesno. |
| 030 | AXT | Indeksiranje | Učitava vrijednost u XR1, XR2 ili XR4. |
| 031 | TXI | Indeksiranje | Dodaje vrijednost indeksnom registru. |
| 040 | RDS | I/O | Čitanje s magnetske vrpce. |
| 041 | WRS | I/O | Pisanje na magnetsku vrpcu. |
| 042 | RWT | I/O | Čekanje na I/O operaciju. |
| 050 | TSI | Sense Indicators | Testira Sense Indicator n. |
| 051 | SSI | Sense Indicators | Postavlja Sense Indicator n. |
| 052 | RSI | Sense Indicators | Resetira Sense Indicator n. |
Registri
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Senzorni indikatori
Senzorni indikatori - su posebni statusni bitovi u IBM 704 koj su se u praksi rabili za provjeru grešaka, grananje ovisno o stanju sustava, upravljanje perifernim jedinicama, te za signalizaciju posebnih događaja. Kroz njih programeri su mogli održavati stanje sustava, signalizirati određene uvjete tokom izvršavanje naredbi, čitanje i postavljanje naredbi i tako su služili za jednostane oblike upravljanja tokom programa.
| SI broj | Naziv / funkcija | Opis |
|---|---|---|
| 0 | Overflow flag | Postavlja se pri prekoračenju rezultata u akumulatoru (AC) ili količniku (MQ). |
| 1 | Divide check | Signalizira pogrešku pri dijeljenju, uključujući dijeljenje nulom. |
| 2 | I/O ready | Uređaj spreman za prijenos podataka. |
| 3 | I/O complete | Završetak operacije ulaza/izlaza. |
| 4 | Tape mark | Očitana oznaka kraja bloka na magnetskoj vrpci. |
| 5 | Printer ready | Pisač spreman za rad. |
| 6 | Card reader ready | Čitač kartica spreman. |
| 7 | Card punch ready | Bušilica kartica spremna. |
| 8–15 | Peripheral flags | Razni signali perifernih uređaja (disk, vrpca, pisač). |
| 16–35 | User-defined flags | Zastavice koje programer može slobodno koristiti za logiku grananja. |
Korištenje u IBM 704 assembleru
IBM 704 je imao posebne instrukcije za rad sa Sense Indicators:
- TSI n
- Testira Sense Indicator n. Ako je postavljen, izvršavanje se nastavlja normalno; ako nije, preskače se sljedeća instrukcija.
TSI 3 / provjeri je li I/O complete
TRA DONE / ako je postavljen, skoči na DONE
- SSI n
- Postavlja Sense Indicator n.
- RSI n
- Resetira Sense Indicator n.
TSI 1 / provjeri divide check
TRA ERROR / ako je SI1 = 1, idi na ERROR
SSI 20 / postavi korisnički indikator 20
RSI 3 / resetiraj I/O complete indikator
Usporedba s modernim statusnim registrima
| IBM 704 Sense Indicators | Moderni statusni registri (x86, ARM, RISC-V) |
|---|---|
| 36 jednobitnih zastavica | 8–32 bitni statusni registri |
| Ručno postavljanje i brisanje | Automatsko postavljanje od strane ALU |
| Koriste se za I/O signalizaciju | I/O signalizacija preko interrupt kontrolera |
| Jednostavne logičke zastavice | Zastavice za aritmetiku, usporedbe, prekide |
| Programer koristi dio SI kao "user flags" | Moderni jezici koriste varijable, strukture, objekte |
| Grananje preko TSI instrukcije | Grananje preko CMP/JMP, BEQ/BNE, BLT/BGT |
Primjeri IBM 704 assembler koda
Zbrajanje dvaju brojeva
CLA A / učitaj A u AC
ADD B / dodaj B
STO C / spremi rezultat u C
Provjera negativnog broja
CLA X / učitaj X
TMI NEG / ako je X < 0, idi na NEG
TRA DONE / inače nastavi
NEG STO Y / spremi negativnu vrijednost
DONE HLT
Množenje i dijeljenje
CLA A
MPY B / AC*B → AC/MQ
DIV C / (AC/MQ) / C → MQ (količnik), AC (ostatak)
STO Q / spremi količnik
STO R / spremi ostatak
Korištenje Sense Indicators
TSI 3 / provjeri I/O complete
TRA IO_OK / ako je SI3 = 1, idi na IO_OK
SSI 20 / postavi korisnički indikator 20
IO_OK HLT
Performanse IBM 704
IBM 704 bio je jedno od najbržih znanstvenih računala svoje generacije. Njegova arhitektura s pomičnim zarezom, magnetskom jezgrom i specijaliziranim aritmetičkim registrima omogućavala je znatno bolje performanse u odnosu na prethodne modele IBM 701 i IBM 702. Sustav je bio optimiziran za matematičke operacije, simulacije, statističke izračune i obradu velikih numeričkih skupova podataka.
| Parametar | Vrijednost | Opis |
|---|---|---|
| Brzina zbrajanja | ~12 μs | Vrijeme potrebno za izvršavanje jedne ADD instrukcije. |
| Brzina množenja | ~20 μs | Vrijeme za MPY instrukciju; rezultat ide u AC/MQ. |
| Brzina dijeljenja | ~38 μs | Vrijeme za DIV instrukciju; količnik u MQ, ostatak u AC. |
| Memorija | 4096 riječi × 36 bita | Magnetska jezgra; pristup ~12 μs. |
| Ciklus instrukcije | ~12 μs | Prosječno vrijeme za dohvat i izvršavanje jednostavne instrukcije. |
| Brzina I/O operacija | 7200 kartica/min (čitač) | Kartični čitač i bušilica bili su glavni ulazno/izlazni sustavi. |
| Magnetske vrpce | 12 500 znakovnih blokova/s | Ovisno o uređaju; korišteno za masovno spremanje podataka. |
| Preciznost pomičnog zareza | 27-bitni eksponent + 8-bitna mantisa | Omogućavalo znanstvene izračune velike preciznosti. |