Com funciona realment processadors?

Aprenent a la part 3 de l'Assemblea

Un microprocessador té un paper molt important dins del teu ordinador. Fabricat en un sol xip, té la responsabilitat de controlar les funcions de la màquina. En aquest article, veurem específicament a la tecnologia MOS 6502, un xip increïblement popular de les Seties. Tot i que la tecnologia és antiga, molt del que direm també serà aplicable a les màquines modernes. Aquest article també doble com a part 3 en la meva sèrie d'assemblacions d'aprenentatge (part 1 , 2 ). No obstant això, intento fer cada peça tan autònoma com sigui possible, l'Yrcton podria haver-hi unes quantes coses que depenen de les parts anteriors, però si l'únic que s'interessa és com funciona un microprocessador, espero que aquesta peça encara sigui per a tu!

Des de la perspectiva de l'aprenentatge del llenguatge de 6502, podem recordar que està fortament relacionat amb l'arquitectura que està escrit. Tot el que escrius serà, d'alguna manera, depenent de la instrucció set i hardware del processador. Per escriure un programa potser no requereix un profund coneixement de com funciona el 6502, però escriure un altre eficient ho fareu. Hem començat a veure això ja. En la primera part d'aquesta sèrie, vam veure com les instruccions poden ser diferents en màquines diferents i en part 2 vam veure com el maquinari ens permet calcular les coses més fàcils. Començarem a ser capaços de dibuixar tot el que hem après fins ara junts. Mentre continuem en les setmanes següents podrem referir-nos aquí també, i apreciarem més els enllaços entre el maquinari i el programari que arribem a escriure.

Per entendre l'arquitectura d'un microprocessador aquest article es centrarà al voltant de la següent figura:

Aquesta és la disposició d'un microprocessador estàndard de l'era. Anem a superar-ho una mica, intentant entendre-ho tot.

Començarem fora de la unitat 6502 del microprocessador (MPU), amb els autobusos de dades. Un bus d'ordinador té la feina de transferir dades i senyals al voltant de la màquina. Per un 6502, són tres:

  • La data-bus : Com el nom pot suggerir, aquestes transferències són a prop. El programa de dades és de 8 bits d' amplada, cosa que vol dir que només pot portar 8 bits alhora. Si vols carregar més dades que dos senyals separats s'han d'enviar a baix per l'autobús. Això vol dir que podeu transferir el número 0000000 en un viatge, però 1001 001101 N'agafaran dos. Normalment, durà dades de memòria a la MPU, de la MU a la memòria, o de la MU a un dispositiu d'entrada/ sortida.
  • La adreça-bus Aquest autobús porta adreces. Aquesta adreça normalment serà una font, o una destinació, per a dades. L'autobús d'adreça també difereix del programa de dades tal com és de 16 bits. Això vol dir que pots accedir a qualsevol adreça de 16 bits. Pràcticament, això significa que només teniu accés a ~6400 adreces. Després que hageu desat alguna cosa en tots ells, que l'harmaïna! Prou de memòria! Curiosament, aquest ha estat un problema fins fa poc, fins i tot els ordinadors de 32 bits moderns només poden accedir natiument al voltant de 3 gb de ram (aquest problema s'anomena barrera 3gb).
  • La control-bus El bus de control intentarà mantenir tot dins de la màquina sincronitzada. Aquí, s'ha eliminat per la simplicitat.

El microprocessador (MPU) en la figura superior, en el nostre cas, és el 6502. Conté l'aritmètica-unit sense sentit (ALU), el punt de control (U) i els registres (alguns d'ells són les banderes que vam veure a la setmana 2). La CU té el control sobre com funciona el processador. decideix quan rep una instrucció, dades o adreça com interpretar-la.

A continuació, hi ha una figura que mostra els interns del 6502 (sans). A part d'això, també requerirà temps precís. Per això està connectat a un temporitzador en la figura de dalt.

Deixa que els zeptòmetres passen per aquest diagrama, de dreta a esquerra, i discutim el que està passant.

La ALU Té una forma recognisible d'EzonVuth. El seu paper en el 6502 és realitzar els càlculs. Acceptarà dues entrades, una a l'entrada d'Abtona esquerra, i una a l'entrada de la dreta d'Akachton. Amb això, es pot fer més (la ADC Les instruccions) o resta (la SBC Les instruccions). L'esquerre de l'ALU està connectada al aculador, el registre A. Quan es fa operacions lògiques o aritmètica normalment es desa un dels valors en l' acumulador i l'altre en algun lloc de memòria. El resultat de qualsevol operació serà també, normalment, ser emmagatzemat en l'accumulador. Després d'aquesta acumulació de comportament que el registre rep el seu nom.

Les dues properes parts són les 8- bits X i Y Els registres. Aquestes són usades freqüentment com a maneres de desar valors. Són útils com a 6502 amb diverses instruccions per manipular-les. Entre aquests són INX el qual incrementarà el valor de X cap amunt per 1 DEY que redueix Y per 1 i TXA les transferències dels continguts de X a A. Tenint aquesta varietat caixa de registre ens dóna maneres de moure i modificar dades sense haver d' especificar un emplaçament de memòria. Més tard veurem que això pot millorar la velocitat del codi que escric.

Llavors, hi ha un interval de registres emmagatzemats P :

  • N: manté la pista si el resultat de l'UA és negatiu.
  • V: la bandera de sobres (recordeu, de la setmana passada!)
  • B: S'utilitza per a gestionar salts (ens en discutirem això més tard en un post).
  • D: això ajuda a manejar números BCD. Aquesta és una manera diferent de representar dades. No ho discutirem aquí.
  • I: aquestes pistes es gestionaran (ens ho discutirem més en un post més tard).
  • Z: manté la pista si el resultat d' un càlcul és zero.
  • C: la bandera de càrrega (de la setmana passada també!)

Tenir tots aquests registres ens permeten seguir les dades i fer comparacions. Per exemple, potser volem brancar a una part diferent del nostre programa si el resultat d' un càlcul és zero. Mirant el registre Z, tenim una manera de saber si hauríem de fer-ho. Alguns d'aquests registres fan ús de certes instruccions ( BRK estableix B a 1). Mentre ens trobem amb aquests descriuré l'efecte en el registre.

La Punter de pila (SP), punts a un lloc específic en memòria anomenat la pila. Utilitzant-lo podem seguir el camí d'on som a la pila. Passaré més detalls sobre això quan parlem de la pila més tard d'aquest article.

Qualsevol programa que escriguim s'haurà de mantenir en algun lloc de memòria. A mesura que l'executem, haurem d'identificar on és la memòria de cada instrucció i passar-la al processador a interpretar i executar. La Consultor del programa (CP) és un registre de 16 bits. Mirant aquí, hauríem de poder aprendre la ubicació de la següent instrucció que el programa haurà de portar a terme. Deixa que els Halkans s'hi mirin més ara mateix!

Mentre executeu un programa el processador estarà en un cicle constant d' instruccions d' obtenció i s'executem.

Obtén En aquest pas, el contingut del comptador de programes (PC) s' ha dipositat a l' adreça bus. Mirant aquí, hauríem de poder aprendre les següents instruccions que el programa haurà de dur a terme. Això serà dipositat en un registre intern especial anomenat el Espectre d' instrucció (IR). El cicle d' obtenció ja està acabat!

Decode i executa : Amb les instruccions apropiades a la IR, la unitat de control (CU) pot començar a descodificar- la. En aquest punt, pot generar els senyals necessaris per dur a terme la instrucció. La durada del temps que això pren serà diferent depenent del que s' ha generat. Algunes instruccions poden passar a la PU (per exemple, INX ), mentre que alguns necessiten alguna cosa més de la memòria (ead, dades o una adreça de memòria). L'últim tipus d' instruccions s'haurà de prendre més temps, ja que necessita un viatge a algun lloc de memòria per calcular-ho. Doncs val la pena escriure codi d'una manera que farà servir el primer tipus d' instrucció. El temps que cal fer una instrucció es mesura en cicles del rellotge. El 6502 fa servir un rellotge d'un melahertz, per tant un cicle del rellotge pren 1 microsegon.

Finalment, el PC s' incrementarà de manera que apunta a la següent instrucció. Ara, el procés pot tornar a començar.

Hem parlat de com amb un autobús de 16 bits podem arribar a 65,535 diferents localitzacions de memòria. Mentre tenim accés a cadascuna d'aquestes adreces amb els mateixos mètodes que no vol dir que cada secció de memòria sigui usada pel mateix propòsit. Les adreces 64, 535 estan dividits pàgines . Cada pàgina és un bloc de 256. Això significa que des de l' adreça 0 a 255. (o 0 a 100 en hexadecimal) és la pàgina 0, l' adreça 256 a 511 és la pàgina 1, i així successivament. En el vostre codi, per tant, heu de seguir la pàgina en la que esteu i la vostra ubicació dins d' una pàgina. Com creueu un límit de pàgina (pex, aneu des de la pàgina 12 a 13), aquest pot resultar en necessitat d' executar una instrucció extra. Això és perquè no esteu actualitzant la vostra localització a la pàgina, sinó també el número de pàgina.

Certes pàgines dintre de la memòria de 65532, hi ha la memòria per a realitzar tasques específiques. Un mapa de memòria és una figura que descriu com s' han d' utilitzar les localitzacions del sistema. Independentment del sistema 6502 que esteu usant (Apple ii, c64, NES, etc.) moltes de les funcionalitats seran iguals. No obstant això, el mapa de memòria pot ser diferent. A continuació hi ha un mapa de memòria de 6502 molt genèric

Pàgina Zero

La primera pàgina del 6502 té una posició important. La zero- page , que abasta entre 0 i 255. És l' única àrea de memòria que es pot accedir a una adreça de 8 bits. Atès que analitzar una adreça de 8 bits és més ràpida que analitzar un 16 bits, la pàgina zero es converteix en una àrea en memòria on es poden llegir les dades i escriure a més eficientment. Per tant, és sensible guardar dades importants allà que hauran de llegir molt.

La pila

La segona pàgina també és molt important. La Pila intervals de 256 a 511. Aquesta àrea de memòria és una llista de la primera (LIFO). Efectivament, això vol dir que només es pot recuperar de la pila l'última cosa que vas deixar-hi. És com una pila de papers netas en un escriptori, només es pot accedir a la part superior. Tenim un punter de pila (el registre S) que ens apunta a l'adreça de memòria que correspon a la part superior d'aquesta pila. El 6502 fins i tot ens dóna un control manual, ens permet empènyer i tirar les coses a la pila a l'hora d'utilitzar PHA i PLA . Pot semblar estrany per això vols una àrea de memòria com aquesta. Intentem donar un exemple on seria útil.

Primer, una terminologia que anomenarem un conjunt d' instruccions que fem servir molt subrutina. Us podeu imaginar una funció com una funció que escriuríeu en Python. Ara, anem a escriure una mica de pseudocodi:

Imaginem que els nombres que veiem al costat esquerre són localitzacions en memòria. A la localització de la memòria 1 a = 1 Es desarà, i així successivament. Mentre passem per cada línia el comptador del nostre programa serà incrementat cap amunt, així que sabem què passarà després. No obstant això, al final, arribarem a la línia 4 i haurem de trucar. subrutina1() . Per resoldre això, haurem de saltar a la línia 7. Quan s'acabi aquesta subrutina, com sabrem com tornar a casa a la línia 5?

El que passarà, per assegurar-nos que aquesta informació sigui retribuble, és que la localització on haurem de tornar serà afegida a la pila. Podem continuar com a normal des de la línia 7 sabent que quan colpegem una declaració de retorn podem extreure aquesta informació de la pila, afegir la localització de la línia 5 al taulell del programa, i tornar a casa.

No obstant això, l'exemple és una mica més complicat aquí. Quan arribem a la línia 8 (dinside subrutina1) Ara hem d'entrar. subrutina2() a la línia 10. La localització automàtica de la línia 9 (on haurem de tornar) s' afegirà a la pila. Els continguts de la pila ara semblen així:

1, line9 2. line5

La localització de la línia 9 és l'última cosa que vam empènyer, i per tant, haurà de ser la primera cosa que recuperem d'ell. Tot i que això serà el comportament exacte que volem.

Així que ara estem a la línia 10 i a l'interior subrutina2() . Podem avançar com normal a la línia 12. A la línia 12 s'acaba el subrutina i tindrem una declaració de retorn. Què hauríem de fer? On anem després? En aquest punt, deixant la localització a la part superior de la pila, sabem que tornem a la línia 9.

Ara que tornem a fer la línia 9, tornem a veure que això és una altra declaració de retorn. Anem de la pila. altra vegada i Aconsegueix la localització de la línia 5. El programa tornarà aquí i acabarà.

És molt bona idea, i val la pena intentar treure't el cap. Per resumir molt ràpidament (en la meva ment com a mínim) la pila es pot utilitzar com a manera per a la teva màquina per a fer anar el pacrems d'aigua. En desar a on també caldrà tornar, una vegada que arribi l'Eklutlosture en un subrutina el mecanisme LIFO de la pila garanteix que pot trobar el camí cap a casa.

Imagineu-vos un moment en què us manteniu ficats en subrutines. Mai tindràs l'oportunitat de treure alguna cosa de la pila. Finalment, la pila s'ompliria amb localitzacions i s'esgotaria de l'espai, fent una petada. Això s'anomena un flux de pila (hey!) Aquest és el nom d'aquest lloc web!).

I/O

La següent pàgina està reservada pels dispositius I/O. L'accés a aquestes àrees de memòria ens permetrà interactuar amb el món exterior. Les dades aquí es corresponen als dispositius externs. Llegint i escriure a aquestes ubicacions de memòria ens permet comunicar-nos amb impressores, controladors de joc i altres perifèrics.

RAM

En aquest diagrama, la memòria d' accés a l' atzar (RAM) està assignada a $0300 a $00 (aquests són valors hexadecimals, recordeu!). Aquesta és una àrea on podem escriure dades.

ROM

Les localitzacions entre $E00 i $FF es mapejan per a llegir només la memòria (ROM). Com el nom suggereix, no podem escriure aquí. De fet, qualsevol intent de fer-ho simplement serà ignorada. Un exemple de ROM s' emmagatzemaria dades sobre un cartutx de joc. Com que la consola està arrencada d' aquest record es pot llegir, però òbviament no es pot escriure o canviar les dades del joc. Si voleu modificar alguna cosa de ROM primer caldrà transferir-la a la RAM.

És cosa nostra, els programadors, per mantenir el seguiment d'on es desen les dades i si es desen adequadament. Mentre canviem del sistema al sistema també necessitarem ser conscients que la memòria pot ser mapejada de manera diferent.

Acabarem la discussió sobre la memòria amb un tema lleugerament diferent: endannescyCity name (optional, probably does not need a translation) . Si un processador i un llenguatge són poc ni " nicendia" o "gran- endian" es basa en com ordena els bytes dins d' un número. Per exemple, un petit sistema japonès situarà el nombre més significatiu de la dreta. Es necessiten 2 bytes per a emmagatzemar el número hexadecimal de l'ABC. Com que el 6502 és pocdian els 2 bytes seran ordenats: CD, AB. Les màquines grans fan el contrari. Això serà important quan comencem a escriure codi nosaltres mateixos.

Aquesta setmana hem tingut un cop d'ull a les parts principals del maquinari 655302, mostrant-nos com funciona el microprocessador en el procés. El que és important per a nosaltres ara mateix és la gran varietat de registres i el mapa de memòria que el 6502 ens dóna. Això té un impacte molt fort en el que podem fer amb la màquina. A mesura que entrem en les instruccions i ens escrium programes, veurem com interenllaçats el nostre programari serà al maquinari. De moment sembla que hem après un munt d'idees diferents i no relacionades, però com el progrés veurem com encaixa tot junts.

Ara, amb coneixement del maquinari i com es representen les dades, anem a escriure algun codi! La propera vegada, es mostrarà un conjunt de programes senzills per ampliar el nostre coneixement de les instruccions establertes i permetre'ns obtenir una idea millor de com s'escriu el llenguatge d'assemblatge.

Aquest article s'ha adaptat al meu personal. blog . La major part del contingut del que parlo vindrà de dues fonts principals: "20026502 Assemblea de programació de llengües d'A.Lventhal i "2002Programem el 6502 per Rodney Zaks.

Artículos Relacionados:

- Processador -

Esta web usa cookies, puedes ver la política de cookies, aquí -
Política de cookies +