Az assemblyről röviden
A múltban, a jelenben és minden bizonnyal a jövőben is találhatunk olyan embereket, akik ellenállhatatlan késztetést éreznek (a mi legnagyobb szerencsénkre), hogy az assembly mellé más programozási nyelveket is megalkossanak. Bár kétségtelenül felemelő érzés szuahéliül beszélgetni felebarátoddal, amikor ő faképnél hagy téged és új barátot keresel, akkor nagyon nehézkes az őáltala beszélt nyelvvel való ismerkedés. Ha esetleg nem érted, hogy ez a hasonlat hogyan jön a képbe, akkor jöjjön egy rövid történelmi lecke az Apple-től:
- Apple I — 1976, CPU: MOS 6502 @ 1 MHz
- Apple II — 1977, CPU: MOS 6502 @ 1.023 MHz (hurrá, az új barátom ugyanazt a nyelvet beszéli, mint a régi, csak egy kicsit gyorsabban)
- Apple III — 1980, CPU: Synertek 6502B @ 1.8 MHz (szintén zenész, csak a CPU gyártója változott, de maradunk a 6502 vonalon)
- Apple Lisa — 1983, CPU: Motorola 68000 @ 5 MHz (ajjaj, itt már baj van. Ez a processzor ugyanis nem azt a nyelvet beszéli, mint a 6502)
- Apple Lisa II — 1984, CPU: Motorola 68000 @ 7.8338 MHz (sicc, nincs itt semmi látnivaló)
- 1984 és 1992 között változatos fantázianeveken különböző Macintosh konfigurációk láttak napvilágot, szerencsére mind a Motorola processzoraival (nyílván azok is fejlődtek, 68010, 68020, 68030, 68040, 68060. Ez utóbbival azonban már nem építettek Apple számítógépet, ami nagy kár mert egészen kiváló processzor)
- Power Macintosh — 1995, CPU: 5200 LC: PowerPC 603, 75 MHz; 5300 LC: PowerPC 603e, 100 és 120 MHz (itt újra van baj, a PPC processzorok nem kompatibilisek a 68k szériával, bár a Motorola keze ebben a termékben is benne van)
- A PPC-s vonalon egészen 2005-ig rajta maradt az Apple, a 604, G3, G4, G5 fantázianevekkel megjelenő újabb processzorok használatával, ám 2006 augusztusában végleg megvált ettől az arhitektúrától
- Valószínűleg az x86/x64 dominanciájának engedve az Apple is áttért erre a vonalra és ez nem is olyan rég még használatban volt, ám már megjelentek az első fecskék az Apple Silicon-al (saját fejlesztésű, ARM alapokon nyugvó processzor) szerelt gépek képében, tehát az x86/64 vonal is az elődök sorsára jutott
Mint látható 5 termékvonal, 5 különböző processzorcsalád: 5x kell új nyelvet tanulni. Az assemblyvel azonban nem ez az egyetlen probléma. Mint említettem a CPU "buta". Oké, buta, de mennyire "buta"? Vegyük példéul a 6502-es processzort, amelyen én is tanultam az assembly programozást. Ez a processzor annyira "buta", hogy az alap matematikai műveletekből sem a szorzást sem az osztást nem ismeri, csak összeadni és kivonni tud. Huh, mégis hogyan nevezhetünk egy ilyen "lükét" SZÁMÍTÓgépnek? Hát úgy, hogy megtanítjuk neki a szorzást és az osztást! Szerencsére láttuk, hogy a biteltolással hogyan lehet kettővel szorozni/osztani, de egy olyan "számológép" ami csak 2-vel tud műveletet végezni elég hamar kivérezne.
Hogyan tudunk mondjuk 3-al, vagy 7-tel szorozni? Hát kicsit átvariáljuk a "képletet" és először megszorozzuk 2-vel (hiszen ez kiválóan megy) majd hozzáadjuk a kiindulási számot (mert összeadni is tudunk). Ugyanez lehet a metódus a 7-el való szorzásnál: szorzunk 8-al (3x eltolunk balra 2x2x2) majd levonjuk az eredményből a kiindulási számot.
Osztani már más téma, ott megnézhetjük, hogy a nevezőt hányszor tudjuk kivonni a számlálóból, így megkaphatjuk az eredményt.
Nem minden processzor ennyire "buta" mint a fentebb említett 6502 és a processzorok fejlődése nem csak és kizárólag egyenlő a sebességnövekedéssel. Ha megnézzük a már említett x86/64 vonalon az egyik processzort pl. a 8086-ot, akkor láthatjuk, hogy ez a processzor már tudott szorozni és osztani (igaz csak egész számokkal), nem kellett nekünk külön programot írni rá. Az eddigiekben kínosan ügyeltem rá, hogy csak az egész számokról beszéljek és ez nem véletlen. A számábrázolás nem egész számok esetén (float point vagy magyarul lebegőpontos számok) egy meglehetősen száraz (lehet még valami ennél is szárazabb?) és nehéz téma, és napjaink programozási nyelvei mellett nem is kell vele foglalkoznunk, mert a programozási nyelvek elintézik nekünk ezt is.
Ebből a rövid kitérőből is látható, hogy az assembly programozás nem éppen a hatékonyságáról híres. Bár viszonylag egyszerű megvalósítani a szorzást és az osztást is assemblyben, egy sima 3 * 12 formánál, ahogy ezt a többi nyelven megtehetjük mindenképpen nehezebb. A következő cikkben megnézzük ezeket a nyelveket.
Mit tanultál ebben a leckében?
- leginkább azt, hogy ha teheted kerüld el az assembly nyelvet, bár kétségtelenül vannak a mai napig olyan területek, ahol ez a preferált nyelv