Mért így van Assembly-ben?
Már az elején nem értem.
x = y + 1
Mozgassuk y értékét az 1. regiszterbe.
Mozgassuk az 1-es számot a 2. regiszterbe.
Az 1. regisztert adjuk a 2. regiszterhez.
A 2. regisztert mozgassuk az x változóba.
Így gyorsabb szerintem:
Mozgassuk az 1-es számot a 2. regiszterbe.
A 2. regisztert mozgassuk az x változóba.
15:22 (14), 21:26 (19):
"Bocs de ez valami elméletben létező proci? Mert én ilyennel még nem találkoztam. De az elvet sem értem. Ez valami totális zűrzavar. Ha a vermet eléri bármelyik regiszter miért nem éri el a memóriát? Semmi értelme ennek igy."
Nem, ez a gyakorlatban létező, tizenhat utasításos, RISC, TTL elemekből épített processzor. A rendeltetése az, hogy laikusok is könnyebben megértsék egy processzor működését, megismerhessék annak belső szerkezetét.
Zűrzavar meg csak a te fejedben van, ami ismerethiányból fakad. Olvasd és eloszlik a köd:
"Bármelyik" regiszter azért nem éri el a memóriát, de a stacket igen, mert a stack belső, a processzor elemi része. Tehát, nem az operatív tárból van lenyesve, mint azt te feltételezted, hibásan.
Egyébként, a panaszod amúgy sem igazán jogos, mert pl. a 6502-ben nem véletlenül van az első 256 byte-ra huzalozva a stack. Építkezés szempontjából nagyon nem mindegy, hogy egy regiszter csak egy byte-nyi címteret érhet el, vagy mindet, ami csak rendelkezésre áll.
Nálad tisztán látszik, hogy csak fogyasztó vagy. Értem ez alatt, hogy processzort használtál, programozál ugyan, de nem terveztél még soha, a tervezés alapelveivel sem vagy teljesen tisztában. Előszeretettel definiálsz kvázi meghághatatlan tervezési alapelvnek olyan butaságokat, amiket te ötlesz ki, pusztán azért, mert nincs elég ismereted, vagy nem gondolsz bele a dologba mélyebben. Eleve, hogy minősíthetsz valamit, amit teljes egészében nem is ismersz?
Ha már történelmi processzorokkal példálóztál, akkor hadd tegyem meg én is. A 6502-es processzor mindössze 2500 tranzisztor felhasználásával hozta azt a teljesítményt 1 Mhz-en, amit a z80 processzornak sikerült elérnie 2.5 Mhz-en, a maga 8500 tranzisztoros arhitektúrájával, sokkal költségesebb gyártással, magasabb kisker áron. Az ARM, a jelenkor legsikeresebb processzor családja is a 6502 tervezési elveit követi, létezése óta.
Sima Intel processzorra gondoltam.
És amúgy is, csak gyakorlásként.
"Sima Intel processzorra gondoltam."
Ez a kérdésedből nem derült ki.
"Csak érdekességből próbáltam az assembly-t, nagyon nehéz programnyelv."
Igen, tényleg nehéz. Körülményes, nagy odafigyelést igénylő munka.
Amíg nincs komolyabb jártasságod legalább egy magasszintű nyelvben, addig nem is érdemes asm-mel kezdeni. Plusz, az asm azért elvár alapszintű hardveres ismereteket is, másképpen nem fogod tudni használni. Jól, megfelelően használni.
Az viszont az asm javára írható, hogy ha rendesen megtanulsz assemblyben fejleszteni, akkor bármilyen porcesszorra tudsz majd programot írni. Ráadásul gyorsat, hatékonyat. Attól függetlenül, hogy egyik processzor assembly-je nagyon különbözhet egy másikétól. Egy szint felett ez a különbözőség már nem akadály.
Egy szint felett már semmi sem akadály, csak az idő.
" Értem ez alatt, hogy processzort használtál, programozál ugyan, de nem terveztél még soha, a tervezés alapelveivel sem vagy teljesen tisztában." Eleve nem is tudod, hogy ki vagyok. Ezzel nem kívánok vitába szállni. De attól, hogy p*csméregetésként álítólag terveztél már processzort nem kéne orbitális tévedésekkel és soha senki által nem használt "elvekkel" félre vezetni a kérdezőt. Ha meg ennyire nagyra vagy a nem létező tudásoddal akkor nagyjából tisztában lennél azzal amiről beszélsz. És nem kevernéd az akkumulátoros gép felépítést egy stack gép (pl. fordított lengyel) felépítését. És honnan kellett volna tudni, hogy nálad a stack hardverben van (mint pl. egy stack gép esetén szokott, mert az nem derült ki sehonnan, ezzel az infóval csk azután jöttél elő, hogy rávezettünk, hogy totálisan szakmaiatlan és fogalmatlan amit leírtál).
És ha te egy ilyen soha senki által nem használt felépítésen akarod bárkinek is bemutatni a processzor működését és az assembly nyelvet akkor meg jobban tennéd ha ezt most befejeznéd, mert teljesen tévútra viszed az embereket. Ezt közveszélyes kókányolásnak kéne tekinteni. És tényleg gondold végig, hogy hány embernek tetted tönkre eddig ezzel a szakmai karrierjét még az elején. ÉS most fejezd ezt be. De ezt nagyon komolyan kérem. Mert nem csoda, hogy amikor hozzánk kerülnek innen-onnan összeszedett infókkal gyomlálhatjuk ki az agyukból a berögzött totális téveszméket. Sokkal nehezebb mint az elején helyesen megtanítani. Sajnos itt nem lehet úgy töröltetni a válaszaiadat, hogy a moderátornak elmagyarázzuk, hogy miért totálisan életveszélyes az amit leírtál, és hány embernek veszed el a kedvét az egésztől (ld. pl. a kérdezőét is). Ez felér egy szakmai öngyilkosságra felbújtással amit Te teszel és művelsz itt.
"Akkor az Assembly programban csak egy regiszterben lehet érték, a többi regiszterben ilyenkor nincs? Változóknál ugye nem így van?"
Dehogy! Ha csak egy regiszterben lehetne érték, akkor semmilyen kétoperandusú műveletet nem tudnál végezni. (Meg akkor minek lenne a többi regiszter)? Az összeadós példában sem csak egy regiszterben van érték. Annyi kikötés van, hogy ÁLTALÁBAN, a legtöbb proceszsor esetében meghatározott, hogy melyik regiszterekben kell a műveletben részt vevő értékeknek szerepelni. Illetőleg rendszerint a "fő" regiszterben adja vissza a művelet eredményét.
Hagyományos értelemben vett változók pedig nincsenek Assemblyben. Persze, sok fordító biztosít hasonlókat, de alapvetően az Assembly regiszterekkel, és memóriacímekkel dolgozik. Épp ezért alacsony szintű programozási nyelv.
"Mert így olyan, mintha minden egyes új érték hozzáadásánál, újból át kéne pakolni egyenként végig az értéket."
Ezt nem teljesen értem, hogy mire gondolsz. Arra, hogy ha egy memóriabeli értékhez hozzá akarsz adni valamit, akkor azt be kell pakolni a regiszterekbe, összeadás után meg vissza a memóriába? Igen, ez így van. És igazából MINDEN programozási nyelvnél így működik a háttérben, csak ezt maga a nyelv elrejti előlünk.
"Sima összeadás is nagyon nehéz"
Pedig ez még a nagyon egyszerű dolgok közé tartozik. :D A ciklusszervezés már jóval összetettebb, főleg, hogy klasszikus értelemben véve nincsenek is ciklusutasítások a nyelvben. Neked kell megoldani feltételes ugró utasításokkal. A szövegkezelésről meg ne is beszéljünk.
"inkább másik programnyelvet választok."
Hát.. kezdő nyelvként nehezen tudnám ajánlani az Assemblyt. Azoknak tudom ajánlani, akik már a programozásban szereztek némi jártasságot, és érdekli őket a gép elemi szintű működése.
""Mert így olyan, mintha minden egyes új érték hozzáadásánál, újból át kéne pakolni egyenként végig az értéket."
Ezt nem teljesen értem, hogy mire gondolsz. "
Az oka az idióta válaszadó idiótásaga. Egy olyan nem létező procira mutatott példát amelyik keveri a verem gépeket (stack machine pl. fordított lengyel) és a korszerű procikat. És ez a kezdő kérdezőt összezavarta nem is kicsit.
A survey of Computers with Hardware Stack Support
aadc
aamp
ACTION PROCESSOR
AEROSPACE COMPUTER
ALCOR
AN ALGOL MACHINE
AM29000
APL LANGUAGE
BUFFALO STACK MACHINE
BURROUGHS MACHINES
CALTECH CHIP
CRISP
DRAGON
EM-1
EULER
FORTH ENGINE
FORTRAN MACHINE
FRISC 3
G-MACHINE
GLOSS
HITAC-10
HP300 & HP3000
HUT
ICL2900
INTEL 80x86
INTERNAL MACHINE
IPL-VI
ITS (Pascal)
KDF-9
KOBE UNIVERSITY MACHINE
LAX2
LILITH
LISP MACHINES
MCODE
MESA
MF1600
Micro-3L
MICRODATA 32/S
MISC M17
MOTOROLA 680x0
MU5
NC4016
NORMA
OPA (Pascal)
PASCAL MACHINE
PDP-11
POMP PASCAL
PSP
PYRAMID 90X
QFORTH
REDUCTION LANGUAGE MACHINE
REKURSIV
RISC I
ROCKWELL MICROCONTROLLERS
RTX 2000
RTX 32P
RUFOR
SF1
SOAR
SOCRATES
SOVIET MACHINE
SYMBOL
TRANSPUTER
TM
TREE MACHINE
VAUGHAN & SMITH'S MACHINE
WD9000 P-ENGINE
WISC CPU/16
WISC CPU/32
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!