6. nodaļa: Mūsdienu datoru arhitektūras pamati ar montāžas valodu

6 Nodala Musdienu Datoru Arhitekturas Pamati Ar Montazas Valodu



6.1. Ievads

Mūsdienu vispārējas nozīmes datori ir divu veidu: CISC un RISC. CISC apzīmē Complex Instruction Set Computer. RISK apzīmē samazinātu instrukciju komplekta datoru. 6502 vai 6510 mikroprocesori, kas attiecas uz Commodore-64 datoru, vairāk atgādina RISC arhitektūru, nevis CISC arhitektūru.

RISC datoriem parasti ir īsākas montāžas valodas instrukcijas (pēc baitu skaita), salīdzinot ar CISC datoriem.







Piezīme : neatkarīgi no tā, vai tiek izmantots CISC, RISC vai vecs dators, perifērijas ierīce sākas no iekšējā porta un iet uz āru caur ārējo portu datora sistēmas vienības (bāzes bloka) vertikālajā virsmā un uz ārējo ierīci.



Tipisku CISC datora instrukciju var uzskatīt par vairāku īsu montāžas valodas instrukciju apvienošanu vienā garākā montāžas valodas instrukcijā, kas padara iegūto instrukciju sarežģītu. Jo īpaši CISC dators ielādē operandus no atmiņas mikroprocesoru reģistros, veic darbību un pēc tam saglabā rezultātu atpakaļ atmiņā, un tas viss notiek vienā instrukcijā. No otras puses, šīs ir vismaz trīs instrukcijas (īsas) RISC datoram.



Ir divas populāras CISC datoru sērijas: Intel mikroprocesoru datori un AMD mikroprocesoru datori. AMD apzīmē Advanced Micro Devices; tas ir pusvadītāju ražošanas uzņēmums. Intel mikroprocesoru sērijas izstrādes secībā ir 8086, 8088, 80186, 80286, 80386, 80486, Pentium, Core, i Series, Celeron un Xeon. Montāžas valodas instrukcijas agrīnajiem Intel mikroprocesoriem, piemēram, 8086 un 8088, nav īpaši sarežģītas. Tomēr jaunajiem mikroprocesoriem tie ir sarežģīti. Jaunākie AMD mikroprocesori CISC sērijai ir Ryzen, Opteron, Athlon, Turion, Phenom un Sempron. Intel un AMD mikroprocesori ir pazīstami kā x86 mikroprocesori.





ARM apzīmē Advanced RISC Machine. ARM arhitektūras definē RISC procesoru saimi, kas ir piemērotas lietošanai dažādās lietojumprogrammās. Lai gan daudzi Intel un AMD mikroprocesori tiek izmantoti galddatoru personālajos datoros, daudzi ARM procesori kalpo kā iegulti procesori drošībai kritiskās sistēmās, piemēram, automobiļu pretbloķēšanas bremzēs un kā vispārējas nozīmes procesori viedpulksteņos, portatīvajos tālruņos, planšetdatoros un klēpjdatoros. . Lai gan abu veidu mikroprocesorus var redzēt mazās un lielās ierīcēs, RISC mikroprocesori ir vairāk sastopami mazās ierīcēs nekā lielās ierīcēs.

Datora Word
Ja tiek uzskatīts, ka dators ir 32 bitu vārda dators, tas nozīmē, ka informācija tiek glabāta, pārsūtīta un apstrādāta trīsdesmit divu bitu bināro kodu veidā mātesplates iekšējā daļā. Tas arī nozīmē, ka datora mikroprocesora vispārējie reģistri ir 32 bitu plati. 6502 mikroprocesora A, X un Y reģistri ir vispārējas nozīmes reģistri. Tie ir astoņu bitu plati, un tāpēc Commodore-64 dators ir astoņu bitu vārdu dators.



Daži vārdu krājumi
X86 datori

Baita, vārda, dubultvārda, četrvārda un dubultā četrvārda nozīme x86 datoriem ir šāda:

  • baits : 8 biti
  • Vārds : 16 biti
  • Doubleword : 32 biti
  • Quadword : 64 biti
  • Divkāršs četrvārds : 128 biti

ARM datori
ARM datoriem baita, pusvārda, vārda un dubultvārda nozīme ir šāda:

  • baits : 8 biti
  • Kļūsti par pusi : 16 biti
  • Vārds : 32 biti
  • Doubleword : 64 biti

Jāņem vērā atšķirības un līdzības x86 un ARM nosaukumos (un vērtībās).

Piezīme : Veseli zīmju skaitļi abos datoru tipos ir divu komplementi.

Atmiņas vieta
Commodore-64 datorā atmiņas vieta parasti ir viens baits, bet, ņemot vērā norādes (netiešā adresēšana), dažkārt tā var būt arī divi secīgi baiti. Mūsdienīgā x86 datorā atmiņas vieta ir 16 secīgi baiti, strādājot ar dubultu 16 baitu (128 bitu) četrvārdu, 8 secīgi baiti, strādājot ar 8 baitu (64 bitu) četrvārdu, 4 secīgi baiti, ja tiek izmantots dubultvārds 4 baiti (32 biti), 2 secīgi baiti, strādājot ar 2 baitu garu vārdu (16 biti), un 1 baits, ja tiek apstrādāts baits (8 biti). Mūsdienīgā ARM datorā atmiņas vieta ir 8 secīgi baiti, strādājot ar 8 baitu (64 bitu) dubultvārdu, 4 secīgi baiti, ja runa ir ar 4 baitu (32 biti) garu vārdu, 2 secīgi baiti, ja runa ir ar pusvārdu. 2 baiti (16 biti) un 1 baits, strādājot ar baitu (8 biti).

Šajā nodaļā ir izskaidrots, kas ir kopīgs CISC un RISC arhitektūrā un kādas ir to atšķirības. Tas tiek darīts salīdzinājumā ar 6502 µP un commodore-64 datoru, kur tas ir piemērojams.

6.2 Mūsdienu datora mātesplates blokshēma

PC apzīmē personālais dators. Tālāk ir sniegta vispārīga pamata blokshēma modernai mātesplatei ar vienu personālā datora mikroprocesoru. Tas apzīmē CISC vai RISC mātesplati.


6.21. att. Mūsdienu datora pamata mātesplates blokshēma

Diagrammā ir parādīti trīs iekšējie porti, bet praksē ir vairāk. Katrai ostai ir reģistrs, ko var uzskatīt par pašu ostu. Katrai portu shēmai ir vismaz vēl viens reģistrs, ko var saukt par “statusa reģistru”. Statusa reģistrs norāda portu programmai, kas sūta pārtraukuma signālu uz mikroprocesoru. Ir pārtraukumu kontrollera ķēde (nav parādīta), kas atšķir dažādas pārtraukuma līnijas no dažādiem portiem un ir tikai dažas līnijas līdz µP.

HD.C diagrammā apzīmē cietā diska karti. NIC ir tīkla interfeisa karte. Cietā diska karte (shēma) ir savienota ar cieto disku, kas atrodas mūsdienu datora bāzes blokā (sistēmas vienībā). Tīkla interfeisa karte (shēma) ir savienota ar ārēju kabeli ar citu datoru. Diagrammā ir viens ports un DMA (skatiet nākamo attēlu), kas ir savienoti ar cietā diska karti un/vai tīkla interfeisa karti. DMA apzīmē tiešo piekļuvi atmiņai.

Atcerieties no Commodore-64 datoru nodaļas, ka, lai nosūtītu baitus no atmiņas uz diskdzini vai citu datoru, katrs baits ir jāiekopē mikroprocesora reģistrā, pirms tas tiek kopēts uz atbilstošo iekšējo portu un pēc tam automātiski. uz ierīci. Lai saņemtu baitus no diskdziņa vai cita datora uz atmiņu, katrs baits pirms kopēšanas atmiņā ir jāpārkopē no attiecīgā iekšējā porta reģistra uz mikroprocesora reģistru. Tas parasti aizņem ilgu laiku, ja baitu skaits straumē ir liels. Risinājums ātrai pārsūtīšanai ir tiešās atmiņas piekļuves (shēmas) izmantošana, neizejot cauri mikroprocesoram.

DMA ķēde atrodas starp portu un HD. C vai NIC. Izmantojot DMA ķēdes tiešu piekļuvi atmiņai, lielu baitu straumju pārsūtīšana notiek tieši starp DMA ķēdi un atmiņu (RAM) bez pastāvīgas mikroprocesora līdzdalības. DMA izmanto adrešu kopni un datu kopni µP vietā. Kopējais pārsūtīšanas ilgums ir īsāks nekā tad, ja ir jāizmanto µP cietais. Gan HD C., gan NIC izmanto DMA, ja tiem ir liela datu straume (baiti) pārsūtīšanai ar RAM (atmiņu).

GPU apzīmē Graphics Processing Unit. Šis bloks mātesplatē ir atbildīgs par teksta un kustīgu vai nekustīgu attēlu nosūtīšanu uz ekrānu.

Mūsdienu datoros (personālajos datoros) nav lasāmatmiņas (ROM). Tomēr ir BIOS vai UEFI, kas ir sava veida nepastāvīga RAM. BIOS informāciju faktiski uztur akumulators. Akumulators ir tas, kas faktiski uztur arī pulksteņa taimeri datoram pareizajā laikā un datumā. UEFI tika izgudrots pēc BIOS, un tas ir aizstājis BIOS, lai gan BIOS joprojām ir diezgan aktuāls mūsdienu personālajos datoros. Vairāk par tiem apspriedīsim vēlāk!

Mūsdienu personālajos datoros adreses un datu kopnes starp µP un iekšējo portu shēmām (un atmiņu) nav paralēlas kopnes. Tās ir seriālās kopnes, kurām ir nepieciešami divi vadi pārraidei vienā virzienā un vēl divi vadītāji pārraidei pretējā virzienā. Tas nozīmē, piemēram, ka 32 bitus var nosūtīt sērijveidā (vienu bitu pēc otra) jebkurā virzienā.

Ja seriālā pārraide notiek tikai vienā virzienā ar diviem vadītājiem (divām līnijām), tas tiek uzskatīts par pusdupleksu. Ja seriālā pārraide notiek abos virzienos ar četriem vadītājiem, pa vienam pārim jebkurā virzienā, tas tiek uzskatīts par pilndupleksu.

Visa mūsdienu datora atmiņa joprojām sastāv no virknes baitu atrašanās vietu: astoņi biti baitā. Mūsdienīga datora atmiņas vieta ir vismaz 4 gigabaiti = 4 x 210 x 2 10 x 2 10 = 4 x 1 073 741 824 10 baiti = 4 x 1024 10/sub> 1024 10 x 1024 10 = 4 x 1 073 741 824 10 .

Piezīme : Lai gan iepriekšējā mātesplatē nav parādīta taimera shēma, visām mūsdienu mātesplatēm ir taimera shēmas.

6.3. x64 datora arhitektūras pamati

6.31 x64 reģistra komplekts
X86 sērijas mikroprocesoru 64 bitu mikroprocesors ir 64 bitu mikroprocesors. Diezgan moderni ir aizstāt tās pašas sērijas 32 bitu procesoru. 64 bitu mikroprocesora vispārīgie reģistri un to nosaukumi ir šādi:


6.31. att. Vispārēja pielietojuma reģistri x64

Sešpadsmit (16) vispārējas nozīmes reģistri ir parādīti dotajā attēlā. Katrs no šiem reģistriem ir 64 bitu plats. Aplūkojot reģistru augšējā kreisajā stūrī, 64 biti tiek identificēti kā RAX. Pirmie 32 šī paša reģistra biti (no labās puses) tiek identificēti kā EAX. Pirmie 16 šī paša reģistra biti (no labās puses) tiek identificēti kā AX. Šī paša reģistra otrais baits (no labās puses) tiek identificēts kā AH (H šeit nozīmē augstu). Un pirmais baits (šī paša reģistra) tiek identificēts kā AL (L šeit nozīmē zemu). Aplūkojot reģistru apakšējā labajā stūrī, 64 biti tiek identificēti kā R15. Pirmie 32 šī paša reģistra biti tiek identificēti kā R15D. Pirmie 16 šī paša reģistra biti tiek identificēti kā R15W. Un pirmais baits tiek identificēts kā R15B. Līdzīgi ir izskaidroti arī pārējo reģistru (un apakšreģistru) nosaukumi.

Pastāv dažas atšķirības starp Intel un AMD µP. Šajā sadaļā sniegtā informācija attiecas uz Intel.

Izmantojot 6502 µP, programmu skaitītāju reģistrs (nav tieši pieejams), kurā ir nākamā izpildāmā instrukcija, ir 16 bitu plats. Šeit (x64) programmas skaitītājs tiek saukts par instrukciju rādītāju, un tas ir 64 bitu plats. Tas ir apzīmēts kā RIP. Tas nozīmē, ka x64 µP var adresēt līdz pat 264 = 1,844674407 x 1019 (faktiski 18 446 744 073 709 551 616) atmiņas baitu vietām. RIP nav vispārējas nozīmes reģistrs.

Stack Pointer Register jeb RSP ir viens no 16 vispārējas nozīmes reģistriem. Tas norāda uz pēdējo steka ierakstu atmiņā. Tāpat kā ar 6502 µP, x64 steks palielinās uz leju. Izmantojot x64, RAM steks tiek izmantots, lai saglabātu apakšprogrammu atgriešanas adreses. To izmanto arī 'ēnu telpas' glabāšanai (skatiet nākamo diskusiju).

6502 µP ir 8 bitu procesora statusa reģistrs. Ekvivalentu x64 sauc par RFLAGS reģistru. Šajā reģistrā tiek saglabāti karodziņi, kas tiek izmantoti operāciju rezultātiem un procesora kontrolei (µP). Tas ir 64 bitus plats. Augstākie 32 biti ir rezervēti un pašlaik netiek izmantoti. Šajā tabulā sniegti RFLAGS reģistrā bieži lietoto bitu nosaukumi, indekss un nozīmes:

6.31.1. tabula
Visbiežāk izmantotie RFLAGS karogi (biti)
Simbols Mazliet Vārds Mērķis
CF 0 Nēsāt Tas tiek iestatīts, ja aritmētiskā darbība ģenerē pārnešanu vai aizņēmumu no rezultāta nozīmīgākā bita; notīrīts citādi. Šis karodziņš norāda pārpildes nosacījumu neparakstītu veselu skaitļu aritmētikai. To izmanto arī daudzkārtējas precizitātes aritmētikā.
PF 2 Paritāte Tas tiek iestatīts, ja rezultāta vismazāk nozīmīgais baits satur pāra skaitu 1 bitu; notīrīts citādi.
OF 4 Pielāgot Tas tiek iestatīts, ja aritmētiskā darbība ģenerē pārnešanu vai aizņēmumu no rezultāta 3. bita; notīrīts citādi. Šis karodziņš tiek izmantots bināri kodētajā decimālajā (BCD) aritmētikā.
ZF 6 Nulle Tas tiek iestatīts, ja rezultāts ir nulle; notīrīts citādi.
SF 7 Pierakstīties Tas tiek iestatīts, ja tas ir vienāds ar rezultāta nozīmīgāko bitu, kas ir vesela skaitļa zīmes bits (0 norāda uz pozitīvu vērtību un 1 norāda uz negatīvu vērtību).
OF vienpadsmit Pārplūde Tas tiek iestatīts, ja vesela skaitļa rezultāts ir pārāk liels pozitīvs skaitlis vai pārāk mazs negatīvs skaitlis (izņemot zīmes bitu), lai ietilptu mērķa operandā; notīrīts citādi. Šis karodziņš norāda pārpildes nosacījumu veselam skaitļam (divu papildinājumu) aritmētikai.
DF 10 Virziens Tas tiek iestatīts, ja darbojas virziena virknes norādījumi (palielināt vai samazināt).
ID divdesmitviens Identifikācija Tas tiek iestatīts, ja maināmība norāda uz CPUID instrukcijas klātbūtni.

Papildus iepriekš norādītajiem astoņpadsmit 64 bitu reģistriem x64 arhitektūrai µP ir astoņi 80 bitu plati reģistri peldošā komata aritmētikai. Šos astoņus reģistrus var izmantot arī kā MMX reģistrus (skatiet šo diskusiju). Ir arī sešpadsmit 128 bitu XMM reģistri (skatiet šo diskusiju).

Tas vēl nav viss par reģistriem. Ir vairāk x64 reģistru, kas ir segmentu reģistri (lielākoties x64 neizmantoti), vadības reģistri, atmiņas pārvaldības reģistri, atkļūdošanas reģistri, virtualizācijas reģistri, veiktspējas reģistri, kas izseko visu veidu iekšējos parametrus (kešatmiņas trāpījumus/kļūdas, izpildītās mikrooperācijas, laiku , un daudz vairāk).

SIMD

SIMD apzīmē Single Instruction Multiple Data. Tas nozīmē, ka viena montāžas valodas instrukcija var iedarboties uz vairākiem datiem vienlaikus vienā mikroprocesorā. Apsveriet šādu tabulu:

1 2 3 4 5 6 7 8
+ 9 10 vienpadsmit 12 13 14 piecpadsmit 16
= 10 12 14 16 18 divdesmit 22 24

Šajā tabulā astoņi skaitļu pāri ir pievienoti paralēli (vienādā ilgumā), lai iegūtu astoņas atbildes. Viena montāžas valodas instrukcija var veikt astoņus paralēlus veselus skaitļus MMX reģistros. Līdzīgu darbību var izdarīt ar XMM reģistriem. Tātad ir MMX instrukcijas veseliem skaitļiem un XMM instrukcijas pludiņiem.

6.32 Atmiņas karte un x64

Ja instrukciju rādītājam (programmu skaitītājam) ir 64 biti, tas nozīmē, ka var adresēt 264 = 1,844674407 x 1019 atmiņas baitu vietas. Heksadecimālajā sistēmā augstākā baita atrašanās vieta ir FFFF,FFFF,FFFF,FFFF16. Neviens parasts dators mūsdienās nevar nodrošināt tik lielu atmiņas (pilnīgu) vietu. Tātad piemērota atmiņas karte x64 datoram ir šāda:

Ņemiet vērā, ka starpībai no 0000,8000,0000,000016 līdz FFFF,7FFF,FFFF,FFFF16 nav atmiņas vietu (nav atmiņas RAM banku). Tā ir atšķirība FFFF,0000,0000,000116, kas ir diezgan liela. Kanoniskajā augstākajā pusē ir operētājsistēma, savukārt kanoniskajā zemākajā pusē ir lietotāja programmas (lietojumprogrammas) un dati. Operētājsistēma sastāv no divām daļām: maza UEFI (BIOS) un lielas daļas, kas tiek ielādēta no cietā diska. Nākamajā nodaļā ir runāts vairāk par mūsdienu operētājsistēmām. Ņemiet vērā līdzību ar šo atmiņas karti un Commodore-64, kad 64 KB varēja izskatīties kā daudz atmiņas.

Šajā kontekstā operētājsistēmu aptuveni sauc par “kodolu”. Kodols ir līdzīgs Commodore-64 datora kodolam, taču tam ir daudz vairāk apakšprogrammu.

X64 endianness ir mazs, kas nozīmē, ka atrašanās vietai zemākā adrese norāda uz zemāko satura baitu atmiņā.

6.33. Montāžas valodas adresācijas režīmi x64

Adresācijas režīmi ir veidi, kā instrukcija var piekļūt µP reģistriem un atmiņai (ieskaitot iekšējos portu reģistrus). X64 ir daudz adresācijas režīmu, taču šeit ir apskatīti tikai parasti izmantotie adresācijas režīmi. Vispārējā instrukcijas sintakse šeit ir:

opkoda galamērķis, avots

Decimālskaitļi tiek rakstīti bez prefiksa vai sufiksa. Izmantojot 6502, avots ir netiešs. X64 ir vairāk operāciju kodu nekā 6502, taču dažiem opkodiem ir tāda pati mnemonika. Atsevišķām x64 instrukcijām ir mainīgs garums, un to izmērs var svārstīties no 1 līdz 15 baitiem. Parasti izmantotie adresācijas režīmi ir šādi:

Tūlītējās adresācijas režīms
Šeit avota operands ir faktiskā vērtība, nevis adrese vai etiķete. Piemērs (lasi komentāru):

ADD EAX, 14 ; pievienojiet decimāldaļu 14 līdz 32 bitu EAX no 64 bitu RAX, atbilde paliek EAX (galamērķis)

Reģistrējieties, lai reģistrētu adresācijas režīmu
Piemērs:

ADD R8B, AL ; pievienojiet RAX 8 bitu AL 64 bitu R8 R8B — atbildes paliek R8B (galamērķis)

Netiešā un indeksētā adresācijas režīms
Netiešā adresēšana ar 6502 µP nozīmē, ka norādītās adreses atrašanās vietai instrukcijā ir gala atrašanās vietas faktiskā adrese (rādītājs). Līdzīgi notiek ar x64. Indeksa adresēšana ar 6502 µP nozīmē, ka instrukcijā norādītajai adresei tiek pievienots µP reģistra saturs, lai iegūtu efektīvu adresi. Līdzīgi notiek ar x64. Tāpat ar x64 reģistra saturu var arī reizināt ar 1 vai 2, vai 4 vai 8, pirms tas tiek pievienots norādītajai adresei. Mov (kopēšanas) instrukcija x64 var apvienot gan netiešo, gan indeksēto adresēšanu. Piemērs:

MOV R8W, 1234[8*RAX+RCX] ; pārvietot vārdu uz adresi (8 x RAX + RCX) + 1234

Šeit R8W ir pirmie 16 biti no R8. Dotā adrese ir 1234. RAX reģistrā ir 64 bitu skaitlis, kas tiek reizināts ar 8. Rezultāts tiek pievienots 64 bitu RCX reģistra saturam. Šis otrais rezultāts tiek pievienots norādītajai adresei, kas ir 1234, lai iegūtu faktisko adresi. Spēkā esošās adreses vietā esošais numurs tiek pārvietots (kopēts) uz R8 reģistra pirmo 16 bitu vietu (R8W), aizstājot visu, kas tur bija. Ievērojiet kvadrātiekavas izmantošanu. Atcerieties, ka vārds x64 formātā ir 16 bitu plats.

RIP relatīvā adresācija
6502 µP relatīvā adresēšana tiek izmantota tikai ar zaru instrukcijām. Tur vienīgais operācijas koda operands ir nobīde, kas tiek pievienota vai atņemta programmas skaitītāja saturam efektīvai instrukciju adresei (nevis datu adresei). Līdzīga lieta notiek ar x64, kur programmu skaitītājs tiek saukts par instrukciju rādītāju. Instrukcijai ar x64 nav jābūt tikai filiāles instrukcijai. RIP relatīvās adresācijas piemērs ir:

MOV AL, [RIP]

RAX AL ir 8 bitu parakstīts numurs, kas tiek pievienots vai atņemts no RIP satura (64 bitu instrukciju rādītājs), lai norādītu uz nākamo instrukciju. Ņemiet vērā, ka šajā instrukcijā avots un galamērķis ir izņēmuma kārtā apmainīti. Ņemiet vērā arī kvadrātiekavās, kas attiecas uz RIP saturu.

6.34. Bieži lietotās x64 instrukcijas

Šajā tabulā * apzīmē dažādus iespējamos opkodu apakškopas sufiksus:

6.34.1. tabula
Bieži lietotās instrukcijas x64 formātā
Opkods Nozīme
MOV Pārvietot (kopēt) uz/no/starp atmiņu un reģistriem
CMOV* Dažādas nosacītas kustības
XCHG Apmaiņa
BSWAP Baitu maiņa
PUSH/POP Stack izmantošana
ADD/ADC Pievienot/ar pārnēsāšanu
SUB/SBC Atņemt/ar pārnēsāšanu
MUL/IMUL Reizināt/neparakstīts
DIV/IDIV Sadalīt/neparakstīts
INC/DEC Palielināt/samazināt
NEG Noliegt
CMP Salīdzināt
UN/VAI/XOR/NAV Bitu darbības
SHR/SAR Pārbīdīt pa labi loģiskā/aritmētika
SHL/SAL Pārbīdīt pa kreisi loģiskā/aritmētiskā
ROR/LOLE Pagriezt pa labi/pa kreisi
RCR/RCL Pagrieziet pa labi/pa kreisi cauri uzgali
BT/BTS/BTR Bitu pārbaude/un iestatīšana/un atiestatīšana
JMP Beznosacījumu lēciens
JE/JNE/JC/JNC/J* Pārlēkt, ja vienāds / nav vienāds / nest / nenēsāt / daudzi citi
staigāt/staigāt/staigāt Cilpa ar ECX
ZVANIET/RET Zvanīt apakšprogrammai/atgriezties
NOP Nav operācijas
CPUID CPU informācija

X64 ir reizināšanas un dalīšanas instrukcijas. Tam ir reizināšanas un dalīšanas aparatūras shēmas µP. 6502 µP nav reizināšanas un dalīšanas aparatūras ķēžu. Reizināšana un dalīšana ir ātrāka pēc aparatūras nekā ar programmatūru (ieskaitot bitu pārvietošanu).

Virknes instrukcijas
Ir vairāki virkņu norādījumi, taču vienīgais, kas šeit jāapspriež, ir MOVS (pārvietošanas virknei) instrukcija, lai kopētu virkni, kas sākas ar adresi C000. H . Lai sāktu ar adresi C100 H , izmantojiet šādu instrukciju:

MOVS [C100H], [C000H]

Ņemiet vērā heksadecimālas sufiksu H.

6.35 Looping in x64

6502 µP ir atzaru instrukcijas cilpai. Filiāles instrukcija pāriet uz adreses vietu, kurā ir jaunā instrukcija. Adreses atrašanās vietu var saukt par “cilpu”. X64 ir LOOP/LOOPE/LOOPNE instrukcijas cilpu veidošanai. Šos rezervētās montāžas valodas vārdus nedrīkst sajaukt ar apzīmējumu “cilpa” (bez pēdiņām). Uzvedība ir šāda:

LOOP samazina ECX un pārbauda, ​​vai ECX nav nulle. Ja šis nosacījums (nulle) ir izpildīts, tas pāriet uz norādīto etiķeti. Pretējā gadījumā tas neizdodas (turpiniet ar pārējiem norādījumiem nākamajā diskusijā).

LOOPE samazina ECX un pārbauda, ​​vai ECX nav nulle (var būt, piemēram, 1) un ZF ir iestatīts (uz 1). Ja šie nosacījumi ir izpildīti, tas lec uz etiķetes. Pretējā gadījumā tas izkrīt.

LOOPNE samazina ECX un pārbauda, ​​vai ECX nav nulle un ZF NAV iestatīts (t.i., ir nulle). Ja šie nosacījumi ir izpildīti, tas pāriet uz etiķeti. Pretējā gadījumā tas izkrīt.

Izmantojot x64, RCX reģistrā vai tā apakšdaļās, piemēram, ECX vai CX, ir skaitītāja veselais skaitlis. Izmantojot LOOP norādījumus, skaitītājs parasti skaita uz leju, samazinot par 1 par katru lēcienu (cilpu). Nākamajā cilpas koda segmentā skaitlis EAX reģistrā palielinās no 0 līdz 10 desmit iterācijās, savukārt ECX skaits samazinās (samazinās) 10 reizes (lasiet komentārus):

MOV EAX, 0 ;
MOV ECX, 10 ; pēc noklusējuma atskaitīt 10 reizes, vienu reizi katrai iterācijai
etiķete:
INC EAX ; palielināt EAX kā cilpas pamattekstu
LOOP etiķete ; samaziniet EAX un, ja EAX nav nulle, atkārtoti izpildiet cilpas pamattekstu no “label:”

Cilpas kodēšana sākas ar “label:”. Ievērojiet resnās zarnas lietošanu. Cilpas kodēšana beidzas ar “LOOP etiķeti”, kas saka, ka jāsamazina EAX. Ja tās saturs nav nulle, atgriezieties pie instrukcijas pēc “label:” un atkārtoti izpildiet jebkuru instrukciju (visas pamatteksta instrukcijas), kas nāk uz leju, līdz parādās “LOOP etiķete”. Ņemiet vērā, ka “iezīmei” joprojām var būt cits nosaukums.

6.36 x64 ieeja/izvade

Šī nodaļas sadaļa attiecas uz datu nosūtīšanu uz izejas (iekšējo) portu vai datu saņemšanu no ievades (iekšējā) porta. Mikroshēmam ir astoņu bitu porti. Jebkurus divus secīgus 8 bitu portus var uzskatīt par 16 bitu portiem, un jebkurus četrus secīgus portus var uzskatīt par 32 bitu portiem. Tādā veidā procesors var pārsūtīt 8, 16 vai 32 bitus uz ārēju ierīci vai no tās.

Informāciju starp procesoru un iekšējo portu var pārsūtīt divos veidos: izmantojot tā saukto atmiņas kartētu ievadi/izvadi vai atsevišķu ievades/izvades adrešu telpu. Atmiņas kartētais I/O ir līdzīgs tam, kas notiek ar 6502 procesoru, kur portu adreses faktiski ir daļa no visas atmiņas vietas. Šajā gadījumā, nosūtot datus uz noteiktu adreses vietu, tie nonāk pieslēgvietā, nevis atmiņas bankā. Portiem var būt atsevišķa I/O adrešu telpa. Šajā pēdējā gadījumā visu atmiņas banku adreses ir no nulles. Ir atsevišķs adrešu diapazons no 0000H līdz FFFF16. Tos izmanto mikroshēmojuma porti. Mātesplate ir ieprogrammēta tā, lai nesajauktu atmiņas kartēto I/O un atsevišķu I/O adrešu telpu.

Atmiņas kartēta I/O
Tādējādi porti tiek uzskatīti par atmiņas vietām, un parastie opkodi, kas jāizmanto starp atmiņu un µP, tiek izmantoti datu pārsūtīšanai starp µP un portiem. Tātad, lai pārvietotu baitu no porta ar adresi F000H uz µP reģistru RAX:EAX:AX:AL, rīkojieties šādi:

MOV AL, [F000H]

Virkni var pārvietot no atmiņas uz portu un otrādi. Piemērs:

MOVS [F000H], [C000H] ; avots ir C000H, un galamērķis ir osta F000H.

Atsevišķa I/O adrešu telpa

Šajā gadījumā ir jāizmanto īpaši ievades un izvades norādījumi.

Atsevišķu priekšmetu pārsūtīšana
Pārsūtīšanas procesora reģistrs ir RAX. Faktiski dubultvārdam tas ir RAX:EAX, vārdam RAX:EAX:AX ​​un baitam RAX:EAX:AX:AL. Tātad, lai pārsūtītu baitu no porta FFF0h uz RAX:EAX:AX:AL, ierakstiet šo:

IN AL, [FFF0H]

Lai veiktu apgriezto pārsūtīšanu, ierakstiet šo:

OUT [FFF0H], AL

Tātad atsevišķiem priekšmetiem norādījumi ir IN un OUT. Porta adresi var norādīt arī RDX:EDX:DX reģistrā.

Virkņu pārsūtīšana
Virkni var pārsūtīt no atmiņas uz mikroshēmojuma portu un otrādi. Lai pārsūtītu virkni no porta ar adresi FFF0H uz atmiņu, sāciet ar C100H, ierakstiet:

INS [ESI], [DX]

kam ir tāds pats efekts kā:

INS [EDI], [DX]

Programmētājam ir jāievieto FFF0H divu baitu porta adrese RDX:EDX:Dx reģistrā un C100H divu baitu adrese jāievieto RSI:ESI vai RDI:EDI reģistrā. Lai veiktu apgrieztu pārsūtīšanu, rīkojieties šādi:

INS [DX], [ESI]

kam ir tāds pats efekts kā:

INS [DX], [EDI]

6.37 The Stack in x64

Tāpat kā 6502 procesoram, arī x64 procesoram ir RAM. X64 kaudze var būt 2 16 = 65 536 baiti garš vai tas var būt 2 32 = 4 294 967 296 baiti garš. Tas aug arī uz leju. Kad reģistra saturs tiek ievietots stekā, RSP steka rādītāja skaitlis tiek samazināts par 8. Atcerieties, ka x64 atmiņas adrese ir 64 bitu plata. Vērtība steka rādītājā µP norāda uz nākamo vietu stekā RAM. Kad reģistra saturs (vai vērtība vienā operandā) tiek ievietots no steka reģistrā, RSP steka rādītāja skaitlis tiek palielināts par 8. Operētājsistēma nosaka steka lielumu un tā sākuma vietu RAM. un aug uz leju. Atcerieties, ka kaudze ir pēdējā-pirmā-out (LIFO) struktūra, kas šajā gadījumā aug uz leju un sarūk uz augšu.

Lai pārvietotu µP RBX reģistra saturu uz steku, rīkojieties šādi:

PUSH RBX

Lai pēdējo ierakstu kaudzē atgrieztu atpakaļ uz RBX, rīkojieties šādi:

POP RBX

6.38 Procedūra x64 formātā

Apakšprogrammu x64 sauc par “procedūru”. Šeit steks tiek izmantots vairāk nekā 6502 µP. Sintakse x64 procedūrai ir:

proc_name:
procedūras iestāde

pa labi

Pirms turpināt, ievērojiet, ka x64 apakšprogrammas opkodi un etiķetes (vispārīgi montāžas valodas norādījumi) nav reģistrjutīgi. Tas ir proc_name ir tāds pats kā PROC_NAME. Tāpat kā 6502, procedūras nosaukuma (iezīmes) nosaukums sākas jaunas rindas sākumā montāžas valodas teksta redaktorā. Tam seko kols, nevis atstarpe un operācijas kods, kā ar 6502. Tālāk seko apakšprogrammas pamatteksts, kas beidzas ar RET, nevis RTS, kā ar 6502 µP. Tāpat kā ar 6502, katra instrukcija korpusā, ieskaitot RET, nesākas tās rindas sākumā. Ņemiet vērā, ka etiķete šeit var būt garāka par 8 rakstzīmēm. Lai izsauktu šo procedūru no augšas vai zem drukātās procedūras, rīkojieties šādi:

CALL proc_name

Izmantojot tālruni 6502, etiķetes nosaukums ir tikai zvanīšanas veids. Tomēr šeit tiek ierakstīts rezervētais vārds “CALL” vai “call”, kam aiz atstarpes seko procedūras (apakšprogrammas) nosaukums.

Strādājot ar procedūrām, parasti ir divas procedūras. Viena procedūra izsauc otru. Procedūru, kas izsauc (kurai ir zvanīšanas instrukcija), sauc par “zvanītāju”, un procedūru, kas tiek izsaukta, sauc par “zvanītāju”. Ir konvencija (noteikumi), kas jāievēro.

Zvanītāja noteikumi

Izsaucot apakšprogrammu, zvanītājam ir jāievēro šādi noteikumi:

1. Pirms apakšprogrammas izsaukšanas zvanītājam ir jāsaglabā noteiktu reģistru saturs, kas ir norādīti kā zvanītāja saglabātie, lai krautu kopā. Zvanītāja saglabātie reģistri ir R10, R11 un visi reģistri, kuros tiek ievadīti parametri (RDI, RSI, RDX, RCX, R8, R9). Ja šo reģistru saturs ir jāsaglabā visā apakšprogrammas izsaukumā, ievietojiet tos stekā, nevis saglabājiet to RAM. Tas ir jādara, jo izsaucējam ir jāizmanto reģistri, lai izdzēstu iepriekšējo saturu.

2. Ja procedūra ir, piemēram, divu skaitļu pievienošana, šie divi skaitļi ir parametri, kas jānodod stekam. Lai parametrus nodotu apakšprogrammai, sešus no tiem ievietojiet sekojošos reģistros: RDI, RSI, RDX, RCX, R8, R9. Ja apakšprogrammai ir vairāk nekā seši parametri, pārējos ievietojiet stekā apgrieztā secībā (t.i., pēdējais parametrs vispirms). Tā kā steks palielinās, pirmais no papildu parametriem (tiešām septītais parametrs) tiek saglabāts zemākajā adresē (šī parametru inversija vēsturiski tika izmantota, lai funkcijas (apakšprogrammas) varētu nodot ar mainīgu parametru skaitu).

3. Lai izsauktu apakšprogrammu (procedūru), izmantojiet izsaukuma instrukciju. Šī instrukcija novieto atgriešanas adresi virs steka parametriem (zemākā pozīcija) un apakšprogrammas koda atzarojumus.

4. Pēc apakšprogrammas atgriešanās (t.i., tūlīt pēc izsaukuma norādījuma), zvanītājam ir jānoņem no steka visi papildu parametri (izņemot sešus, kas tiek glabāti reģistros). Tas atjauno steku stāvoklī pirms zvana veikšanas.

5. Zvanītājs var sagaidīt, ka RAX reģistrā atradīs apakšprogrammas atgriešanas vērtību (adresi).

6. Zvanītājs atjauno zvanītāja saglabāto reģistru saturu (R10, R11 un jebkuru parametru nodošanas reģistru), izvelkot tos no steka. Zvanītājs var pieņemt, ka apakšprogramma nav mainījusi nevienu citu reģistru.

Tā kā izsaukšanas kārtība ir strukturēta, parasti dažas (vai lielākā daļa) no šīm darbībām stekā netiks veiktas nekādas izmaiņas. Piemēram, ja ir seši vai mazāk parametru, šajā darbībā nekas netiek uzspiests uz steku. Tāpat programmētāji (un kompilatori) 1. un 6. darbībā parasti neļauj viņiem interesējošos rezultātus no zvanītāja saglabātajiem reģistriem, lai novērstu pārmērīgus grūdienus un uzlēcienus.

Ir divi citi veidi, kā parametrus nodot apakšprogrammai, taču tie netiks apskatīti šajā tiešsaistes karjeras kursā. Viens no tiem izmanto pašu steku, nevis vispārējas nozīmes reģistrus.

Callee noteikumi

Izsauktās apakšprogrammas definīcijai jāatbilst šādiem noteikumiem:

1. Piešķiriet lokālos mainīgos (mainīgos, kas tiek izstrādāti procedūras ietvaros), izmantojot reģistrus vai atstājot vietu stekā. Atgādināt, kaudze aug uz leju. Tātad, lai atbrīvotu vietu steka augšpusē, steka rādītājs ir jāsamazina. Summa, par kādu tiek samazināts steka rādītājs, ir atkarīgs no vajadzīgā lokālo mainīgo skaita. Piemēram, ja ir nepieciešams lokālais pludiņš un lokālais garš (kopā 12 baiti), steka rādītājs ir jāsamazina par 12, lai atbrīvotu vietu šiem vietējiem mainīgajiem. Augsta līmeņa valodā, piemēram, C, tas nozīmē mainīgo lielumu deklarēšanu, nepiešķirot (inicializējot) vērtības.

2. Pēc tam ir jāsaglabā visu to reģistru vērtības, kuri ir norādīti zvanītāja saglabātie (vispārējās nozīmes reģistri, kurus nav saglabājis zvanītājs), kurus izmanto funkcija. Lai saglabātu reģistrus, spiediet tos uz steku. Zvanītāja saglabātie reģistri ir RBX, RBP un ​​R12 līdz R15 (RSP tiek saglabāts arī saskaņā ar zvanu konvenciju, taču šīs darbības laikā tie nav jānospiež stekā).

Pēc šo trīs darbību veikšanas var turpināties faktiskā apakšprogrammas darbība. Kad apakšprogramma ir gatava atgriezties, zvana vienošanās noteikumi turpinās.

3. Kad apakšprogramma ir pabeigta, apakšprogrammas atgriešanas vērtība jāievieto RAX, ja tā tur vēl nav.

4. Apakšprogrammai ir jāatjauno visu modificēto izsaukto reģistru (RBX, RBP un ​​R12 līdz R15) vecās vērtības. Reģistra saturs tiek atjaunots, izlaižot tos no steka. Ņemiet vērā, ka reģistri ir jāievieto apgrieztā secībā, kādā tie tika nospiesti.

5. Tālāk mēs atdalām vietējos mainīgos. Vienkāršākais veids, kā to izdarīt, ir pievienot RSP tādu pašu summu, kas tika atņemta no tā 1. darbībā.

6. Visbeidzot, mēs atgriežamies pie zvanītāja, izpildot ret instrukciju. Šī instrukcija atradīs un noņems atbilstošo atgriešanas adresi no steka.

Zvanītāja apakšprogrammas pamatteksta piemērs, lai izsauktu citu apakšprogrammu, kas ir “myFunc”, ir šāds (lasiet komentārus):

; Vēlaties izsaukt funkciju 'myFunc', kas aizņem trīs
; vesels skaitlis parametrs. Pirmais parametrs ir RAX.
; Otrais parametrs ir konstante 456. Trešais
; parametrs atrodas atmiņas vietā 'variabl'

push rdi ; rdi būs param , tāpēc to saglabājot
; garš retVal = myFunc (x, 456, z);

mov rdi , rax ; ievietojiet pirmo parametru RDI
mov rsi, 456 ; Ievietojiet otro parametru RSI
mov rdx , [variabl] ; ievietojiet trešo parametru RDX

izsaukt myFunc ; izsaukt funkciju

pop rdi ; atjaunot saglabāto RDI vērtību
; myFunc atgriešanas vērtība tagad ir pieejama RAX

Callee funkcijas (myFunc) piemērs ir (lasiet komentārus):

myFunc:
; ∗∗∗ Standarta apakšprogrammas prologs ∗∗∗
sub rsp, 8; telpa 64 bitu lokālajam mainīgajam (rezultātam), izmantojot “apakš” operācijas kodu

push rbx ; saglabāt zvanītāja-saglabāt reģistrus
push rbp ; abas izmantos myFunc

; ∗∗∗ Apakšrutīna Body ∗∗∗
mov rax , rdi ; parametrs 1 uz RAX
mov rbp , rsi ; parametrs 2 uz RBP
mov rbx, rdx; parametrs 3 uz rb x
mov [rsp+16], rbx; ielieciet rbx lokālajā mainīgajā
pievienot [rsp + 1 6], rbp; pievienojiet rbp vietējam mainīgajam
mov rax, [rsp +16]; lokālā mainīgā mov saturu uz RAX
; (atdeves vērtība/gala rezultāts)

; ∗∗∗ Standarta apakšprogrammas epilogs ∗∗∗
pop rbp ; atgūt zvanītāja saglabāšanas reģistrus
pop rbx ; otrādi, kad spiež
pievienot rsp, 8; atdalīt vietējo mainīgo(-us). 8 nozīmē 8 baitus
ret ; pop top vērtība no steka, pārejiet tur

6.39. x64 pārtraukumi un izņēmumi

Procesors nodrošina divus mehānismus programmas izpildes pārtraukšanai, pārtraukumiem un izņēmumiem:

  • Pārtraukums ir asinhrons (var notikt jebkurā laikā) notikums, ko parasti aktivizē I/O ierīce.
  • Izņēmums ir sinhrons notikums (notiek, kad kods tiek izpildīts, iepriekš ieprogrammēts, pamatojoties uz kādu notikumu), kas tiek ģenerēts, kad procesors, izpildot instrukciju, konstatē vienu vai vairākus iepriekš definētus nosacījumus. Ir norādītas trīs izņēmumu klases: defekti, slazdi un pārtraukumi.

Procesors reaģē uz pārtraukumiem un izņēmumiem būtībā tādā pašā veidā. Kad tiek signalizēts par pārtraukumu vai izņēmumu, procesors aptur pašreizējās programmas vai uzdevuma izpildi un pārslēdzas uz apstrādātāja procedūru, kas ir īpaši rakstīta, lai apstrādātu pārtraukuma vai izņēmuma nosacījumu. Procesors piekļūst apstrādātāja procedūrai, izmantojot ierakstu pārtraukumu deskriptoru tabulā (IDT). Kad apstrādātājs ir pabeidzis pārtraukuma vai izņēmuma apstrādi, programmas vadība tiek atgriezta pārtrauktajā programmā vai uzdevumā.

Operētājsistēma, izpildvaras un/vai ierīču draiveri parasti apstrādā pārtraukumus un izņēmumus neatkarīgi no lietojumprogrammām vai uzdevumiem. Tomēr lietojumprogrammas var piekļūt pārtraukumu un izņēmumu apstrādātājiem, kas ir iekļauti operētājsistēmā, vai izpildīt to, izmantojot montāžas valodas zvanus.

Ir definēti astoņpadsmit (18) iepriekš noteikti pārtraukumi un izņēmumi, kas saistīti ar ierakstiem IDT. Divsimt divdesmit četrus (224) lietotāja definētus pārtraukumus var arī veikt un saistīt ar tabulu. Katrs pārtraukums un izņēmums IDT tiek identificēts ar numuru, ko sauc par 'vektoru'. 6.39.1. tabulā ir uzskaitīti pārtraukumi un izņēmumi ar ierakstiem IDT un to attiecīgajiem vektori. Vektori no 0 līdz 8, no 10 līdz 14 un no 16 līdz 19 ir iepriekš noteikti pārtraukumi un izņēmumi. Vektori no 32 līdz 255 ir paredzēti programmatūras definētiem pārtraukumiem (lietotājam), kas ir paredzēti programmatūras pārtraukumiem vai maskējamiem aparatūras pārtraukumiem.

Kad procesors konstatē pārtraukumu vai izņēmumu, tas veic vienu no šīm darbībām:

  • Izpildīt netiešu apdarinātāja procedūras izsaukumu
  • Izpildīt netiešu apdarinātāja uzdevuma izsaukumu

6.4. 64 bitu ARM datoru arhitektūras pamati

ARM arhitektūras definē RISC procesoru saimi, kas ir piemērotas lietošanai dažādās lietojumprogrammās. ARM ir ielādes/glabāšanas arhitektūra, kas prasa, lai dati no atmiņas tiktu ielādēti reģistrā, pirms ar to var veikt jebkādu apstrādi, piemēram, ALU (Aritmētiskās loģiskās vienības) darbību. Nākamā instrukcija saglabā rezultātu atpakaļ atmiņā. Lai gan tas varētu šķist solis atpakaļ no x86 un x64 arhitektūrām, kas vienā instrukcijā darbojas tieši ar operandiem atmiņā (protams, izmantojot procesora reģistrus), praksē ielādes/glabāšanas pieeja ļauj veikt vairākas secīgas darbības. kas jāveic lielā ātrumā operandam, kad tas ir ielādēts vienā no daudzajiem procesora reģistriem. ARM procesoriem ir iespēja izvēlēties mazu vai lielu funkcionalitāti. Noklusējuma ARM 64 iestatījums ir mazs, kas ir konfigurācija, ko parasti izmanto operētājsistēmas. 64 bitu ARM arhitektūra ir moderna, un tā ir iestatīta aizstāt 32 bitu ARM arhitektūru.

Piezīme : Katra instrukcija 64 bitu ARM µP ir 4 baiti (32 biti) gara.

6.41 64 bitu ARM reģistra komplekts
64 bitu ARM µP ir 31 vispārīgs 64 bitu reģistru mērķis. Šajā diagrammā ir parādīti vispārēja lietojuma reģistri un daži svarīgi reģistri:


4.11.1. att. 64 bitu vispārējs mērķis un daži svarīgi reģistri

Universālie reģistri tiek saukti par X0 līdz X30. Katra reģistra pirmā 32 bitu daļa tiek saukta par W0 līdz W30. Ja netiek uzsvērta atšķirība starp 32 bitiem un 64 bitiem, tiek izmantots prefikss “R”. Piemēram, R14 attiecas uz W14 vai X14.

6502 µP ir 16 bitu programmu skaitītājs, un tas var risināt 2 16 atmiņas baitu atrašanās vietas. 64 bitu ARM µP ir 64 bitu programmu skaitītājs, un tas var uzrunāt līdz 2 64 = 1,844674407 x 1019 (faktiski 18 446 744 073 709 551 616) atmiņas baitu vietas. Programmas skaitītājs satur nākamās izpildāmās instrukcijas adresi. ARM64 vai AArch64 instrukcijas garums parasti ir četri baiti. Procesors automātiski palielina šo reģistru par četriem pēc katras instrukcijas iegūšanas no atmiņas.

Stack Pointer reģistrs jeb SP nav starp 31 vispārējas nozīmes reģistru. Jebkuras arhitektūras steka rādītājs norāda uz pēdējo steka ierakstu atmiņā. ARM-64 kaudze aug uz leju.

6502 µP ir 8 bitu procesora statusa reģistrs. Ekvivalentu ARM64 sauc par PSTATE reģistru. Šajā reģistrā tiek saglabāti karodziņi, kas tiek izmantoti operāciju rezultātiem un procesora kontrolei (µP). Tas ir 32 bitus plats. Šajā tabulā ir norādīti PSTATE reģistrā bieži lietoto bitu nosaukumi, indekss un nozīmes:

6.41.1. tabula
Visbiežāk izmantotie PSTATE karodziņi (biti)
Simbols Mazliet Mērķis
M 0-3 Režīms: pašreizējais izpildes privilēģiju līmenis (USR, SVC un tā tālāk).
T 4 Īkšķis: tiek iestatīts, ja T32 (Īkšķis) instrukciju kopa ir aktīva. Ja tas ir skaidrs, ARM instrukciju kopa ir aktīva. Lietotāja kods var iestatīt un notīrīt šo bitu.
UN 9 Endianness: iestatot šo bitu, tiek iespējots big-endian režīms. Ja skaidrs, ir aktīvs mazā gala režīms. Noklusējums ir mazā gala režīms.
J 27 Kumulatīvā piesātinājuma karodziņš: tiek iestatīts, ja kādā darbību sērijas brīdī notiek pārpilde vai piesātinājums.
IN 28 Pārpildes karodziņš: tas tiek iestatīts, ja operācijas rezultātā radās parakstīta pārpilde.
C 29 Pārnēsāšanas karodziņš: tas norāda, vai saskaitīšana radīja pārnešanu vai atņemšana radīja aizņēmumu.
AR 30 Nulles karodziņš: tiek iestatīts, ja darbības rezultāts ir nulle.
N 31 Negatīvs karodziņš: tiek iestatīts, ja darbības rezultāts ir negatīvs.

ARM-64 µP ir daudz citu reģistru.

SIMD
SIMD apzīmē Single Instruction, Multiple Data. Tas nozīmē, ka viena montāžas valodas instrukcija var iedarboties uz vairākiem datiem vienlaikus vienā mikroprocesorā. Ir trīsdesmit divi 128 bitu plati reģistri lietošanai ar SIMD un peldošā komata operācijām.

6.42 Atmiņas kartēšana
RAM un DRAM ir brīvpiekļuves atmiņas. DRAM darbojas lēnāk nekā RAM. DRAM ir lētāka nekā RAM. Ja atmiņā ir vairāk nekā 32 gigabaiti (GB) nepārtrauktas DRAM, radīsies vairāk atmiņas pārvaldības problēmu: 32 GB = 32 x 1024 x 1024 x 1024 baiti. Visai atmiņas vietai, kas ir daudz lielāka par 32 GB, labākai atmiņas pārvaldībai DRAM, kas pārsniedz 32 GB, ir jāapvieno ar RAM. Lai saprastu ARM-64 atmiņas karti, vispirms ir jāizprot 4 GB atmiņas karte 32 bitu ARM centrālajam procesoram (CPU). CPU nozīmē µP. 32 bitu datoram maksimālā adresējamā vieta atmiņā ir 2 32 = 4 x 2 10 x 2 10 x 2 10 = 4 x 1024 x 1024 x 1024 = 4 294 967 296 = 4 GB.

32 bitu ARM atmiņas karte
32 bitu ARM atmiņas karte ir šāda:

32 bitu datoram visas atmiņas maksimālais lielums ir 4 GB. No 0 GB adreses līdz 1 GB adresei ir ROM operētājsistēma, RAM un I/O atrašanās vietas. Visa ideja par ROM OS, RAM un I/O adresēm ir līdzīga situācijai Commodore-64 ar iespējamu 6502 CPU. Commodore-64 OS ROM atrodas atmiņas vietas augšdaļā. Šeit esošā ROM OS ir daudz lielāka nekā Commodore-64, un tā atrodas visas atmiņas adrešu telpas sākumā. Salīdzinot ar citiem mūsdienu datoriem, ROM OS šeit ir pilnīga tādā nozīmē, ka tā ir salīdzināma ar OS skaitu to cietajos diskos. Ir divi galvenie iemesli, kāpēc OS ir iekļautas ROM integrētajās shēmās: 1) ARM CPU galvenokārt izmanto mazās ierīcēs, piemēram, viedtālruņos. Daudzi cietie diski ir lielāki par viedtālruņiem un citām mazām ierīcēm, 2) drošības nolūkos. Ja OS ir tikai lasāmajā atmiņā, hakeri to nevar sabojāt (daļas pārrakstīt). Arī RAM sadaļas un ievades/izvades sadaļas ir ļoti lielas, salīdzinot ar Commodore-64.

Kad tiek ieslēgta strāva ar 32 bitu ROM OS, operētājsistēmai ir jāsākas no (sāknēšanas no) adreses 0x00000000 vai 0xFFFF0000 adreses, ja ir iespējots HiVEC. Tātad, kad pēc atiestatīšanas fāzes tiek ieslēgta strāva, CPU aparatūra programmas skaitītājā ielādē 0x00000000 vai 0xFFFF0000. Prefikss “0x” nozīmē heksadecimālu. ARMv8 64 bitu centrālo procesoru sāknēšanas adrese ir noteikta ieviešana. Tomēr autors iesaka datorinženierim sākt ar 0x00000000 vai 0xFFFF0000, lai nodrošinātu atpakaļejošu saderību.

No 1 GB līdz 2 GB ir kartētā ieeja/izvade. Pastāv atšķirība starp kartēto I/O un tikai I/O, kas atrodas no 0 GB līdz 1 GB. Izmantojot I/O, katra porta adrese tiek fiksēta tāpat kā Commodore-64. Izmantojot kartētu I/O, katra porta adrese ne vienmēr ir vienāda katrai datora darbībai (dinamiskā).

No 2 GB līdz 4 GB ir DRAM. Šī ir paredzamā (vai parastā) RAM. DRAM apzīmē dinamisko RAM, nevis adreses maiņas sajūtu datora darbības laikā, bet gan tādā nozīmē, ka katras fiziskās RAM šūnas vērtība ir jāatsvaidzina katrā pulksteņa impulsā.

Piezīme :

  • No 0x0000,0000 līdz 0x0000 FFFF ir OS ROM.
  • No 0x0001,0000 līdz 0x3FFF,FFFF var būt vairāk ROM, tad RAM un pēc tam daži I/O.
  • No 0x4000 0000 līdz 0x7FFF,FFFF ir atļauta papildu I/O un/vai kartēta I/O.
  • No 0x8000 0000 līdz 0xFFFF, FFFF ir paredzamā DRAM.

Tas nozīmē, ka paredzamajai DRAM praktiski nav jāsākas pie 2 GB atmiņas robežas. Kāpēc programmētājam būtu jāievēro ideālās robežas, ja nav pietiekami daudz fizisko RAM banku, kas ir ievietotas mātesplatē? Tas ir tāpēc, ka klientam nepietiek naudas visām RAM bankām.

36 bitu ARM atmiņas karte
64 bitu ARM datoram visi 32 biti tiek izmantoti, lai adresētu visu atmiņu. 64 bitu ARM datoram pirmos 36 bitus var izmantot, lai adresētu visu atmiņu, kas šajā gadījumā ir 2 36 = 68 719 476 736 = 64 GB. Tas jau ir daudz atmiņas. Parastajiem datoriem mūsdienās nav nepieciešams šāds atmiņas apjoms. Tas vēl nav līdz maksimālajam atmiņas diapazonam, kuram var piekļūt ar 64 bitiem. 36 bitu atmiņas karte ARM CPU ir:

No 0 GB adreses līdz 4 GB adresei ir 32 bitu atmiņas karte. “Rezervēts” nozīmē, ka netiek izmantots un tiek glabāts turpmākai lietošanai. Tam nav jābūt fiziskām atmiņas bankām, kas ir ievietotas mātesplatē šai vietai. Šeit DRAM un kartētajam I/O ir tādas pašas nozīmes kā 32 bitu atmiņas kartei.

Praksē var atrast šādu situāciju:

  • 0x1 0000 0000 – 0x3 FFFF FFFF; rezervēts. 12 GB adreses vietas ir rezervētas izmantošanai nākotnē.
  • 0x4 0000 0000 – 0x7 FFFF FFFF; kartētā I/O. Dinamiski kartētam I/O ir pieejama 16 GB adrešu telpa.
  • 0x8 0000 0000 – 0x8 7FFF FFFF FFFF; Caurums vai DRAM. 2 GB adrešu vietas var saturēt kādu no šiem:
    • Caurums, lai iespējotu DRAM ierīces sadalīšanu (kā aprakstīts nākamajā diskusijā).
    • DRAM.
  • 0x8 8000 0000 – 0xF FFFF FFFF; DRAM. 30 GB adrešu vietas DRAM.

Šī atmiņas karte ir 32 bitu adrešu kartes superkopa, un papildu vieta ir sadalīta kā 50% DRAM (1/2) ar papildu caurumu tajā un 25% kartētas I/O vietas un rezervētas vietas (1/4). ). Atlikušie 25% (1/4) ir paredzēti 32 bitu atmiņas kartei ½ + ¼ + ¼ = 1.

Piezīme : No 32 bitiem līdz 360 bitiem ir 4 bitu pievienošana svarīgākajai 36 bitu pusei.

40 bitu atmiņas karte
40 bitu adrešu karte ir 36 bitu adrešu kartes superkopa, un tā atbilst tādam pašam modelim: 50% DRAM no izvēles cauruma tajā, 25% kartētās I/O vietas un rezervētās vietas, kā arī pārējie 25% vieta iepriekšējai atmiņas kartei (36 bitu). Atmiņas kartes diagramma ir šāda:

Cauruma izmērs ir 544 – 512 = 32 GB. Praksē var atrast šādu situāciju:

  • 0x10 0000 0000 – 0x3F FFFF FFFF; rezervēts. 192 GB adreses vietas ir rezervētas izmantošanai nākotnē.
  • 0x40 0000 0000 – 0x7F FFFF FFFF; kartēts. I/O Dinamiski kartētam I/O ir pieejama 256 GB adrešu telpa.
  • 0x80 0000 0000 – 0x87 FFFF FFFF; caurums vai DRAM. 32 GB adrešu telpā var būt kāds no šiem:
    • Caurums, lai iespējotu DRAM ierīces sadalīšanu (kā aprakstīts nākamajā diskusijā)
    • DRAM
  • 0x88 0000 0000 – 0xFF FFFF FFFF; DRAM. 480 GB adrešu vietas DRAM.

Piezīme : No 36 bitiem līdz 40 bitiem tiek pievienoti 4 biti svarīgākajai 36 bitu pusei.

DRAM caurums
Atmiņas kartē, kas pārsniedz 32 bitus, tas ir vai nu DRAM caurums, vai DRAM turpinājums no augšas. Ja tas ir caurums, tas ir jānovērtē šādi: DRAM caurums nodrošina veidu, kā sadalīt lielu DRAM ierīci vairākos adrešu diapazonos. Papildu DRAM atvere tiek piedāvāta augstākās DRAM adreses robežas sākumā. Tas nodrošina vienkāršotu dekodēšanas shēmu, sadalot lielas ietilpības DRAM ierīci zemākajā fiziski adresētajā reģionā.

Piemēram, 64 GB DRAM daļa ir sadalīta trīs reģionos ar adrešu nobīdēm, ko veic ar vienkāršu atņemšanu augstas kārtas adreses bitos šādi:

6.42.1. tabula
64 GB DRAM sadalīšanas ar caurumiem piemērs
Fiziskās adreses SoC Ofseta Iekšējā DRAM adrese
2 GB baiti (32 bitu karte) 0x00 8000 0000 – 0x00 FFFF FFFF -0x00 8000 0000 0x00 0000 0000 – 0x00 7FFF FFF
30 GB baiti (36 bitu karte) 0x08 8000 0000 – 0x0F FFFF FFFF -0x08 0000 0000 0x00 8000 0000 – 0x07 FFFF FFFF
32 GB baiti (40 bitu karte) 0x88 0000 0000 – 0x8F FFFF FFFF -0 x 80 0000 0000 0x08 0000 0000 – 0x0F FFFF FFFF

Piedāvātās 44 bitu un 48 bitu adresētās atmiņas kartes ARM centrālajiem procesoriem
Pieņemsim, ka personālajam datoram ir 1024 GB (= 1 TB) atmiņas; tas ir pārāk daudz atmiņas. Tātad 44 bitu un 48 bitu adresētās atmiņas kartes ARM CPU attiecīgi 16 TB un 256 TB ir tikai priekšlikumi nākotnes datoru vajadzībām. Faktiski šie priekšlikumi ARM centrālajiem procesoriem atbilst tādam pašam atmiņas sadalījumam pēc attiecības kā iepriekšējās atmiņas kartēs. Tas ir: 50% DRAM ar papildu atveri tajā, 25% kartētās I/O vietas un rezervētās vietas, un pārējā 25% vieta iepriekšējai atmiņas kartei.

52 bitu, 56 bitu, 60 bitu un 64 bitu adresētās atmiņas kartes vēl ir jāierosina ARM 64 bitiem tālā nākotnē. Ja zinātnieki tajā laikā joprojām uzskata, ka visas atmiņas telpas sadalīšana 50:25:25 ir noderīga, viņi saglabās attiecību.

Piezīme : SoC apzīmē System-on-Chip, kas attiecas uz shēmām µP mikroshēmā, kuras citādi tur nebūtu bijušas.

SRAM vai statiskā brīvpiekļuves atmiņa ir ātrāka nekā tradicionālā DRAM, taču tai ir nepieciešams vairāk silīcija laukuma. SRAM nav nepieciešama atsvaidzināšana. Lasītājs var iedomāties RAM kā SRAM.

6.43. ARM 64 montāžas valodas adresācijas režīmi
ARM ir ielādes/glabāšanas arhitektūra, kurā dati ir jāielādē no atmiņas procesora reģistrā, pirms ar to var veikt jebkādu apstrādi, piemēram, aritmētiskās loģikas operāciju. Nākamā instrukcija saglabā rezultātu atpakaļ atmiņā. Lai gan tas varētu šķist solis atpakaļ no x86 un tā turpmākajām x64 arhitektūrām, kas vienā instrukcijā darbojas tieši ar operandiem atmiņā, praksē ielādes/uzglabāšanas pieeja ļauj veikt vairākas secīgas darbības lielā ātrumā. operands, kad tas ir ielādēts vienā no daudzajiem procesora reģistriem.

ARM montāžas valodas formātam ir līdzības un atšķirības ar x64 (x86) sēriju.

  • Ofseta : bāzes reģistram var pievienot parakstītu konstanti. Nobīde tiek ievadīta kā daļa no instrukcijas. Piemēram: ldr x0, [rx, #10] ielādē r0 ar vārdu r1+10 adresē.
  • Reģistrēties : neparakstītu pieaugumu, kas tiek glabāts reģistrā, var pievienot vai atņemt no vērtības bāzes reģistrā. Piemēram: ldr r0, [x1, x2] ielādē r0 ar vārdu x1+x2 adresē. Jebkuru no reģistriem var uzskatīt par bāzes reģistru.
  • Mērogots reģistrs : Pieaugums reģistrā tiek pārvietots pa kreisi vai pa labi par noteiktu bitu pozīciju skaitu, pirms to pievieno vai atņem no bāzes reģistra vērtības. Piemēram: ldr x0, [x1, x2, lsl #3] ielādē r0 ar vārdu r1+(r2×8) adresē. Nobīde var būt loģiska nobīde pa kreisi vai pa labi (lsl vai lsr), kas ievieto nulles bitus atbrīvotajās bitu pozīcijās, vai aritmētiskā nobīde pa labi (asr), kas atkārto zīmes bitu atbrīvotajās pozīcijās.

Ja ir iesaistīti divi operandi, galamērķis ir pirms (kreisajā pusē) avota (tam ir daži izņēmumi). ARM montāžas valodas opkodi nav reģistrjutīgi.

Tūlītējais ARM64 adresācijas režīms
Piemērs:

mov r0, #0xFF000000 ; Ielādējiet r0 32 bitu vērtību FF000000h

Decimālvērtība ir bez 0x, bet pirms tās joprojām ir #.

Reģistrējieties tieši
Piemērs:

mov x0, x1 ; Kopējiet x1 uz x0

Reģistrēties Netiešs
Piemērs:

str x0, [x3] ; Saglabājiet x0 uz adresi x3

Reģistrējieties netieši ar nobīdi
Piemēri:

ldr x0, [x1, #32] ; Ielādēt r0 ar vērtību adresē [r1+32]; r1 ir bāzes reģistrs
str x0, [x1, #4] ; Uzglabāt r0 uz adresi [r1+4]; r1 ir bāzes reģistrs; skaitļi ir 10

Reģistrēt netiešo ar nobīdi (iepriekš palielināts)
Piemēri:

ldr x0, [x1, #32]! ; Ielādējiet r0 ar [r1+32] un atjauniniet r1 uz (r1+32)
str x0, [x1, #4]! ; Saglabājiet r0 uz [r1+4] un atjauniniet r1 uz (r1+4)

Ņemiet vērā “!” simbols.

Reģistrēties netieši ar nobīdi (pēc pieauguma)
Piemēri:

ldr x0, [x1], #32 ; Ielādējiet [x1] uz x0, pēc tam atjauniniet x1 uz (x1+32)
str x0, [x1], #4 ; Saglabājiet x0 uz [x1], pēc tam atjauniniet x1 uz (x1+4)

Netiešā dubultā reģistra
Operanda adrese ir bāzes reģistra un pieauguma reģistra summa. Reģistra nosaukumus ieskauj kvadrātiekavās.
Piemēri:

ldr x0, [x1, x2] ; Ielādēt x0 ar [x1+x2]
str x0, [rx, x2] ; Saglabāt x0 līdz [x1+x2]

Relatīvās adresācijas režīms
Relatīvās adresācijas režīmā efektīvā instrukcija ir nākamā instrukcija programmu skaitītājā, kā arī indekss. Indekss var būt pozitīvs vai negatīvs.
Piemērs:

ldr x0, [pc, #24]

Tas nozīmē slodzes reģistru X0 ar vārdu, uz kuru norāda datora saturs, plus 24.

6.44 Dažas bieži lietotas instrukcijas ARM 64
Šeit ir visbiežāk lietotās instrukcijas:

6.45 Looping

Ilustrācija
Šis kods turpina pievienot vērtību X10 reģistrā X9 vērtībai, līdz vērtība X8 ir nulle. Pieņemsim, ka visas vērtības ir veseli skaitļi. Vērtība X8 tiek atņemta ar 1 katrā iterācijā:

cilpa:
CBZ X8, izlaist
ADD X9, X9, X10 ; pirmais X9 ir galamērķis, bet otrais X9 ir avots
SUB X8, X8, #1 ; pirmais X8 ir galamērķis, bet otrais X8 ir avots
B cilpa
izlaist:

Tāpat kā ar 6502 µP un X64 µP, etiķete ARM 64 µP sākas līnijas sākumā. Pārējās instrukcijas sākas ar dažām atstarpēm pēc rindas sākuma. Izmantojot x64 un ARM 64, etiķetei seko kols un jauna rinda. Izmantojot 6502, etiķetei aiz atstarpes seko instrukcija. Iepriekšējā kodā pirmā instrukcija, kas ir “CBZ X8, izlaist”, nozīmē, ka, ja X8 vērtība ir nulle, turpiniet ar etiķeti “izlaist:”, izlaižot norādījumus starp tiem un turpinot ar pārējiem tālāk sniegtajiem norādījumiem. “izlaist:”. “B cilpa” ir beznosacījumu pāreja uz apzīmējumu “cilpa”. Vārda “cilpa” vietā var izmantot jebkuru citu etiķetes nosaukumu.

Tātad, tāpat kā ar 6502 µP, izmantojiet atzaru instrukcijas, lai izveidotu cilpu ar ARM 64.

6.46 ARM 64 ieeja/izvade
Visas ARM perifērijas ierīces (iekšējie porti) ir kartētas atmiņas kartē. Tas nozīmē, ka programmēšanas interfeiss ir atmiņas adresētu reģistru (iekšējo portu) kopa. Šāda reģistra adrese ir nobīde no noteiktas atmiņas bāzes adreses. Tas ir līdzīgi tam, kā 6502 veic ievadi/izvadi. ARM nav iespējas izveidot atsevišķu I/O adrešu telpu.

6.47 ARM 64 kaudze
ARM 64 ir atmiņas (RAM) kaudze līdzīgi kā 6502 un x64. Tomēr ar ARM64 nav push vai pop opcode. ARM 64 kaudze arī pieaug uz leju. Adrese steka rādītājā norāda tieši aiz pēdējās kaudzē ievietotās vērtības pēdējā baita.

Iemesls, kāpēc ARM64 nav vispārēja pop vai push opkoda, ir tas, ka ARM 64 pārvalda savu steku secīgu 16 baitu grupās. Tomēr vērtības pastāv baitu grupās ar vienu baitu, diviem baitiem, četriem baitiem un 8 baitiem. Tātad vienu vērtību var ievietot kaudzē, un pārējās vietas (baitu atrašanās vietas), lai kompensētu 16 baitus, ir polsterētas ar fiktīviem baitiem. Tam ir atmiņas izšķērdēšana. Labāks risinājums ir aizpildīt 16 baitu atrašanās vietu ar mazākām vērtībām un izveidot programmētāja rakstītu kodu, kas izseko, no kurienes nāk vērtības 16 baitu atrašanās vietā (reģistri). Šis papildu kods ir nepieciešams arī vērtību atsaukšanai. Alternatīva tam ir aizpildīt divus 8 baitu vispārējas nozīmes reģistrus ar dažādām vērtībām un pēc tam nosūtīt divu 8 baitu reģistru saturu uz steku. Šeit joprojām ir nepieciešams papildu kods, lai izsekotu konkrētām mazajām vērtībām, kas nonāk kaudzē un atstāj steku.

Šis kods kaudzē saglabā četrus 4 baitu datus:

str w0, [sp, #-4]!
str w1, [sp, #-8]!
str w2, [sp, #-12]!
str w3, [sp, #-16]!

Pirmie četri reģistru baiti (w) – x0, x1, x2 un x3 – tiek nosūtīti uz 16 secīgām baitu vietām kaudzē. Ņemiet vērā, ka tiek lietots “str”, nevis “push”. Ievērojiet izsaukuma simbolu katras instrukcijas beigās. Tā kā atmiņas steks palielinās, pirmā četru baitu vērtība sākas pozīcijā, kas ir mīnus četrus baitus zem iepriekšējās steka rādītāja pozīcijas. Pārējās četru baitu vērtības seko, samazinoties. Šis koda segments veiks pareizo (un secībā) ekvivalentu četru baitu pavēršanai:

ldr w3, [sp], #0
ldr w2, [sp], #4
ldr w1, [sp], #8
ldr w0, [sp], #12

Ņemiet vērā, ka tiek izmantots ldr opcode, nevis pop. Ņemiet vērā arī to, ka šeit netiek izmantots izsaukuma simbols.

Visus X0 (8 baiti) un X1 (8 baiti) baitus var nosūtīt uz 16 baitu atrašanās vietu kaudzē šādi:

stp x0, x1, [sp, #-16]! ; 8 + 8 = 16

Šajā gadījumā reģistri x2 (w2) un x3 (w3) nav nepieciešami. Visi meklētie baiti atrodas X0 un X2 reģistros. Ņemiet vērā stp opcode reģistra satura pāru glabāšanai RAM. Ņemiet vērā arī izsaukuma simbolu. Pop ekvivalents ir:

ldp x0, x1, [sp], #0

Šai instrukcijai nav izsaukuma zīmes. Ievērojiet opkoda LDP, nevis LDR, lai ielādētu divas secīgas datu vietas no atmiņas divos µP reģistros. Atcerieties arī, ka kopēšana no atmiņas uz µP reģistru tiek ielādēta, to nedrīkst sajaukt ar faila ielādi no diska RAM, bet kopēšana no µP reģistra RAM ir saglabāšana.

6.48 Apakšprogramma
Apakšprogramma ir koda bloks, kas veic uzdevumu, pēc izvēles pamatojoties uz dažiem argumentiem un pēc izvēles atgriež rezultātu. Pēc vienošanās R0 līdz R3 reģistri (četri reģistri) tiek izmantoti, lai nodotu argumentus (parametrus) apakšprogrammai, un R0 izmanto, lai nosūtītu rezultātu atpakaļ zvanītājam. Apakšprogramma, kurai nepieciešamas vairāk nekā 4 ievades, izmanto steku papildu ievadēm. Lai izsauktu apakšprogrammu, izmantojiet saiti vai nosacījumu filiāles instrukciju. Saites instrukcijas sintakse ir:

BL etiķete

Kur BL ir operācijas kods, un etiķete apzīmē apakšprogrammas sākumu (adresi). Šis atzars ir beznosacījuma, uz priekšu vai atpakaļ 128 MB. Nosacītā filiāles instrukcijas sintakse ir:

B.cond etiķete

Kur cond ir nosacījums, piemēram, eq (vienāds) vai ne (nav vienāds). Šai programmai ir apakšprogramma doadd, kas pievieno divu argumentu vērtības un atgriež rezultātu R0:

AREA apakšreģions, CODE, READONLY ; Nosauciet šo koda bloku
IEEJA ; Atzīmējiet pirmo izpildāmo norādījumu
sākt MOV r0, #10 ; Iestatiet parametrus
MOV r1, #3
BL doadd ; Zvana apakšprogramma
stop MOV r0, #0x18 ; angel_SWIreason_ReportException
LDR r1, =0x20026 ; ADP_Stopped_ApplicationExit
SVC #0x123456 ; ARM pushostings (iepriekš SWI)
doadd ADD r0, r0, r1 ; Apakšprogrammas kods
BX lr ; Atgriezties no apakšprogrammas
;
BEIGAS ; Atzīmējiet faila beigas

Saskaitāmie skaitļi ir 10 decimālskaitļi un 3 decimālskaitļi. Pirmās divas rindiņas šajā koda blokā (programmā) tiks izskaidrotas vēlāk. Nākamās trīs rindas nosūta 10 uz R0 reģistru un 3 uz R1 reģistru, kā arī izsauc apakšprogrammu doadd. “doadd” ir etiķete, kurā ir apakšprogrammas sākuma adrese.

Apakšprogramma sastāv tikai no divām rindām. Pirmajā rindā R saturu 3 pievieno R0 saturam 10, kas ļauj iegūt rezultātu 13 R0. Otrā rinda ar BX opkodu un LR operandu atgriežas no apakšprogrammas uz zvanītāja kodu.

PA LABI
RET operētājsistēmā ARM 64 joprojām tiek izmantota apakšprogramma, taču tā darbojas atšķirīgi no RTS operētājsistēmā 6502 vai RET uz x64, vai “BX LR” kombinācija ARM 64. ARM 64 RET sintakse ir šāda:

TAISNA {Xn}

Šī instrukcija dod iespēju programmai turpināt ar apakšprogrammu, kas nav zvanītāja apakšprogramma, vai vienkārši turpināt ar kādu citu instrukciju un tai sekojošo koda segmentu. Xn ir vispārējas nozīmes reģistrs, kurā ir adrese, uz kuru programma jāturpina. Šī instrukcija atzarojas bez nosacījumiem. Ja Xn nav norādīts, pēc noklusējuma tiek iestatīts X30 saturs.

Procedūras izsaukuma standarts
Ja programmētājs vēlas, lai viņa kods mijiedarbotos ar kodu, ko rakstījis kāds cits, vai ar kodu, ko izstrādājis kompilators, programmētājam ir jāvienojas ar personu vai kompilatora rakstītāju par reģistra lietošanas noteikumiem. ARM arhitektūrai šie noteikumi tiek saukti par procedūru izsaukuma standartu vai PCS. Tie ir līgumi starp divām vai trim pusēm. PCS norāda sekojošo:

  • Kuri µP reģistri tiek izmantoti, lai nodotu argumentus funkcijai (apakšprogrammai)
  • Kuri µP reģistri tiek izmantoti, lai atgrieztu rezultātu funkcijai, kas veic izsaukšanu, ko sauc par zvanītāju
  • Kurš µP reģistrē izsaukto funkciju, ko sauc par izsaucamo, var sabojāt
  • Kuru µP reģistrē izsaucējs nevar sabojāt

6.49 Pārtraucas
ARM procesoram ir pieejamas divu veidu pārtraukumu kontrolleru shēmas:

  • Standarta pārtraukumu kontrolieris: pārtraukumu apstrādātājs nosaka, kurai ierīcei nepieciešama apkope, nolasot ierīces bitkartes reģistru pārtraukumu kontrollerī.
  • Vector Interrupt Controller (VIC): piešķir pārtraukumiem prioritāti un vienkāršo noteikšanu, kura ierīce izraisīja pārtraukumu. Pēc prioritātes un apstrādātāja adreses saistīšanas ar katru pārtraukumu VIC tikai apstiprina pārtraukuma signālu procesoram, ja jauna pārtraukuma prioritāte ir augstāka nekā pašlaik izpildošā pārtraukuma apstrādātāja prioritāte.

Piezīme : Izņēmums attiecas uz kļūdu. Sīkāka informācija par vektoru pārtraukumu kontrolieri 32 bitu ARM datoram ir šāda (64 biti ir līdzīgi):

6.49.1. tabula
ARM vektora izņēmums/pārtraukums 32 bitu datoram
Izņēmums/pārtraukums Īsa roka Adrese Augsta adrese
Atiestatīt RESET 0x00000000 0xffff0000
Nedefinēta instrukcija UNDEF 0x00000004 0xffff0004
Programmatūras pārtraukums SWI 0x00000008 0xffff0008
Iepriekšējas ieneses pārtraukums pabt 0x0000000C 0xffff000C
Aborta datums DABT 0x00000010 0xffff0010
Rezervēts 0x00000014 0xffff0014
Pārtraukšanas pieprasījums IRQ 0x00000018 0xffff0018
Ātra pārtraukuma pieprasījums FIQ 0x0000001C 0xffff001C

Tas izskatās kā izkārtojums 6502 arhitektūrai, kur NMI , BR , un IRQ var būt norādes nulles lapā, un atbilstošās rutīnas atrodas augstā atmiņā (ROM OS). Iepriekšējās tabulas rindu īsi apraksti ir šādi:

RESET
Tas notiek, kad procesors ieslēdzas. Tas inicializē sistēmu un iestata skursteņus dažādiem procesora režīmiem. Tas ir augstākās prioritātes izņēmums. Ieejot atiestatīšanas apstrādātājā, CPSR ir SVC režīmā, un gan IRQ, gan FIQ biti ir iestatīti uz 1, maskējot visus pārtraukumus.

ABORTAS DATUMS
Otra augstākā prioritāte. Tas notiek, ja mēģinām lasīt/rakstīt nederīgā adresē vai piekļūt nepareizai piekļuves atļaujai. Ieejot datu pārtraukšanas apstrādātājā, IRQ tiks atspējoti (1. bitu kopa) un tiks iespējots FIQ. IRQ ir maskēti, bet FIQ tiek neatklāti.

FIQ
Augstākās prioritātes pārtraukums, IRQ un FIQ, ir atspējoti, līdz tiek apstrādāts FIQ.

IRQ
Augstas prioritātes pārtraukums, IRQ apdarinātājs, tiek ievadīts tikai tad, ja nav notiekoša FIQ un datu pārtraukuma.

Pārtraukt pirms ieneses
Tas ir līdzīgi datu pārtraukšanai, taču tas notiek adreses ielādes kļūmes gadījumā. Ieejot apdarinātājā, IRQ tiek atspējoti, bet FIQ paliek iespējoti un var notikt iepriekšējas ielādes pārtraukuma laikā.

SWI
Programmatūras pārtraukuma (SWI) izņēmums rodas, ja tiek izpildīta SWI instrukcija un neviens no citiem augstākas prioritātes izņēmumiem nav atzīmēts.

Nedefinēta instrukcija
Nedefinētas instrukcijas izņēmums rodas, ja instrukcija, kas nav ARM vai Thumb instrukciju kopā, sasniedz konveijera izpildes stadiju un neviens no pārējiem izņēmumiem nav atzīmēts. Tā ir tāda pati prioritāte kā SWI, kas var notikt vienlaikus. Tas nozīmē, ka izpildāmā instrukcija nevar vienlaikus būt gan SWI instrukcija, gan nedefinēta instrukcija.

ARM izņēmuma apstrāde
Izņēmuma gadījumā notiek šādi notikumi:

  • Saglabājiet CPSR izņēmuma režīma SPSR.
  • Dators tiek saglabāts izņēmuma režīma LR.
  • Saišu reģistrs ir iestatīts uz noteiktu adresi, pamatojoties uz pašreizējo instrukciju. Piemēram: ISR gadījumā LR = pēdējā izpildītā instrukcija + 8.
  • Atjauniniet CPSR par izņēmumu.
  • Iestatiet datoru uz izņēmumu apstrādātāja adresi.

6.5. Norādījumi un dati

Dati attiecas uz mainīgajiem lielumiem (iezīmēm ar to vērtībām) un masīviem un citām struktūrām, kas ir līdzīgas masīvam. Virkne ir kā rakstzīmju masīvs. Vienā no iepriekšējām nodaļām ir redzams veselu skaitļu masīvs. Norādījumi attiecas uz opkodiem un to operandiem. Programmu var uzrakstīt, izmantojot operācijas kodus un datus, kas sajaukti vienā atmiņas turpinājuma sadaļā. Šai pieejai ir trūkumi, taču tā nav ieteicama.

Vispirms ir jāuzraksta programma ar instrukcijām, pēc tam ar datiem (datu daudzskaitlis ir dati). Atšķirība starp instrukcijām un datiem var būt tikai daži baiti. Programmai gan instrukcijas, gan dati var atrasties vienā vai divās atsevišķās atmiņas sadaļās.

6.6. Hārvardas arhitektūra

Viens no agrīnajiem datoriem tiek saukts par Harvard Mark I (1944). Stingra Hārvardas arhitektūra izmanto vienu adrešu telpu programmas instrukcijām un citu atsevišķu adrešu telpu datiem. Tas nozīmē, ka ir divas atsevišķas atmiņas. Tālāk ir parādīta arhitektūra:


Attēls 6.71 Hārvardas arhitektūra

Vadības bloks veic instrukciju dekodēšanu. Aritmētiskā loģikas vienība (ALU) veic aritmētiskās darbības ar kombinēto loģiku (vārtiem). ALU veic arī loģiskās darbības (piemēram, pārslēgšanu).

Izmantojot 6502 mikroprocesoru, instrukcija vispirms tiek nosūtīta mikroprocesoram (vadības blokam), pirms datu punkts (datu vienskaitlis) nonāk µP reģistrā, pirms tie mijiedarbojas. Tam nepieciešami vismaz divi pulksteņa impulsi, un tā nav vienlaicīga piekļuve instrukcijai un atskaites punktam. No otras puses, Hārvardas arhitektūra nodrošina vienlaicīgu piekļuvi instrukcijām un datiem, gan norādījumiem, gan atskaites punktiem vienlaikus ievadot µP (operācijas kods vadības blokā un atskaites punkts µP reģistrā), saglabājot vismaz vienu pulksteņa impulsu. Tas ir paralēlisma veids. Šis paralēlisma veids tiek izmantots aparatūras kešatmiņā mūsdienu mātesplatēs (skatiet tālāk sniegto diskusiju).

6.7 Kešatmiņa

Kešatmiņa (RAM) ir liela ātruma atmiņas apgabals (salīdzinājumā ar galvenās atmiņas ātrumu), kurā īslaicīgi tiek saglabātas programmas instrukcijas vai dati turpmākai lietošanai. Kešatmiņa darbojas ātrāk nekā galvenā atmiņa. Parasti šīs instrukcijas vai datu vienumi tiek izgūti no nesenās galvenās atmiņas un, visticamāk, drīzumā būs atkal nepieciešami. Kešatmiņas galvenais mērķis ir palielināt ātrumu, kas ļauj atkārtoti piekļūt tām pašām galvenajām atmiņas vietām. Lai piekļuve kešatmiņā saglabātajiem vienumiem būtu efektīva, tai ir jābūt ievērojami ātrākai nekā piekļūšanai instrukciju vai datu sākotnējam avotam, kas tiek dēvēts par atbalsta veikalu.

Kad tiek izmantota kešatmiņa, katrs mēģinājums piekļūt galvenajai atmiņas vietai sākas ar kešatmiņas meklēšanu. Ja pieprasītais vienums ir klāt, procesors to nekavējoties izgūst un izmanto. To sauc par kešatmiņas trāpījumu. Ja kešatmiņas meklēšana ir neveiksmīga (nepietiekama kešatmiņa), instrukcija vai datu vienums ir jāizgūst no rezerves krātuves (galvenās atmiņas). Pieprasītā vienuma izgūšanas procesā kešatmiņai tiek pievienota kopija paredzamai izmantošanai tuvākajā nākotnē.

Atmiņas pārvaldības vienība
Atmiņas pārvaldības vienība (MMU) ir shēma, kas pārvalda galveno atmiņu un saistītos atmiņas reģistrus mātesplatē. Agrāk tā bija atsevišķa integrēta shēma mātesplatē; bet šodien tā parasti ir daļa no mikroprocesora. MMU vajadzētu arī pārvaldīt kešatmiņu (shēmu), kas arī mūsdienās ir daļa no mikroprocesora. Kešatmiņas shēma agrāk bija atsevišķa integrēta shēma.

Statiskā RAM
Statiskajai RAM (SRAM) ir ievērojami ātrāks piekļuves laiks nekā DRAM, lai gan uz ievērojami sarežģītākas shēmas rēķina. SRAM bitu šūnas integrālajā shēmā aizņem daudz vairāk vietas nekā DRAM ierīces šūnas, kas spēj uzglabāt līdzvērtīgu datu daudzumu. Galvenā atmiņa (RAM) parasti sastāv no DRAM (dinamiskā RAM).

Kešatmiņa uzlabo datora veiktspēju, jo daudzi algoritmi, ko izpilda operētājsistēmas un lietojumprogrammas, parāda atsauces vietu. Atsauces vieta attiecas uz nesen piekļūtu datu atkārtotu izmantošanu. To sauc par pagaidu lokāciju. Mūsdienu mātesplatē kešatmiņa atrodas tajā pašā integrētajā shēmā kā mikroprocesors. Galvenā atmiņa (DRAM) atrodas tālu, un tai var piekļūt, izmantojot autobusus. Atsauces vieta attiecas arī uz telpisko atrašanās vietu. Telpiskā atrašanās vieta ir saistīta ar lielāku datu piekļuves ātrumu fiziskā tuvuma dēļ.

Parasti kešatmiņas reģioni ir mazi (baitu atrašanās vietu skaitā), salīdzinot ar rezerves krātuvi (galveno atmiņu). Kešatmiņas ierīces ir paredzētas maksimālam ātrumam, kas parasti nozīmē, ka tās ir sarežģītākas un dārgākas par bitu nekā datu uzglabāšanas tehnoloģija, kas tiek izmantota atbalsta veikalā. Ierobežotā izmēra dēļ kešatmiņas ierīcēm ir tendence ātri aizpildīt. Ja kešatmiņā nav vietas, kur saglabāt jaunu ierakstu, vecais ieraksts ir jāatmet. Kešatmiņas kontrolleris izmanto kešatmiņas aizstāšanas politiku, lai atlasītu, kurš kešatmiņas ieraksts tiks pārrakstīts ar jauno ierakstu.

Mikroprocesora kešatmiņas mērķis ir maksimāli palielināt kešatmiņas trāpījumu procentuālo daudzumu laika gaitā, tādējādi nodrošinot augstāko noturīgo instrukciju izpildes ātrumu. Lai sasniegtu šo mērķi, kešatmiņas loģikai ir jānosaka, kuras instrukcijas un dati tiks ievietoti kešatmiņā un saglabāti izmantošanai tuvākajā nākotnē.

Procesora kešatmiņas loģika negarantē, ka kešatmiņā saglabātais datu vienums tiks izmantots vēlreiz, tiklīdz tas būs ievietots kešatmiņā.

Kešatmiņas loģika balstās uz iespējamību, ka laika (atkārtojas laika gaitā) un telpiskās (telpiskās) lokalizācijas dēļ pastāv ļoti liela iespēja, ka tuvākajā nākotnē tiks piekļūts kešatmiņā saglabātajiem datiem. Praktiskā ieviešanā mūsdienu procesoros kešatmiņas trāpījumi parasti notiek 95–97 procentos atmiņas piekļuves. Tā kā kešatmiņas latentums ir neliela daļa no DRAM latentuma, augsts kešatmiņas trāpījumu līmenis ievērojami uzlabo veiktspēju salīdzinājumā ar dizainu bez kešatmiņas.

Dažas paralēles ar kešatmiņu
Kā minēts iepriekš, labas programmas atmiņā instrukcijas ir atdalītas no datiem. Dažās kešatmiņas sistēmās procesora “kreisajā” pusē ir kešatmiņas ķēde, savukārt procesora “labajā pusē” ir cita kešatmiņas ķēde. Kreisā kešatmiņa apstrādā programmas (vai lietojumprogrammas) instrukcijas, bet labā kešatmiņa apstrādā tās pašas programmas (vai lietojumprogrammas) datus. Tas nodrošina labāku ātruma palielināšanos.

6.8. Procesi un pavedieni

Gan CISC, gan RISC datoriem ir procesi. Programmatūrā ir process. Programma, kas darbojas (izpilda), ir process. Operētājsistēmai ir savas programmas. Kamēr dators darbojas, darbojas arī tās operētājsistēmas programmas, kas nodrošina datora darbību. Tie ir operētājsistēmas procesi. Lietotājs vai programmētājs var rakstīt savas programmas. Kad lietotāja programma darbojas, tas ir process. Nav nozīmes tam, vai programma ir uzrakstīta montāžas valodā vai augsta līmeņa valodā, piemēram, C vai C++. Visus procesus (lietotāju vai OS) pārvalda cits process, ko sauc par 'plānotāju'.

Pavediens ir kā procesam piederošs apakšprocess. Process var sākties un sadalīties pavedienos un pēc tam turpināties kā viens process. Procesu bez pavedieniem var uzskatīt par galveno pavedienu. Procesus un to pavedienus pārvalda tas pats plānotājs. Pats plānotājs ir programma, ja tā ir OS diska rezidents. Darbojoties atmiņā, plānotājs ir process.

6.9. Daudzkārtēja apstrāde

Pavedieni tiek pārvaldīti gandrīz kā procesi. Daudzapstrāde nozīmē vairāk nekā viena procesa palaišanu vienlaikus. Ir datori ar tikai vienu mikroprocesoru. Ir datori ar vairāk nekā vienu mikroprocesoru. Izmantojot vienu mikroprocesoru, procesi un/vai pavedieni izmanto vienu un to pašu mikroprocesoru savstarpējā (vai laika griezuma) veidā. Tas nozīmē, ka process izmanto procesoru un apstājas bez pabeigšanas. Cits process vai pavediens izmanto procesoru un apstājas bez pabeigšanas. Pēc tam cits process vai pavediens izmanto mikroprocesoru un apstājas bez pabeigšanas. Tas turpinās, līdz visi procesi un pavedieni, kurus plānotājs bija sastādījis rindā, ir ieguvuši daļu no procesora. To sauc par vienlaicīgu vairāku apstrādi.

Ja ir vairāk nekā viens mikroprocesors, pretstatā vienlaicīgai apstrādei notiek paralēla vairāku procesu apstrāde. Šajā gadījumā katrs procesors palaiž noteiktu procesu vai pavedienu, kas atšķiras no tā, ko darbojas otrs procesors. Visi procesori vienā un tajā pašā mātesplatē vienlaikus veic dažādus procesus un/vai dažādus pavedienus paralēlā daudzprocesā. Procesus un pavedienus paralēlajā daudzapstrādē joprojām pārvalda plānotājs. Paralēlā daudzapstrāde ir ātrāka nekā vienlaicīga vairāku apstrāde.

Šajā brīdī lasītājam var rasties jautājums, cik paralēla apstrāde ir ātrāka nekā vienlaicīga apstrāde. Tas ir tāpēc, ka procesoriem ir kopīga atmiņa un tie paši ievades/izejas porti (jāizmanto dažādos laikos). Nu, izmantojot kešatmiņu, kopējā mātesplates darbība ir ātrāka.

6.10. Lapošana

Atmiņas pārvaldības vienība (MMU) ir ķēde, kas atrodas tuvu mikroprocesoram vai mikroprocesora mikroshēmā. Tas apstrādā atmiņas karti vai peidžeru un citas atmiņas problēmas. Ne 6502 µP, ne Commodore-64 datoram pašam nav MMU (lai gan Commodore-64 joprojām ir zināma atmiņas pārvaldība). Commodore-64 apstrādā atmiņu, lapojot, kur katra lappuse ir 256 10 baitu garš (100 16 baitu garš). Tam nebija obligāti jārīkojas ar atmiņu, izmantojot peidžeru. Tajā joprojām varētu būt tikai atmiņas karte un pēc tam programmas, kas vienkārši iekļaujas dažādās paredzētajās zonās. Peidžeri ir viens no veidiem, kā nodrošināt efektīvu atmiņas izmantošanu bez daudzām atmiņas sadaļām, kurās nevar būt datu vai programmas.

Datora arhitektūra x86 386 tika izlaista 1985. gadā. Adrešu kopne ir 32 bitu plata. Tātad kopā 2 32 = 4 294 967 296 adrešu telpa ir iespējama. Šī adrešu telpa ir sadalīta 1 048 576 lapās = 1 024 KB lapas. Ar šādu lapu skaitu viena lapa sastāv no 4096 baitiem = 4 KB. Šajā tabulā ir parādītas x86 32 bitu arhitektūras fizisko adrešu lapas:

6.10.1. tabula
Fiziski adresējamas lapas x86 arhitektūrai
Bāzes 16 adreses Lapas Bāzes 10 adreses
FFFFF000 – FFFFFFFF 1 048 575 lpp 4 294 963 200–4 294 967 295
FFFFE000 – FFFFEFFF 1 044 479 lpp 4 294 959 104–4 294 963 199
FFFFD000 – FFFFDFFF 1 040 383 lpp 4 294 955 008–4 294 959 103
|
|
|
|
|
|
|
|
|
00002000 – 00002FFF 2. lapa 8 192 – 12 288
00001000 – 00001FFF 1. lapa 4 096 – 8 191
00000000–00000 FFF 0. lapa 0 – 4095

Mūsdienās lietojumprogramma sastāv no vairākām programmām. Viena programma var aizņemt mazāk par lapu (mazāk nekā 4096) vai arī divas vai vairākas lapas. Tātad lietojumprogramma var aizņemt vienu vai vairākas lapas, kur katra lapa ir 4096 baitus gara. Pieteikumu var rakstīt dažādi cilvēki, katrai personai piešķirot vienu vai vairākas lapas.

Ņemiet vērā, ka 0. lapa ir no 00000000H līdz 00000FFF
1. lapa ir no 00001000H līdz 00001FFFH, 2. lapa ir no 00002000 H – 00002FFF H , un tā tālāk. 32 bitu datoram procesorā ir divi 32 bitu reģistri fiziskai lapas adresēšanai: viens bāzes adresei un otrs indeksa adresei. Lai piekļūtu, piemēram, 2. lapas baitu vietām, bāzes adreses reģistram jābūt 00002 H kas ir pirmie 20 biti (no kreisās) 2. lapas sākuma adresēm. Pārējie biti ir diapazonā no 000 H uz FFF H atrodas reģistrā, ko sauc par “indeksu reģistru”. Tātad visiem lapas baitiem var piekļūt, vienkārši palielinot saturu indeksa reģistrā no 000 H uz FFF H . Indeksa reģistra saturs tiek pievienots saturam, kas nemainās bāzes reģistrā, lai iegūtu spēkā esošo adresi. Šī indeksu adresēšanas shēma attiecas uz citām lapām.

Tomēr tas nav īsti veids, kā montāžas valodas programma tiek rakstīta katrai lapai. Katrai lapai programmētājs ieraksta kodu, sākot no 000. lappuses H uz lapu FFF H . Tā kā kods dažādās lapās ir savienots, kompilators izmanto indeksa adresēšanu, lai savienotu visas saistītās adreses dažādās lapās. Piemēram, pieņemot, ka 0., 1. un 2. lapa ir paredzēta vienai lietojumprogrammai un katrai no tām ir 555. H adrese, kas ir savienota viena ar otru, kompilators kompilē tā, lai tad, kad 555 H 0. lappusē ir jāpiekļūst, 00000 H būs bāzes reģistrā un 555 H būs indeksu reģistrā. Kad 555 H 1. lappusē ir jāpiekļūst, 00001 H būs bāzes reģistrā un 555 H būs indeksu reģistrā. Kad 555 H 2. lappusē ir jāpiekļūst, 00002 H būs bāzes reģistrā un 555H būs indeksu reģistrā. Tas ir iespējams, jo adreses var identificēt, izmantojot etiķetes (mainīgos). Dažādiem programmētājiem ir jāvienojas par etiķešu nosaukumiem, kas tiks izmantoti dažādām savienojuma adresēm.

Lapas virtuālā atmiņa
Peidžeru, kā aprakstīts iepriekš, var modificēt, lai palielinātu atmiņas apjomu, izmantojot metodi, ko dēvē par “lappuses virtuālo atmiņu”. Pieņemot, ka visās fiziskās atmiņas lapās, kā aprakstīts iepriekš, ir kaut kas (instrukcijas un dati), ne visas lapas pašlaik ir aktīvas. Lapas, kas pašlaik nav aktīvas, tiek nosūtītas uz cieto disku un tiek aizstātas ar lapām no cietā diska, kurām ir jādarbojas. Tādā veidā palielinās atmiņas apjoms. Datoram turpinot darboties, lapas, kas kļūst neaktīvās, tiek apmainītas ar lapām cietajā diskā, kas joprojām var būt lapas, kas tika nosūtītas no atmiņas uz disku. To visu veic atmiņas pārvaldības vienība (MMU).

6.11. Problēmas

Pirms pāriet uz nākamo nodaļu lasītājam ir ieteicams atrisināt visas nodaļas problēmas.

1) Norādiet CISC un RISC datoru arhitektūru līdzības un atšķirības. Nosauciet vienu SISC un RISC datora piemēru.

2) a) Kādi ir šādi CISC datora nosaukumi bitu izteiksmē: baits, vārds, dubultvārds, četrvārds un dubultais četrvārds.
b) Kādi ir šādi RISC datora nosaukumi bitu izteiksmē: baits, pusvārds, vārds un dubultvārds.
c) Jā vai Nē. Vai dubultvārds un četrvārds nozīmē vienu un to pašu gan CISC, gan RISC arhitektūrā?

3 a) X64 gadījumā montāžas valodas instrukciju baitu skaits ir no kāda līdz kādam?
b) Vai baitu skaits visām montāžas valodas instrukcijām ARM 64 ir fiksēts? Ja jā, kāds ir visu instrukciju baitu skaits?

4) Uzskaitiet visbiežāk lietotās montāžas valodas instrukcijas x64 un to nozīmes.

5) Uzskaitiet visbiežāk lietotās montāžas valodas instrukcijas ARM 64 un to nozīmes.

6) Uzzīmējiet vecā datora Harvardas arhitektūras iezīmētu blokshēmu. Paskaidrojiet, kā tā norādījumi un datu līdzekļi tiek izmantoti mūsdienu datoru kešatmiņā.

7) Atšķiriet procesu un pavedienu un norādiet procesa nosaukumu, kas apstrādā procesus un pavedienus lielākajā daļā datorsistēmu.

8) Īsi paskaidrojiet, kas ir daudzapstrāde.

9) a) Izskaidrojiet peidžeru, kas attiecas uz x86 386 µP datora arhitektūru.
b) Kā šo peidžeru var modificēt, lai palielinātu visas atmiņas apjomu?