6 skyrius. Šiuolaikinės kompiuterių architektūros pagrindai su asamblėjos kalba

6 Skyrius Siuolaikines Kompiuteriu Architekturos Pagrindai Su Asamblejos Kalba



6.1 Įvadas

Šiuolaikiniai bendrosios paskirties kompiuteriai yra dviejų tipų: CISC ir RISC. CISC reiškia „Complex Instruction Set Computer“. RISK reiškia sumažintų instrukcijų rinkinio kompiuterį. 6502 arba 6510 mikroprocesoriai, kaip taikoma Commodore-64 kompiuteriui, labiau primena RISC architektūrą nei CISC architektūrą.

RISC kompiuteriuose paprastai yra trumpesnės surinkimo kalbos instrukcijos (pagal baitų skaičių), palyginti su CISC kompiuteriais.







Pastaba : Nesvarbu, ar dirbate su CISC, RISC ar senu kompiuteriu, išorinis įrenginys prasideda nuo vidinio prievado ir eina į išorę per išorinį prievadą, esantį vertikaliame kompiuterio sistemos bloko (pagrindinio bloko) paviršiuje, ir į išorinį įrenginį.



Įprasta CISC kompiuterio instrukcija gali būti vertinama kaip kelių trumpų asamblėjos kalbos instrukcijų sujungimas į vieną ilgesnę asamblėjos kalbos instrukciją, dėl kurios viena gauta instrukcija tampa sudėtinga. Visų pirma, CISC kompiuteris įkelia operandus iš atminties į mikroprocesoriaus registrus, atlieka operaciją ir išsaugo rezultatą atgal į atmintį, visa tai viena instrukcija. Kita vertus, tai yra mažiausiai trys instrukcijos (trumpos) RISC kompiuteriui.



Yra dvi populiarios CISC kompiuterių serijos: „Intel“ mikroprocesorių kompiuteriai ir AMD mikroprocesorių kompiuteriai. AMD reiškia Advanced Micro Devices; tai puslaidininkių gamybos įmonė. „Intel“ mikroprocesorių serijos kūrimo tvarka yra 8086, 8088, 80186, 80286, 80386, 80486, „Pentium“, „Core“, „i Series“, „Celeron“ ir „Xeon“. Ankstyvųjų „Intel“ mikroprocesorių, tokių kaip 8086 ir 8088, surinkimo kalbos instrukcijos nėra labai sudėtingos. Tačiau naujiems mikroprocesoriams jie yra sudėtingi. Naujausi CISC serijos AMD mikroprocesoriai yra Ryzen, Opteron, Athlon, Turion, Phenom ir Sempron. „Intel“ ir „AMD“ mikroprocesoriai yra žinomi kaip x86 mikroprocesoriai.





ARM reiškia Advanced RISC Machine. ARM architektūra apibrėžia RISC procesorių šeimą, kuri yra tinkama naudoti įvairiose programose. Nors daugelis „Intel“ ir „AMD“ mikroprocesorių naudojami staliniuose asmeniniuose kompiuteriuose, daugelis ARM procesorių naudojami kaip įterptieji procesoriai svarbiose saugai sistemose, pvz., automobilių stabdžių antiblokavimo sistemose, ir kaip bendrosios paskirties procesoriai išmaniuosiuose laikrodžiuose, nešiojamuosiuose telefonuose, planšetiniuose kompiuteriuose ir nešiojamuosiuose kompiuteriuose. . Nors abiejų tipų mikroprocesoriai gali būti matomi mažuose ir dideliuose įrenginiuose, RISC mikroprocesorių yra daugiau mažuose nei dideliuose įrenginiuose.

Kompiuterinis žodis
Jei sakoma, kad kompiuteris yra 32 bitų žodžio kompiuteris, tai reiškia, kad informacija yra saugoma, perduodama ir manipuliuojama trisdešimt dviejų bitų dvejetainių kodų pavidalu pagrindinės plokštės vidinėje dalyje. Tai taip pat reiškia, kad bendrosios paskirties registrai kompiuterio mikroprocesoriuje yra 32 bitų pločio. 6502 mikroprocesoriaus A, X ir Y registrai yra bendrosios paskirties registrai. Jie yra aštuonių bitų pločio, todėl Commodore-64 kompiuteris yra aštuonių bitų žodžių kompiuteris.



Šiek tiek žodyno
X86 Kompiuteriai

Baito, žodžio, dvigubo žodžio, keturžodžio ir dvigubo keturžodžio reikšmės x86 kompiuteriams yra tokios:

  • baitas : 8 bitai
  • Žodis : 16 bitų
  • Dvigubas žodis : 32 bitai
  • Quadword : 64 bitai
  • Dvigubas keturžodis : 128 bitai

ARM kompiuteriai
Baito, pusės žodžio, žodžio ir dvigubo žodžio reikšmės ARM kompiuteriams yra tokios:

  • baitas : 8 bitai
  • Tapk pusiau : 16 bitų
  • Žodis : 32 bitai
  • Dvigubas žodis : 64 bitai

Reikėtų atkreipti dėmesį į x86 ir ARM pavadinimų (ir reikšmių) skirtumus ir panašumus.

Pastaba : abiejų tipų kompiuterių sveikieji skaičiai yra dviejų komplementai.

Atminties vieta
Commodore-64 kompiuteryje atminties vieta paprastai yra vienas baitas, bet kartais gali būti du baitai iš eilės, kai atsižvelgiama į nuorodas (netiesioginis adresavimas). Šiuolaikiniame x86 kompiuteryje atminties vieta yra 16 baitų iš eilės, kai kalbama su dvigubu 16 baitų (128 bitų) keturžodžiu, 8 baitai iš eilės, kai dirbama su 8 baitų (64 bitų) keturžodžiu, 4 baitai iš eilės, kai kalbama apie dvigubą žodį 4 baitai (32 bitai), 2 baitai iš eilės, kai kalbama apie 2 baitų (16 bitų) žodį, ir 1 baitas, kai dirbama su baitu (8 bitai). Šiuolaikiniame ARM kompiuteryje atminties vieta yra 8 baitai iš eilės, kai kalbama apie 8 baitų (64 bitų) dvigubą žodį, 4 baitai iš eilės, kai kalbama su 4 baitų (32 bitų) žodžiu, 2 baitai iš eilės, kai kalbama su puse žodžio. 2 baitai (16 bitų) ir 1 baitas, kai dirbama su baitu (8 bitai).

Šiame skyriuje paaiškinama, kas bendro CISC ir RISC architektūrose ir kokie jų skirtumai. Tai daroma lyginant su 6502 µP ir kompiuteriu commodore-64, kur tai taikoma.

6.2 Šiuolaikinio kompiuterio pagrindinės plokštės schema

PC reiškia asmeninį kompiuterį. Toliau pateikiama bendra pagrindinė šiuolaikinės pagrindinės plokštės su vienu asmeninio kompiuterio mikroprocesoriumi blokinė schema. Tai reiškia CISC arba RISC pagrindinę plokštę.


6.21 pav. Pagrindinė šiuolaikinio kompiuterio pagrindinės plokštės schema

Diagramoje parodyti trys vidiniai prievadai, tačiau praktikoje jų yra daugiau. Kiekvienas prievadas turi registrą, kuris gali būti laikomas pačiu prievadu. Kiekviena prievado grandinė turi bent kitą registrą, kuris gali būti vadinamas „būsenos registru“. Būsenos registras nurodo programos, siunčiančios pertraukimo signalą į mikroprocesorių, prievadą. Yra pertraukimo valdiklio grandinė (neparodyta), kuri išskiria skirtingas pertraukimo linijas iš skirtingų prievadų ir turi tik kelias eilutes iki µP.

HD.C diagramoje reiškia kietojo disko kortelę. NIC reiškia tinklo sąsajos kortelę. Kietojo disko kortelė (grandinė) yra prijungta prie standžiojo disko, kuris yra šiuolaikinio kompiuterio pagrindiniame bloke (sisteminiame bloke). Tinklo sąsajos plokštė (grandinė) išoriniu kabeliu prijungiama prie kito kompiuterio. Diagramoje yra vienas prievadas ir DMA (žr. tolesnę iliustraciją), kurie yra prijungti prie standžiojo disko kortelės ir (arba) prie tinklo sąsajos plokštės. DMA reiškia tiesioginę prieigą prie atminties.

Prisiminkite iš Commodore-64 kompiuterio skyriaus, kad norint siųsti baitus iš atminties į diskų įrenginį ar kitą kompiuterį, kiekvieną baitą reikia nukopijuoti į mikroprocesoriaus registrą prieš nukopijuojant į atitinkamą vidinį prievadą, o tada automatiškai. prie įrenginio. Norint gauti baitus iš disko ar kito kompiuterio į atmintį, kiekvienas baitas turi būti nukopijuotas iš atitinkamo vidinio prievado registro į mikroprocesoriaus registrą prieš nukopijuojant į atmintį. Tai paprastai užtrunka ilgai, jei sraute yra daug baitų. Greito perdavimo sprendimas yra tiesioginės atminties prieigos (grandinės) naudojimas neperžengiant mikroprocesoriaus.

DMA grandinė yra tarp prievado ir HD. C arba NIC. Su tiesiogine DMA grandinės prieiga prie atminties, dideli baitų srautai perduodami tiesiai tarp DMA grandinės ir atminties (RAM) be nuolatinio mikroprocesoriaus dalyvavimo. DMA vietoj µP naudoja adresų magistralę ir duomenų magistralę. Bendra perdavimo trukmė yra trumpesnė nei tuo atveju, jei reikia naudoti µP hard. Tiek HD C., tiek NIC naudoja DMA, kai turi didelį duomenų (baitų) srautą, skirtą perkelti su RAM (atmintimi).

GPU reiškia grafikos apdorojimo bloką. Šis pagrindinės plokštės blokas yra atsakingas už teksto ir judančių ar nejudančių vaizdų siuntimą į ekraną.

Šiuolaikiniuose kompiuteriuose nėra tik skaitymo atminties (ROM). Tačiau yra BIOS arba UEFI, kurie yra nepastovi RAM rūšis. BIOS informaciją iš tikrųjų palaiko baterija. Baterija iš tikrųjų palaiko ir laikrodžio laikmatį kompiuteriui tinkamu laiku ir data. UEFI buvo išrastas po BIOS ir pakeitė BIOS, nors BIOS vis dar gana aktualus šiuolaikiniuose kompiuteriuose. Daugiau apie tai aptarsime vėliau!

Šiuolaikiniuose kompiuteriuose adresų ir duomenų magistralės tarp µP ir vidinių prievadų grandinių (ir atminties) nėra lygiagrečios magistralės. Tai yra nuosekliosios magistralės, kurioms reikia dviejų laidininkų, kad būtų galima perduoti viena kryptimi, o dar dviejų laidininkų perduoti priešinga kryptimi. Tai reiškia, kad, pavyzdžiui, 32 bitai gali būti siunčiami nuosekliai (vienas bitas po kito) bet kuria kryptimi.

Jei nuoseklusis perdavimas yra tik viena kryptimi su dviem laidininkais (dviem linijomis), sakoma, kad tai yra pusiau dvipusis. Jei nuoseklusis perdavimas yra abiem kryptimis su keturiais laidininkais, viena pora bet kuria kryptimi, tai laikoma pilnai dvipuse.

Visa šiuolaikinio kompiuterio atmintis vis dar susideda iš baitų vietų: aštuoni bitai viename baite. Šiuolaikinis kompiuteris turi mažiausiai 4 gigabaitų atmintį = 4 x 210 x 2 10 x 2 10 = 4 x 1 073 741 824 10 baitai = 4 x 1024 10/sub> 1024 10 x 1024 10 = 4 x 1 073 741 824 10 .

Pastaba : Nors ankstesnėje pagrindinėje plokštėje laikmačio grandinė nerodoma, visos šiuolaikinės pagrindinės plokštės turi laikmačio grandines.

6.3 x64 kompiuterio architektūros pagrindai

6.31 x64 registro rinkinys
X86 serijos mikroprocesorių 64 bitų mikroprocesorius yra 64 bitų mikroprocesorius. Gana modernu pakeisti tos pačios serijos 32 bitų procesorių. 64 bitų mikroprocesoriaus bendrosios paskirties registrai ir jų pavadinimai yra tokie:


6.31 pav. Bendrosios paskirties registrai, skirti x64

Pateiktoje iliustracijoje parodyta šešiolika (16) bendrosios paskirties registrų. Kiekvienas iš šių registrų yra 64 bitų pločio. Žvelgiant į registrą viršutiniame kairiajame kampe, 64 bitai identifikuojami kaip RAX. Pirmieji 32 to paties registro bitai (iš dešinės) identifikuojami kaip EAX. Pirmieji 16 to paties registro bitų (iš dešinės) identifikuojami kaip AX. Antrasis to paties registro baitas (iš dešinės) identifikuojamas kaip AH (H čia reiškia aukštą). Ir pirmasis baitas (to paties registro) yra identifikuojamas kaip AL (L čia reiškia žemą). Žvelgiant į registrą apatiniame dešiniajame kampe, 64 bitai identifikuojami kaip R15. Pirmieji 32 to paties registro bitai identifikuojami kaip R15D. Pirmieji 16 to paties registro bitų identifikuojami kaip R15W. Ir pirmasis baitas identifikuojamas kaip R15B. Panašiai paaiškinami ir kitų registrų (ir poregistrų) pavadinimai.

Yra keletas skirtumų tarp „Intel“ ir AMD µP. Šiame skyriuje pateikta informacija skirta „Intel“.

Naudojant 6502 µP, Programos skaitiklio registras (tiesiogiai nepasiekiamas), kuriame yra kita vykdytina komanda, yra 16 bitų pločio. Čia (x64) programos skaitiklis vadinamas instrukcijų žymekliu ir yra 64 bitų pločio. Jis pažymėtas kaip RIP. Tai reiškia, kad x64 µP gali adresuoti iki 264 = 1,844674407 x 1019 (iš tikrųjų 18 446 744 073 709 551 616) atminties baitų vietų. RIP nėra bendros paskirties registras.

Stack Pointer Registras arba RSP yra vienas iš 16 bendrosios paskirties registrų. Jis nurodo paskutinį krūvos įrašą atmintyje. Kaip ir naudojant 6502 µP, x64 krūva didėja žemyn. Naudojant x64, RAM krūva naudojama paprogramių grąžinimo adresams saugoti. Jis taip pat naudojamas „šešėlinės erdvės“ saugojimui (žr. tolesnę diskusiją).

6502 µP turi 8 bitų procesoriaus būsenos registrą. Ekvivalentas x64 vadinamas RFLAGS registru. Šiame registre saugomos vėliavėlės, kurios naudojamos operacijų rezultatams ir procesoriaus valdymui (µP). Jis yra 64 bitų pločio. Didesni 32 bitai yra rezervuoti ir šiuo metu nenaudojami. Šioje lentelėje pateikiami RFLAGS registre dažniausiai naudojamų bitų pavadinimai, indeksas ir reikšmės:

6.31.1 lentelė
Dažniausiai naudojamos RFLAGS vėliavėlės (bitai)
Simbolis Bit vardas Tikslas
CF 0 Nešioti Jis nustatomas, jei aritmetinė operacija generuoja reikšmingiausio rezultato bito perkėlimą arba skolinimąsi; išvalyta kitaip. Ši vėliavėlė nurodo perpildymo sąlygą beženklio sveikojo skaičiaus aritmetikai. Jis taip pat naudojamas kelių tikslumo aritmetikoje.
PF 2 Paritetas Jis nustatomas, jei mažiausiai reikšmingame rezultato baite yra lyginis 1 bitų skaičius; išvalyta kitaip.
APIE 4 Sureguliuoti Jis nustatomas, jei aritmetinis veiksmas generuoja perkėlimą arba skolinimąsi iš 3 rezultato bito; išvalyta kitaip. Ši vėliavėlė naudojama dvejetainio kodo dešimtainėje (BCD) aritmetikoje.
ZF 6 Nulis Jis nustatomas, jei rezultatas lygus nuliui; išvalyta kitaip.
SF 7 Pasirašyti Jis nustatomas, jei jis yra lygus reikšmingiausiam rezultato bitui, kuris yra sveikojo skaičiaus ženklo bitas (0 reiškia teigiamą reikšmę, o 1 reiškia neigiamą reikšmę).
APIE vienuolika Perpildymas Jis nustatomas, jei sveikasis rezultatas yra per didelis teigiamas skaičius arba per mažas neigiamas skaičius (išskyrus ženklo bitą), kad tilptų į paskirties operandą; išvalyta kitaip. Ši vėliavėlė rodo perpildymo sąlygą sveikojo ženklo (dviejų komplemento) aritmetikai.
DF 10 Kryptis Jis nustatomas, jei veikia krypties eilutės instrukcijos (didinti arba mažinti).
ID dvidešimt vienas Identifikavimas Jis nustatomas, jei keičiamumas reiškia CPUID komandos buvimą.

Be aštuoniolikos anksčiau nurodytų 64 bitų registrų, x64 architektūra µP turi aštuonis 80 bitų pločio registrus, skirtus slankiojo kablelio aritmetikai. Šie aštuoni registrai taip pat gali būti naudojami kaip MMX registrai (žr. tolesnę diskusiją). Taip pat yra šešiolika 128 bitų XMM registrų (žr. tolesnę diskusiją).

Tai dar ne viskas apie registrus. Yra ir daugiau x64 registrų, kurie yra segmentų registrai (dažniausiai nenaudojami x64), valdymo registrai, atminties valdymo registrai, derinimo registrai, virtualizacijos registrai, našumo registrai, kurie seka įvairius vidinius parametrus (talpyklos pataikymus / praleidimus, įvykdytas mikrooperacijas, laiką , ir daug daugiau).

SIMD

SIMD reiškia Single Instruction Multiple Data. Tai reiškia, kad viena asamblėjos kalbos instrukcija gali veikti kelis duomenis vienu metu viename mikroprocesoriuje. Apsvarstykite šią lentelę:

1 2 3 4 5 6 7 8
+ 9 10 vienuolika 12 13 14 penkiolika 16
= 10 12 14 16 18 dvidešimt 22 24

Šioje lentelėje lygiagrečiai (per tą pačią trukmę) pridedamos aštuonios skaičių poros, kad būtų pateikti aštuoni atsakymai. Viena surinkimo kalbos instrukcija gali atlikti aštuonis lygiagrečius sveikųjų skaičių papildymus MMX registruose. Panašiai galima padaryti ir su XMM registrais. Taigi, yra MMX instrukcijos sveikiesiems skaičiams ir XMM instrukcijos plaukiojantiems skaičiams.

6.32 Atminties žemėlapis ir x64

Kai instrukcijų žymeklis (programų skaitiklis) turi 64 bitus, tai reiškia, kad galima adresuoti 264 = 1,844674407 x 1019 atminties baitų vietas. Šešioliktainėje sistemoje didžiausia baitų vieta yra FFFF,FFFF,FFFF,FFFF16. Nė vienas įprastas kompiuteris šiandien negali užtikrinti tokios didelės (visiškos) atminties vietos. Taigi, tinkamas x64 kompiuterio atminties žemėlapis yra toks:

Atkreipkite dėmesį, kad tarpas nuo 0000,8000,0000,000016 iki FFFF,7FFF,FFFF,FFFF16 neturi atminties vietų (nėra atminties RAM bankų). Tai yra FFFF,0000,0000,000116 skirtumas, kuris yra gana didelis. Kanoninėje aukštojoje pusėje yra operacinė sistema, o kanoninėje žemojoje pusėje yra vartotojo programos (programos) ir duomenys. Operacinė sistema susideda iš dviejų dalių: mažos UEFI (BIOS) ir didelės dalies, įkeliamos iš standžiojo disko. Kitame skyriuje daugiau kalbama apie šiuolaikines operacines sistemas. Atkreipkite dėmesį į panašumą su šiuo atminties žemėlapiu ir Commodore-64, kai 64 KB galėjo atrodyti kaip daug atminties.

Šiame kontekste operacinė sistema apytiksliai vadinama „branduoliu“. Branduolys yra panašus į Commodore-64 kompiuterio branduolį, tačiau turi daug daugiau paprogramių.

x64 endianiškumas yra mažas, o tai reiškia, kad vietos žemesnis adresas nurodo į žemesnį atminties baitą.

6.33 Asamblėjos kalbos adresavimo režimai, skirti x64

Adresavimo režimai yra būdai, kuriais instrukcija gali pasiekti µP registrus ir atmintį (įskaitant vidinius prievadų registrus). x64 turi daug adresavimo režimų, tačiau čia pateikiami tik dažniausiai naudojami adresavimo režimai. Bendra instrukcijos sintaksė yra tokia:

opkodo paskirties vieta, šaltinis

Dešimtainiai skaičiai rašomi be priešdėlio ar galūnės. Naudojant 6502, šaltinis yra numanomas. x64 turi daugiau operacijų kodų nei 6502, tačiau kai kurių operacijų kodų mnemonika yra tokia pati. Atskiros x64 instrukcijos yra įvairaus ilgio ir gali būti nuo 1 iki 15 baitų. Dažniausiai naudojami adresavimo režimai yra šie:

Greito adresavimo režimas
Čia šaltinio operandas yra tikroji reikšmė, o ne adresas ar etiketė. Pavyzdys (skaitykite komentarą):

PRIDĖTI EAX, 14 ; pridėti dešimtainę 14–32 bitų EAX iš 64 bitų RAX, atsakymas lieka EAX (paskirties vieta)

Registruokitės į Registracijos adresavimo režimą
Pavyzdys:

PRIDĖTI R8B, AL ; pridėti 8 bitų RAX AL prie 64 bitų R8 R8B – atsakymai lieka R8B (paskirties vieta)

Netiesioginis ir indeksuotas adresavimo režimas
Netiesioginis adresavimas naudojant 6502 µP reiškia, kad nurodyto adreso vieta instrukcijoje turi galutinės vietos veiksmingą adresą (rodiklį). Panašiai atsitinka ir su x64. Indeksinis adresas naudojant 6502 µP reiškia, kad µP registro turinys pridedamas prie nurodyto adreso instrukcijoje, kad būtų galimas adresas. Panašiai atsitinka ir su x64. Be to, naudojant x64, registro turinį taip pat galima padauginti iš 1 arba 2 arba 4 arba 8 prieš įtraukiant jį į nurodytą adresą. x64 mov (kopijuoti) instrukcija gali derinti ir netiesioginį, ir indeksuotą adresavimą. Pavyzdys:

MOV R8W, 1234 [8*RAX+RCX] ; perkelti žodį adresu (8 x RAX + RCX) + 1234

Čia R8W turi pirmuosius 16 R8 bitų. Nurodytas adresas yra 1234. RAX registre yra 64 bitų skaičius, kuris padauginamas iš 8. Rezultatas pridedamas prie 64 bitų RCX registro turinio. Šis antrasis rezultatas pridedamas prie nurodyto adreso, kuris yra 1234, kad būtų gautas veiksmingas adresas. Skaičius, esantis galiojančio adreso vietoje, perkeliamas (nukopijuojamas) į pirmąją 16 bitų vietą (R8W) R8 registre, pakeičiant viską, kas ten buvo. Atkreipkite dėmesį į laužtinių skliaustų naudojimą. Atminkite, kad žodis x64 formatu yra 16 bitų pločio.

RIP santykinis adresavimas
6502 µP santykinis adresavimas naudojamas tik su šakų instrukcijomis. Ten vienintelis operatyvinio kodo operandas yra poslinkis, kuris pridedamas arba atimamas iš programos skaitiklio turinio pagal efektyvų komandų adresą (ne duomenų adresą). Panašiai atsitinka ir su x64, kur programos skaitiklis vadinamas instrukcijų žymekliu. Instrukcija su x64 turi būti ne tik šakos instrukcija. RIP santykinio adresavimo pavyzdys:

MOV AL, [RIP]

RAX AL turi 8 bitų pasirašytą skaičių, kuris pridedamas arba atimamas iš RIP turinio (64 bitų komandų žymeklis), kad būtų nukreipta į kitą komandą. Atminkite, kad šioje instrukcijoje šaltinis ir paskirties vieta yra išimties tvarka sukeisti. Taip pat atkreipkite dėmesį į laužtinius skliaustus, nurodančius RIP turinį.

6.34 Dažniausiai naudojamos x64 instrukcijos

Šioje lentelėje * reiškia skirtingas galimas operacijų kodų pogrupio priesagas:

6.34.1 lentelė
Dažniausiai naudojamos instrukcijos x64
Opkodas Reikšmė
MOV Perkelti (kopijuoti) į/iš/tarp atminties ir registrų
CMOV* Įvairūs sąlyginiai judesiai
XCHG Mainai
BSWAP Baitų apsikeitimas
PUSH/POP Stacko naudojimas
ADD/ADC Pridėti / su nešiojimu
SUB/SBC Atimti/su nešimu
MUL/IMUL Padauginti/nepasirašyta
DIV/IDIV Padalyti/nepasirašyta
INC/DEC Padidinti/sumažinti
NEG Neigti
CMP Palyginti
IR/ARBA/XOR/NE Bitinės operacijos
SHR/SAR Loginis/aritmetinis poslinkis dešinėn
SHL/SAL Loginis/aritmetinis poslinkis į kairę
ROR/ROLE Sukti į dešinę/kairėn
RCR/RCL Sukite į dešinę / į kairę per nešiojimo antgalį
BT/BTS/BTR Bitų tikrinimas / ir nustatymas / ir atstatymas
JMP Besąlyginis šuolis
JE/JNE/JC/JNC/J* Peršokti, jei lygus / nelygus / nešiok / neneši / daug kitų
ĖĖKITE/ĖJITE/ĖJITE Kilpa su ECX
SKAMBINTI / ATSISKAITYTI Skambinimo paprogramė/grįžimas
BE PROBLEMŲ Jokios operacijos
CPUID CPU informacija

x64 turi daugybos ir padalijimo instrukcijas. Jo µP yra daugybos ir padalijimo aparatinės įrangos grandinės. 6502 µP neturi daugybos ir padalijimo aparatinės įrangos grandinių. Daugyba ir padalijimas pagal aparatinę įrangą yra greitesnis nei programinės įrangos (įskaitant bitų perkėlimą).

Styginių instrukcijos
Yra keletas eilučių nurodymų, tačiau vienintelė čia aptariama yra MOVS (perkėlimo eilutės) instrukcija nukopijuoti eilutę, prasidedančią adresu C000. H . Pradėti adresu C100 H , vadovaukitės šia instrukcija:

MOVS [C100H], [C000H]

Atkreipkite dėmesį į šešioliktainės sistemos galūnę H.

6.35 Sukūrimas x64

6502 µP turi atšakos instrukcijas kilpai. Filialo nurodymas peršoka į adreso vietą, kurioje yra nauja instrukcija. Adreso vieta gali būti vadinama „kilpa“. X64 turi LOOP/LOOPE/LOOPNE instrukcijas, skirtas ciklui kurti. Šių rezervuotos surinkimo kalbos žodžių negalima painioti su etikete „kilpa“ (be kabučių). Elgesys yra toks:

LOOP sumažina ECX ir patikrina, ar ECX nėra nulis. Jei ši sąlyga (nulis) įvykdoma, ji pereina prie nurodytos etiketės. Kitu atveju tai nepavyks (tęskite su likusiomis instrukcijomis tolesnėje diskusijoje).

LOOPE sumažina ECX ir patikrina, ar ECX nėra nulis (gali būti, pavyzdžiui, 1), o ZF nustatytas (į 1). Jei šios sąlygos yra įvykdytos, jis šokinėja etiketėje. Priešingu atveju jis nukrenta.

LOOPNE sumažina ECX ir patikrina, ar ECX nėra nulis ir ZF NĖRA nustatytas (t. y. būti nuliui). Jei šios sąlygos įvykdomos, jis pereina prie etiketės. Priešingu atveju jis nukrenta.

Naudojant x64, RCX registras arba jo dalys, pvz., ECX arba CX, turi sveikąjį skaičių. Naudojant LOOP instrukcijas, skaitiklis paprastai skaičiuoja atgal, mažindamas 1 už kiekvieną šuolį (ciklą). Šiame ciklo kodo segmente skaičius EAX registre padidėja nuo 0 iki 10 per dešimt pakartojimų, o skaičius ECX skaičiuojamas (mažėja) 10 kartų (skaitykite komentarus):

MOV EAX, 0 ;
MOV ECX, 10 ; pagal numatytuosius nustatymus skaičiuokite 10 kartų, po vieną kartą kiekvienai iteracijai
etiketė:
INC EAX ; padidinti EAX kaip kilpos korpusą
LOOP etiketė ; sumažinkite EAX ir, jei EAX nėra nulis, iš naujo paleiskite ciklo turinį iš „label:“

Ciklo kodavimas prasideda nuo „etiketės:“. Atkreipkite dėmesį į dvitaškio naudojimą. Ciklo kodavimas baigiasi „LOOP etikete“, kuri sako, kad reikia sumažinti EAX. Jei jo turinys nėra nulis, grįžkite į instrukciją po „label:“ ir iš naujo vykdykite bet kurią instrukciją (visas pagrindinio turinio instrukcijas), kuri ateina žemyn, kol pasirodys „LOOP etiketė“. Atminkite, kad etiketė vis tiek gali turėti kitą pavadinimą.

6.36 x64 įvestis / išvestis

Šiame skyriaus skyriuje aptariamas duomenų siuntimas į išvesties (vidinį) prievadą arba duomenų gavimas iš įvesties (vidinio) prievado. Lustų rinkinys turi aštuonių bitų prievadus. Bet kurie du iš eilės 8 bitų prievadai gali būti traktuojami kaip 16 bitų prievadai, o bet kurie keturi iš eilės esantys prievadai gali būti 32 bitų prievadai. Tokiu būdu procesorius gali perkelti 8, 16 arba 32 bitus į išorinį įrenginį arba iš jo.

Informacija tarp procesoriaus ir vidinio prievado gali būti perduodama dviem būdais: naudojant vadinamąjį atminties susietą įvestį / išvestį arba naudojant atskirą įvesties / išvesties adresų erdvę. Atminties įvestis / išvestis yra panaši į tai, kas vyksta su 6502 procesoriumi, kur prievadų adresai iš tikrųjų yra visos atminties erdvės dalis. Šiuo atveju, siunčiant duomenis į tam tikrą adreso vietą, jie patenka į prievadą, o ne į atminties banką. Prievadai gali turėti atskirą I/O adresų erdvę. Pastaruoju atveju visų atminties bankų adresai yra nuo nulio. Yra atskiras adresų diapazonas nuo 0000H iki FFFF16. Juos naudoja mikroschemų rinkinio prievadai. Pagrindinė plokštė suprogramuota taip, kad nebūtų painiojama tarp atminties susietos I/O ir atskiros I/O adresų erdvės.

Su atmintimi susietas I/O
Šiuo atveju prievadai laikomi atminties vietomis, o įprasti operacijų kodai, naudojami tarp atminties ir µP, naudojami duomenims perduoti tarp µP ir prievadų. Taigi, norėdami perkelti baitą iš prievado adresu F000H į µP registrą RAX:EAX:AX:AL, atlikite šiuos veiksmus:

MOV AL, [F000H]

Eilutę galima perkelti iš atminties į prievadą ir atvirkščiai. Pavyzdys:

MOVS [F000H], [C000H] ; šaltinis yra C000H, o paskirties vieta yra F000H uostas.

Atskira I/O adresų erdvė

Šiuo atveju reikia naudoti specialias įvesties ir išvesties instrukcijas.

Pavienių daiktų perkėlimas
Pervedimo procesoriaus registras yra RAX. Tiesą sakant, tai yra RAX:EAX – dvigubas žodis, RAX:EAX:AX ​​– žodis, o RAX:EAX:AX:AL – baitas. Taigi, norėdami perkelti baitą iš prievado FFF0h į RAX:EAX:AX:AL, įveskite:

AL, [FFF0H]

Norėdami atlikti atvirkštinį perkėlimą, įveskite:

OUT [FFF0H], AL

Taigi, pavienių elementų instrukcijos yra IN ir OUT. Prievado adresą taip pat galima nurodyti RDX:EDX:DX registre.

Stygų perkėlimas
Eilutę galima perkelti iš atminties į mikroschemų rinkinio prievadą ir atvirkščiai. Norėdami perkelti eilutę iš prievado adresu FFF0H į atmintį, pradėkite nuo C100H, įveskite:

INS [ESI], [DX]

kuris turi tokį patį poveikį kaip:

INS [EDI], [DX]

Programuotojas turėtų įrašyti dviejų baitų FFF0H prievado adresą į RDX:EDX:Dx registrą, o dviejų baitų C100H adresą - į RSI:ESI arba RDI:EDI registrą. Jei norite perkelti atgal, atlikite šiuos veiksmus:

INS [DX], [ESI]

kuris turi tokį patį poveikį kaip:

INS [DX], [EDI]

6.37 Stack x64

Kaip ir 6502 procesorius, x64 procesorius taip pat turi krūvą RAM. x64 rinkinys gali būti 2 16 = 65 536 baitų ilgio arba gali būti 2 32 = 4 294 967 296 baitų ilgio. Taip pat auga žemyn. Kai registro turinys įstumiamas į krūvą, skaičius RSP dėklo rodyklėje sumažinamas 8. Atminkite, kad x64 atminties adresas yra 64 bitų pločio. Vertė dėklo žymeklyje µP rodo į kitą RAM dėklo vietą. Kai registro turinys (arba reikšmė viename operande) perkeliamas iš krūvos į registrą, skaičius RSP dėklo rodyklėje padidinamas 8. Operacinė sistema nustato dėklo dydį ir jo pradžios vietą RAM. ir auga žemyn. Atminkite, kad krūva yra paskutinis pirmas išėjimas (LIFO) struktūra, kuri šiuo atveju auga žemyn ir traukiasi į viršų.

Norėdami perkelti µP RBX registro turinį į krūvą, atlikite šiuos veiksmus:

PUSH RBX

Norėdami grąžinti paskutinį įrašą krūvoje atgal į RBX, atlikite šiuos veiksmus:

POP RBX

6.38 Procedūra x64

Paprogramė x64 yra vadinama „procedūra“. Kaminas čia naudojamas daugiau nei naudojamas 6502 µP. x64 procedūros sintaksė yra tokia:

proc_name:
procedūros įstaiga

teisingai

Prieš tęsdami atkreipkite dėmesį, kad x64 paprogramės operacijų kodai ir etiketės (bendrai surinkimo kalbos instrukcijos) neskiria didžiųjų ir mažųjų raidžių. Tai yra proc_name yra tas pats kaip PROC_NAME. Kaip ir 6502, procedūros pavadinimo (etiketės) pavadinimas prasideda naujos eilutės pradžioje surinkimo kalbos teksto rengyklėje. Po to rašomas dvitaškis, o ne tarpas ir operacijos kodas, kaip naudojant 6502. Toliau pateikiamas paprogramės turinys, kuris baigiasi RET, o ne RTS, kaip 6502 µP. Kaip ir 6502 atveju, kiekviena korpuso instrukcija, įskaitant RET, prasideda ne eilutės pradžioje. Atminkite, kad etiketė čia gali būti ilgesnė nei 8 simboliai. Norėdami iškviesti šią procedūrą iš viršaus arba žemiau įvestos procedūros, atlikite šiuos veiksmus:

SKAMBINTI proc_name

Naudojant 6502, etiketės pavadinimas yra tik skambinimo įvedimo tipas. Tačiau čia įvedamas rezervuotas žodis „CALL“ arba „call“, o po tarpo nurodomas procedūros (paprogramės) pavadinimas.

Kalbant apie procedūras, dažniausiai būna dvi procedūros. Viena procedūra vadina kitą. Procedūra, kuri skambina (turi skambučio nurodymą), vadinama „skambinančiuoju“, o procedūra, kuri iškviečiama, vadinama „skambinančiu asmeniu“. Yra konvencija (taisyklės), kurių reikia laikytis.

Skambintojo taisyklės

Skambinantis asmuo, iškviesdamas paprogramę, turėtų laikytis šių taisyklių:

1. Prieš iškviesdamas paprogramę, skambinantis asmuo turėtų išsaugoti tam tikrų registrų, kurie yra priskirti skambintojo išsaugotiems, turinį. Skambintojo išsaugoti registrai yra R10, R11 ir visi registrai, į kuriuos įvedami parametrai (RDI, RSI, RDX, RCX, R8, R9). Jei šių registrų turinys turi būti išsaugotas per paprogramės iškvietimą, stumkite juos į krūvą, o ne išsaugokite RAM. Tai turi būti padaryta, nes iškviestasis turi naudoti registrus, kad ištrintų ankstesnį turinį.

2. Jei, pavyzdžiui, reikia pridėti du skaičius, šie du skaičiai yra parametrai, kurie turi būti perduodami į krūvą. Norėdami perduoti parametrus paprogramei, sudėkite šešis iš jų į šiuos registrus eilės tvarka: RDI, RSI, RDX, RCX, R8, R9. Jei paprogramėje yra daugiau nei šeši parametrai, likusius stumkite į krūvą atvirkštine tvarka (t. y. pirmas paskutinis parametras). Kadangi krūva mažėja, pirmasis iš papildomų parametrų (tikrai septintas parametras) saugomas žemiausiu adresu (šis parametrų apvertimas istoriškai buvo naudojamas, kad būtų galima perduoti funkcijas (paprogrames) su kintamu parametrų skaičiumi).

3. Norėdami iškviesti paprogramę (procedūrą), naudokite iškvietimo instrukciją. Ši instrukcija įdeda grąžinimo adresą ant krūvos parametrų (žemiausia padėtis) ir paprogramės kodo šakas.

4. Sugrįžus paprogramei (t. y. iš karto po iškvietimo nurodymo), skambinantysis turi pašalinti visus papildomus parametrus (be šešių, kurie saugomi registruose) iš krūvos. Tai atkuria dėklo būseną, buvusią prieš skambinant.

5. Skambinantis asmuo gali tikėtis rasti paprogramės grąžinamąją reikšmę (adresą) RAX registre.

6. Skambintojas atkuria skambinančiojo išsaugotų registrų (R10, R11 ir bet kurio parametrų perdavimo registrų) turinį, pašalindamas juos iš krūvos. Skambintojas gali manyti, kad paprogramė nepakeitė kitų registrų.

Dėl skambinimo susitarimo struktūros paprastai kai kurie (arba dauguma) šių veiksmų nepakeis dėklo. Pvz., jei yra šeši ar mažiau parametrų, tame žingsnyje niekas neperkeliamas į krūvą. Taip pat programuotojai (ir kompiliatoriai) paprastai išlaiko jiems rūpimus rezultatus iš skambintojo įrašytų registrų, atlikdami 1 ir 6 veiksmus, kad išvengtų perteklinių paspaudimų ir iššokimų.

Yra du kiti būdai, kaip perduoti parametrus paprogramei, tačiau jie nebus nagrinėjami šiame internetiniame karjeros kurse. Vienas iš jų naudoja patį steką, o ne bendrosios paskirties registrus.

„Callee“ taisyklės

Iškviestos paprogramės apibrėžimas turėtų atitikti šias taisykles:

1. Paskirkite vietinius kintamuosius (kintamuosius, kurie sukuriami procedūros metu) naudodami registrus arba palikdami vietą krūvoje. Prisiminkite, kad krūva auga žemyn. Taigi, norint atlaisvinti vietos krūvos viršuje, krūvos rodyklė turėtų būti sumažinta. Kiekis, kuriuo sumažinamas dėklo rodyklė, priklauso nuo reikiamo vietinių kintamųjų skaičiaus. Pavyzdžiui, jei reikia vietinio slankaus ir vietinio ilgio (iš viso 12 baitų), dėklo rodyklė turi būti sumažinta 12, kad būtų vietos šiems vietiniams kintamiesiems. Aukšto lygio kalboje, pvz., C, tai reiškia deklaruoti kintamuosius nepriskiriant (inicijuojant) reikšmių.

2. Tada turi būti įrašytos visų registrų, kurie yra priskirti skambinančiajam išsaugoti (bendrosios paskirties registrai, kurių neišsaugo skambinantis asmuo), reikšmės, kurias naudoja funkcija. Norėdami išsaugoti registrus, stumkite juos į krūvą. Skambučio išsaugoti registrai yra RBX, RBP ir R12–R15 (RSP taip pat išsaugomas pagal skambučio susitarimą, tačiau šio veiksmo metu jų nereikia stumti į krūvą).

Atlikus šiuos tris veiksmus, gali tęstis faktinis paprogramės veikimas. Kai paprogramė yra paruošta grįžti, skambučių susitarimo taisyklės tęsiasi.

3. Kai paprogramė baigta, paprogramės grąžinimo reikšmė turi būti įdėta į RAX, jei jos ten dar nėra.

4. Paprogramė turi atkurti senas visų iškviečiamųjų išsaugotų registrų (RBX, RBP ir R12–R15), kurie buvo modifikuoti, reikšmes. Registro turinys atkuriamas iškeliant juos iš kamino. Atkreipkite dėmesį, kad registrai turėtų būti rodomi atvirkštine tvarka, kuria jie buvo stumti.

5. Toliau išskirstome vietinius kintamuosius. Lengviausias būdas tai padaryti – pridėti prie RSP tą pačią sumą, kuri buvo atimta iš jo atliekant 1 veiksmą.

6. Galiausiai grįžtame prie skambintojo, vykdydami ret komandą. Ši instrukcija suras ir pašalins tinkamą grąžinimo adresą iš krūvos.

Skambinančiojo paprogramės, norint iškviesti kitą paprogramę, kuri yra „myFunc“, turinio pavyzdys yra toks (skaitykite komentarus):

; Norite iškviesti funkciją „myFunc“, kuriai reikia trijų
; sveikojo skaičiaus parametras. Pirmasis parametras yra RAX.
; Antrasis parametras yra konstanta 456. Trečia
; parametras yra atminties vietoje 'variabl'

stumti rdi ; rdi bus param , todėl jį išsaugokite
; ilgas retVal = myFunc (x, 456, z);

mov rdi , rax ; įdėkite pirmąjį parametrą į RDI
mov rsi, 456; įdėkite antrą parametrą RSI
mov rdx , [kintamasis] ; Įdėkite trečiąjį parametrą į RDX

skambinti myFunc; iškviesti funkciją

pop rdi ; atkurti išsaugotą RDI reikšmę
; „myFunc“ grąžinimo vertė dabar pasiekiama RAX

Callee funkcijos (myFunc) pavyzdys yra (skaitykite komentarus):

myFunc:
; ∗∗∗ Standartinis paprogramės prologas ∗∗∗
sub rsp, 8; vietos 64 bitų vietiniam kintamajam (rezultatui), naudojant „antrinį“ operacijos kodą

stumti rbx ; Išsaugoti skambintoją–išsaugoti registrus
stumti rbp ; abu bus naudojami myFunc

; ∗∗∗ Subrutina Body ∗∗∗
mov rax , rdi ; 1 parametras į RAX
mov rbp , rsi ; 2 parametras į RBP
mov rbx, rdx; 3 parametras į rb x
mov [rsp + 1 6], rbx; įdėkite rbx į vietinį kintamąjį
pridėti [rsp + 1 6], rbp; pridėti rbp į vietinį kintamąjį
mov rax, [rsp +16]; mov vietinio kintamojo turinį į RAX
; (grąžinimo vertė / galutinis rezultatas)

; ∗∗∗ Standartinis paprogramės epilogas ∗∗∗
pop rbp ; atkurti iškviesto asmens išsaugojimo registrus
pop rbx ; atvirkščiai, kai stumiama
pridėti rsp, 8; panaikinti vietinį kintamąjį (-ius). 8 reiškia 8 baitus
ret ; pop top vertė iš kamino , peršok ten

6.39 x64 pertraukimai ir išimtys

Procesorius numato du programos vykdymo pertraukimo, pertraukimų ir išimčių mechanizmus:

  • Pertraukimas yra asinchroninis (gali įvykti bet kuriuo metu) įvykis, kurį paprastai suaktyvina įvesties / išvesties įrenginys.
  • Išimtis yra sinchroninis įvykis (vyksta, kai kodas vykdomas, iš anksto užprogramuotas, remiantis tam tikru įvykiu), kuris generuojamas, kai procesorius aptinka vieną ar daugiau iš anksto nustatytų sąlygų vykdydamas komandą. Nurodomos trys išimčių klasės: gedimai, spąstai ir nutraukimai.

Procesorius į pertraukimus ir išimtis reaguoja iš esmės vienodai. Kai pranešama apie pertraukimą arba išimtį, procesorius sustabdo dabartinės programos ar užduoties vykdymą ir persijungia į tvarkyklės procedūrą, kuri yra specialiai parašyta, kad būtų galima apdoroti pertraukimo ar išimties sąlygą. Procesorius pasiekia tvarkyklės procedūrą per įrašą Interrupt Descriptor Table (IDT). Kai tvarkytojas baigia tvarkyti pertraukimą arba išimtį, programos valdymas grąžinamas į pertrauktą programą arba užduotį.

Operacinė sistema, vykdomoji ir (arba) įrenginių tvarkyklės paprastai tvarko pertraukimus ir išimtis nepriklausomai nuo taikomųjų programų ar užduočių. Tačiau taikomosios programos gali pasiekti pertraukimų ir išimčių tvarkykles, kurios yra įtrauktos į operacinę sistemą, arba ją vykdyti per surinkimo kalbos iškvietimus.

Apibrėžiama aštuoniolika (18) iš anksto nustatytų pertraukimų ir išimčių, kurios yra susietos su įrašais IDT. Taip pat galima padaryti du šimtus dvidešimt keturis (224) vartotojo apibrėžtus pertraukimus ir susieti su lentele. Kiekvienas IDT pertraukimas ir išimtis yra identifikuojamas skaičiumi, kuris vadinamas „vektoriumi“. 6.39.1 lentelėje išvardyti pertraukimai ir išimtys su įrašais IDT ir atitinkami jų vektoriai. Vektoriai nuo 0 iki 8, nuo 10 iki 14 ir nuo 16 iki 19 yra iš anksto nustatyti pertraukimai ir išimtys. Vektoriai nuo 32 iki 255 yra skirti programinės įrangos apibrėžtiems pertraukimams (vartotojui), kurie skirti programinės įrangos pertraukimams arba užmaskuojamiems aparatinės įrangos pertraukimams.

Kai procesorius aptinka pertraukimą arba išimtį, jis atlieka vieną iš šių veiksmų:

  • Vykdykite numanomą iškvietimą į tvarkytojo procedūrą
  • Vykdykite numanomą iškvietimą į tvarkytojo užduotį

6.4 64 bitų ARM kompiuterių architektūros pagrindai

ARM architektūra apibrėžia RISC procesorių šeimą, tinkančią naudoti įvairiose programose. ARM yra įkėlimo / saugojimo architektūra, kuri reikalauja, kad duomenys būtų įkelti iš atminties į registrą, kad būtų galima atlikti bet kokį apdorojimą, pvz., ALU (Aritmetinės logikos vieneto) operaciją. Tolesnė instrukcija išsaugo rezultatą atgal į atmintį. Nors tai gali atrodyti kaip žingsnis atgal nuo x86 ir x64 architektūrų, kurios vienoje komandoje veikia tiesiogiai atmintyje esančius operandus (žinoma, naudojant procesoriaus registrus), praktikoje įkėlimo/saugojimo metodas leidžia atlikti kelias nuoseklias operacijas. operandas turi būti atliekamas dideliu greičiu, kai jis įkeliamas į vieną iš daugelio procesoriaus registrų. ARM procesoriai turi mažo ar didelio galingumo parinktį. Numatytasis ARM 64 nustatymas yra mažas, o tai yra konfigūracija, kuri dažniausiai naudojama operacinėse sistemose. 64 bitų ARM architektūra yra moderni ir yra nustatyta pakeisti 32 bitų ARM architektūrą.

Pastaba : Kiekviena 64 bitų ARM µP instrukcija yra 4 baitų (32 bitų) ilgio.

6.41 64 bitų ARM registro rinkinys
64 bitų ARM µP yra 31 bendroji 64 bitų registro paskirtis. Šioje diagramoje parodyti bendrosios paskirties registrai ir kai kurie svarbūs registrai:


4.11.1 pav. 64 bitų bendroji paskirtis ir kai kurie svarbūs registrai

Bendrosios paskirties registrai vadinami nuo X0 iki X30. Pirmoji kiekvieno registro 32 bitų dalis vadinama nuo W0 iki W30. Kai skirtumas tarp 32 bitų ir 64 bitų neakcentuojamas, naudojamas „R“ priešdėlis. Pavyzdžiui, R14 reiškia W14 arba X14.

6502 µP turi 16 bitų programų skaitiklį ir gali nukreipti 2 16 atminties baitų vietos. 64 bitų ARM µP turi 64 bitų programų skaitiklį ir gali adresuoti iki 2 64 = 1,844674407 x 1019 (iš tikrųjų 18 446 744 073 709 551 616) atminties baitų vietos. Programos skaitiklis turi kitos vykdytinos komandos adresą. ARM64 arba AArch64 instrukcijos ilgis paprastai yra keturi baitai. Procesorius automatiškai padidina šį registrą keturiais po to, kai kiekviena instrukcija gaunama iš atminties.

Stack Pointer registro arba SP nėra tarp 31 bendrosios paskirties registrų. Bet kurios architektūros dėklo žymeklis nurodo paskutinį dėklo įrašą atmintyje. ARM-64 kamino auga žemyn.

6502 µP turi 8 bitų procesoriaus būsenos registrą. Ekvivalentas ARM64 vadinamas PSTATE registru. Šiame registre saugomos vėliavėlės, kurios naudojamos operacijų rezultatams ir procesoriaus valdymui (µP). Jis yra 32 bitų pločio. Šioje lentelėje pateikiami PSTATE registre dažniausiai naudojamų bitų pavadinimai, indeksas ir reikšmės:

6.41.1 lentelė
Dažniausiai naudojamos PSTATE vėliavėlės (bitai)
Simbolis Bit Tikslas
M 0-3 Režimas: dabartinis vykdymo privilegijų lygis (USR, SVC ir kt.).
T 4 Nykštis: nustatoma, jei aktyvus T32 (nykštis) instrukcijų rinkinys. Jei aišku, ARM instrukcijų rinkinys yra aktyvus. Vartotojo kodas gali nustatyti ir išvalyti šį bitą.
IR 9 Endianness: Nustačius šį bitą, įjungiamas „big-endian“ režimas. Jei aišku, mažo galo režimas yra aktyvus. Numatytasis yra mažojo galo režimas.
K 27 Kaupiamojo prisotinimo vėliavėlė: nustatoma, jei tam tikru operacijų serijos momentu įvyksta perpildymas arba prisotinimas
IN 28 Perpildymo vėliavėlė: nustatoma, jei operacijos rezultatas buvo pasirašytas perpildymas.
C 29 Vežimo vėliavėlė: nurodo, ar pridėjus buvo atliktas perkėlimas, ar atėmus pasiskolinimą.
SU 30 Nulinė vėliavėlė: nustatoma, jei operacijos rezultatas yra nulis.
N 31 Neigiama vėliavėlė: nustatoma, jei operacijos rezultatas yra neigiamas.

ARM-64 µP turi daug kitų registrų.

SIMD
SIMD reiškia Single Instruction, Multiple Data. Tai reiškia, kad viena asamblėjos kalbos instrukcija gali veikti kelis duomenis vienu metu viename mikroprocesoriuje. Yra trisdešimt du 128 bitų pločio registrai, skirti naudoti su SIMD ir slankiojo kablelio operacijomis.

6.42 Atminties atvaizdavimas
RAM ir DRAM yra laisvosios prieigos atmintis. DRAM veikia lėčiau nei RAM. DRAM yra pigesnis nei RAM. Jei atmintyje yra daugiau nei 32 gigabaitai (GB) nuolatinės DRAM, atsiras daugiau atminties valdymo problemų: 32 GB = 32 x 1024 x 1024 x 1024 baitai. Jei visa atmintis yra daug didesnė nei 32 GB, didesnė nei 32 GB DRAM turėtų būti sumaišyta su RAM, kad būtų geriau valdoma atmintis. Norėdami suprasti ARM-64 atminties žemėlapį, pirmiausia turėtumėte suprasti 32 bitų ARM centrinio procesoriaus (CPU) 4 GB atminties žemėlapį. CPU reiškia µP. 32 bitų kompiuteryje didžiausia adresuojama atminties vieta yra 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 bitų ARM atminties žemėlapis
32 bitų ARM atminties žemėlapis yra toks:

32 bitų kompiuteriui didžiausias visos atminties dydis yra 4 GB. Nuo 0 GB adreso iki 1 GB adreso yra ROM operacinė sistema, RAM ir įvesties / išvesties vietos. Visa ROM OS, RAM ir I/O adresų idėja yra panaši į Commodore-64 situaciją su galimu 6502 CPU. Commodore-64 OS ROM yra atminties vietos viršuje. Čia esanti ROM OS yra daug didesnė nei Commodore-64 ir yra visos atminties adresų erdvės pradžioje. Palyginus su kitais šiuolaikiniais kompiuteriais, ROM OS čia yra baigta ta prasme, kad ją galima palyginti su OS kiekiu jų standžiajame diske. Yra dvi pagrindinės priežastys, kodėl OS yra ROM integriniuose grandynuose: 1) ARM CPU dažniausiai naudojami mažuose įrenginiuose, pavyzdžiui, išmaniuosiuose telefonuose. Daugelis standžiųjų diskų yra didesni už išmaniuosius telefonus ir kitus mažus įrenginius, 2) dėl saugumo. Kai OS yra tik skaitymo atmintyje, įsilaužėliai jos negali sugadinti (dalies perrašyti). RAM sekcijos ir įvesties / išvesties skyriai taip pat yra labai dideli, palyginti su Commodore-64.

Kai maitinimas įjungiamas naudojant 32 bitų ROM OS, OS turi prasidėti (paleisti iš) 0x00000000 adreso arba 0xFFFF0000 adreso, jei įjungtas HiVEC. Taigi, kai maitinimas įjungiamas po atstatymo fazės, procesoriaus aparatinė įranga įkelia 0x00000000 arba 0xFFFF0000 į programų skaitiklį. „0x“ priešdėlis reiškia šešioliktainį. ARMv8 64 bitų procesorių įkrovos adresas yra apibrėžtas įgyvendinimas. Tačiau autorius pataria kompiuterių inžinieriui pradėti nuo 0x00000000 arba 0xFFFF0000, kad būtų galima suderinti atgal.

Nuo 1 GB iki 2 GB yra susieta įvestis / išvestis. Yra skirtumas tarp susieto įvesties / išvesties ir tik įvesties / išvesties, kurios yra nuo 0 GB iki 1 GB. Naudojant I/O, kiekvieno prievado adresas yra fiksuotas kaip ir Commodore-64. Naudojant susietą I/O, kiekvieno prievado adresas nebūtinai yra vienodas kiekvienai kompiuterio operacijai (dinaminis).

Nuo 2 GB iki 4 GB yra DRAM. Tai laukiama (arba įprasta) RAM. DRAM reiškia dinaminę RAM, o ne adreso keitimo pojūtis kompiuterio veikimo metu, o ta prasme, kad kiekvienos fizinės RAM ląstelės vertė turi būti atnaujinama kiekvieną kartą impulsuojant.

Pastaba :

  • Nuo 0x0000,0000 iki 0x0000, FFFF yra OS ROM.
  • Nuo 0x0001 0000 iki 0x3FFF, FFFF gali būti daugiau ROM, tada RAM ir šiek tiek įvesties / išvesties.
  • Nuo 0x4000 0000 iki 0x7FFF,FFFF leidžiama papildoma įvestis / išvestis ir (arba) susieta įvestis / išvestis.
  • Nuo 0x8000 0000 iki 0xFFFF, FFFF yra numatoma DRAM.

Tai reiškia, kad laukiama DRAM praktiškai neturi prasidėti nuo 2 GB atminties ribos. Kodėl programuotojas turėtų gerbti idealias ribas, kai nėra pakankamai fizinių RAM bankų, įdėtų į pagrindinę plokštę? Taip yra todėl, kad klientas neturi pakankamai pinigų visiems RAM bankams.

36 bitų ARM atminties žemėlapis
64 bitų ARM kompiuteryje visi 32 bitai naudojami visai atminčiai adresuoti. 64 bitų ARM kompiuteryje pirmieji 36 bitai gali būti naudojami visai atminčiai, kuri šiuo atveju yra 2 36 = 68 719 476 736 = 64 GB. Tai jau daug atminties. Įprastiems kompiuteriams šiandien nereikia tokio atminties kiekio. Tai dar nepasiekia maksimalaus atminties diapazono, kurį gali pasiekti 64 bitai. 36 bitų ARM procesoriaus atminties žemėlapis yra toks:

Nuo 0 GB adreso iki 4 GB adreso yra 32 bitų atminties žemėlapis. „Rezervuota“ reiškia, kad nenaudojama ir saugoma naudoti ateityje. Tai nebūtinai turi būti fizinės atminties bankai, kurie yra prijungti prie pagrindinės plokštės toje vietoje. Čia DRAM ir susietoji įvestis / išvestis turi tokias pačias reikšmes kaip ir 32 bitų atminties žemėlapis.

Praktikoje galima rasti tokią situaciją:

  • 0x1 0000 0000 – 0x3 FFFF FFFF; rezervuota. 12 GB adreso vietos rezervuota naudoti ateityje.
  • 0x4 0000 0000 – 0x7 FFFF FFFF; susietas I/O. Galima 16 GB adresų erdvės dinamiškai susietai I/O.
  • 0x8 0000 0000 – 0x8 7FFF FFFF FFFF; Skylė arba DRAM. 2 GB adresų erdvėje gali būti vienas iš šių dalykų:
    • Skylė, skirta įjungti DRAM įrenginio skaidymą (kaip aprašyta tolesnėje diskusijoje).
    • DRAM.
  • 0x8 8000 0000 – 0xF FFFF FFFF; DRAM. 30 GB adresų vietos DRAM.

Šis atminties žemėlapis yra 32 bitų adresų žemėlapio superrinkinys, kuriame papildoma vieta yra padalinta kaip 50 % DRAM (1/2) su pasirenkama skyle ir 25 % susietos įvesties/išvesties vietos bei rezervuotos vietos (1/4). ). Likę 25 % (1/4) skirti 32 bitų atminties žemėlapiui ½ + ¼ + ¼ = 1.

Pastaba : Nuo 32 bitų iki 360 bitų yra 4 bitų priedas prie svarbiausios 36 bitų pusės.

40 bitų atminties žemėlapis
40 bitų adresų žemėlapis yra 36 bitų adresų žemėlapio superrinkinys ir atitinka tą patį modelį: 50 % DRAM yra pasirenkamos skylės, 25 % susietos įvesties/išvesties vietos ir rezervuotos vietos, o likusi dalis 25 %. vietos ankstesniam atminties žemėlapiui (36 bitų). Atminties žemėlapio schema yra tokia:

Skylės dydis yra 544 – 512 = 32 GB. Praktikoje galima rasti tokią situaciją:

  • 0x10 0000 0000 – 0x3F FFFF FFFF; rezervuota. 192 GB adresų erdvės rezervuota naudoti ateityje.
  • 0x40 0000 0000 – 0x7F FFFF FFFF; kartografuotas. Įvestis / išvestis 256 GB adresų erdvės galima dinamiškai susieti įvesties / išvesties.
  • 0x80 0000 0000 – 0x87 FFFF FFFF; skylė arba DRAM. 32 GB adresų erdvėje gali būti vienas iš šių:
    • Skylė DRAM įrenginio skaidymui įjungti (kaip aprašyta tolesnėje diskusijoje)
    • DRAM
  • 0x88 0000 0000 – 0xFF FFFF FFFF; DRAM. 480 GB adresų vietos DRAM.

Pastaba : Nuo 36 bitų iki 40 bitų yra 4 bitų priedas prie svarbiausios 36 bitų pusės.

DRAM skylė
Daugiau nei 32 bitų atminties žemėlapyje tai yra arba DRAM skylė, arba DRAM tęsinys iš viršaus. Kai tai yra skylė, ją reikia vertinti taip: DRAM anga suteikia galimybę padalinti didelį DRAM įrenginį į kelis adresų diapazonus. Neprivaloma DRAM anga siūloma aukštesnės DRAM adreso ribos pradžioje. Tai įgalina supaprastintą dekodavimo schemą skaidant didelės talpos DRAM įrenginį žemesniame fiziškai adresuojamame regione.

Pavyzdžiui, 64 GB DRAM dalis yra padalinta į tris sritis, kurių adresų poslinkiai atliekami naudojant paprastą atėmimą didelės eilės adreso bituose taip:

6.42.1 lentelė
64 GB DRAM skaidymo su skylėmis pavyzdys
Fiziniai adresai SoC Užskaita Vidinis DRAM adresas
2 GB (32 bitų žemėlapis) 0x00 8000 0000 – 0x00 FFFF FFFF -0x00 8000 0000 0x00 0000 0000 – 0x00 7FFF FFF
30 GB baitų (36 bitų žemėlapis) 0x08 8000 0000 – 0x0F FFFF FFFF -0x08 0000 0000 0x00 8000 0000 – 0x07 FFFF FFFF
32 GB (40 bitų žemėlapis) 0x88 0000 0000 – 0x8F FFFF FFFF -0x80 0000 0000 0x08 0000 0000 – 0x0F FFFF FFFF

Siūlomi 44 bitų ir 48 bitų adresuotos atminties žemėlapiai ARM procesoriams
Tarkime, kad asmeniniame kompiuteryje yra 1024 GB (= 1 TB) atminties; tai per daug atminties. Taigi, 44 bitų ir 48 bitų adresuotos atminties žemėlapiai, skirti ARM CPU atitinkamai 16 TB ir 256 TB, yra tik pasiūlymai būsimiems kompiuterio poreikiams. Tiesą sakant, šie pasiūlymai ARM procesoriams atitinka tą patį atminties padalijimą pagal santykį, kaip ir ankstesniuose atminties žemėlapiuose. Tai yra: 50 % DRAM su pasirenkama skyle joje, 25 % susietos įvesties/išvesties vietos ir rezervuotos vietos, o likusi 25 % vietos – ankstesniam atminties žemėlapiui.

52 bitų, 56 bitų, 60 bitų ir 64 bitų adresų atminties žemėlapiai vis dar turi būti pasiūlyti ARM 64 bitams tolimoje ateityje. Jei mokslininkai tuo metu vis dar mano, kad visos atminties erdvės padalijimas santykiu 50:25:25 yra naudingas, jie išlaikys santykį.

Pastaba : SoC reiškia System-on-Chip, kuris reiškia µP lusto grandines, kurių kitu atveju ten nebūtų.

SRAM arba statinė laisvosios prieigos atmintis yra greitesnė nei tradicinė DRAM, tačiau jai reikia daugiau silicio. SRAM atnaujinti nereikia. Skaitytojas gali įsivaizduoti RAM kaip SRAM.

6.43 ARM 64 asamblėjos kalbos adresavimo režimai
ARM yra įkėlimo / saugojimo architektūra, kuri reikalauja, kad duomenys būtų įkelti iš atminties į procesoriaus registrą, kad būtų galima atlikti bet kokį apdorojimą, pvz., aritmetinę logiką. Tolesnė instrukcija išsaugo rezultatą atgal į atmintį. Nors tai gali atrodyti kaip žingsnis atgal nuo x86 ir jo vėlesnių x64 architektūrų, kurios viena komanda veikia tiesiogiai atmintyje esančius operandus, praktiškai įkėlimo/saugojimo metodas leidžia dideliu greičiu atlikti kelias nuoseklias operacijas. operandas, kai jis įkeliamas į vieną iš daugelio procesoriaus registrų.

ARM surinkimo kalbos formatas turi panašumų ir skirtumų su x64 (x86) serija.

  • Užskaita : Į bazinį registrą galima įtraukti pasirašytą konstantą. Poslinkis įvedamas kaip instrukcijos dalis. Pavyzdžiui: ldr x0, [rx, #10] įkelia r0 su žodžiu r1+10 adresu.
  • Registruotis : Registre saugomą nepasirašytą prieaugį galima pridėti prie pagrindinio registro reikšmės arba iš jos atimti. Pavyzdžiui: ldr r0, [x1, x2] įkelia r0 su žodžiu x1+x2 adresu. Bet kuris iš registrų gali būti laikomas baziniu registru.
  • Padidintas registras : Registro prieaugis perkeliamas į kairę arba į dešinę tam tikru bitų pozicijų skaičiumi, prieš jį pridedamas prie bazinio registro reikšmės arba atimamas iš jos. Pavyzdžiui: ldr x0, [x1, x2, lsl #3] įkelia r0 su žodžiu r1+(r2×8) adresu. Poslinkis gali būti loginis poslinkis į kairę arba į dešinę (lsl arba lsr), įterpiantis nulį bitų į atlaisvintas bitų vietas, arba aritmetinis poslinkis į dešinę (asr), kuris atkartoja ženklo bitą atlaisvintose vietose.

Kai naudojami du operandai, paskirties vieta yra prieš (kairėje) šaltinį (yra keletas išimčių). ARM surinkimo kalbos opkoduose didžiosios ir mažosios raidės neskiriamos.

Greitas ARM64 adresavimo režimas
Pavyzdys:

mov r0, #0xFF000000 ; Įkelkite 32 bitų reikšmę FF000000h į r0

Dešimtainė reikšmė yra be 0x, bet prieš ją vis tiek yra #.

Registruotis tiesiogiai
Pavyzdys:

mov x0, x1 ; Nukopijuokite x1 į x0

Registruokis Netiesioginis
Pavyzdys:

str x0, [x3] ; Išsaugokite x0 adresu x3

Užregistruokite netiesioginį su kompensavimu
Pavyzdžiai:

ldr x0, [x1, #32] ; Įkelkite r0 reikšmę adresu [r1+32]; r1 yra bazinis registras
str x0, [x1, #4] ; Išsaugokite r0 adresu [r1+4]; r1 yra bazinis registras; skaičiai yra 10 baziniai

Netiesioginis registravimas su poslinkiu (iš anksto padidintas)
Pavyzdžiai:

ldr x0, [x1, #32]! ; Įkelkite r0 naudodami [r1+32] ir atnaujinkite r1 į (r1+32)
str x0, [x1, #4]! ; Išsaugokite r0 į [r1+4] ir atnaujinkite r1 į (r1+4)

Atkreipkite dėmesį į „! simbolis.

Netiesioginis registravimas su poslinkiu (padidintas po to)
Pavyzdžiai:

ldr x0, [x1], #32 ; Įkelkite [x1] į x0, tada atnaujinkite x1 į (x1+32)
str x0, [x1], #4 ; Išsaugokite x0 į [x1], tada atnaujinkite x1 į (x1+4)

Netiesioginis dvigubas registras
Operando adresas yra bazinio registro ir prieaugio registro suma. Registrų pavadinimai pateikiami laužtiniais skliaustais.
Pavyzdžiai:

ldr x0, [x1, x2] ; Įkelti x0 su [x1+x2]
str x0, [rx, x2] ; Išsaugoti nuo x0 iki [x1+x2]

Santykinio adresavimo režimas
Santykinio adresavimo režimu veiksminga instrukcija yra kita programa skaitiklyje ir indeksas. Indeksas gali būti teigiamas arba neigiamas.
Pavyzdys:

ldr x0, [pc, #24]

Tai reiškia apkrovos registrą X0 su žodžiu, kurį nurodo kompiuterio turinys, plius 24.

6.44 Kai kurios dažniausiai naudojamos ARM 64 instrukcijos
Čia yra dažniausiai naudojamos instrukcijos:

6.45 Kilpos

Iliustracija
Šis kodas nuolat prideda X10 registro reikšmę prie reikšmės X9, kol reikšmė X8 bus lygi nuliui. Tarkime, kad visos reikšmės yra sveikieji skaičiai. X8 reikšmė kiekvienoje iteracijoje atimama iš 1:

kilpa:
CBZ X8, praleiskite
PRIDĖTI X9, X9, X10 ; pirmasis X9 yra paskirties vieta, o antrasis X9 yra šaltinis
SUB X8, X8, #1 ; pirmasis X8 yra paskirties vieta, o antrasis X8 yra šaltinis
B kilpa
praleisti:

Kaip ir 6502 µP ir X64 µP, ARM 64 µP etiketė prasideda eilutės pradžioje. Likusios instrukcijos prasideda kai kuriais tarpais po eilutės pradžios. Naudojant x64 ir ARM 64, po etiketės yra dvitaškis ir nauja eilutė. Naudojant 6502, etiketėje po tarpo yra nurodymas. Ankstesniame kode pirmoji instrukcija, kuri yra „CBZ X8, praleisti“, reiškia, kad jei X8 reikšmė yra nulis, tęskite nuo etiketės „praleisti:“, praleisdami tarpines instrukcijas ir tęsdami likusias toliau pateiktas instrukcijas. 'praleisti:'. 'B kilpa' yra besąlyginis šuolis į 'kilpos' etiketę. Vietoj „kilpos“ gali būti naudojamas bet koks kitas etiketės pavadinimas.

Taigi, kaip ir su 6502 µP, naudokite šakos instrukcijas, kad sukurtumėte kilpą su ARM 64.

6.46 ARM 64 įvestis/išvestis
Visi ARM periferiniai įrenginiai (vidiniai prievadai) yra susieti su atmintimi. Tai reiškia, kad programavimo sąsaja yra į atmintį nukreiptų registrų (vidinių prievadų) rinkinys. Tokio registro adresas yra poslinkis nuo konkretaus atminties bazės adreso. Tai panašu į tai, kaip 6502 atlieka įvestį / išvestį. ARM neturi atskiros I/O adresų erdvės parinkties.

6.47 ARM 64 krūva
ARM 64 atmintyje (RAM) yra krūva, panašiai kaip 6502 ir x64. Tačiau naudojant ARM64 nėra „push“ ar „pop opcode“. ARM 64 krūva taip pat didėja žemyn. Adresas dėklo žymeklyje rodomas iškart po paskutinės į krūvą įdėtos reikšmės paskutinio baito.

Priežastis, kodėl ARM64 nėra bendro pop arba push opcode, yra ta, kad ARM 64 valdo savo krūvą 16 baitų iš eilės grupėmis. Tačiau reikšmės egzistuoja baitų grupėse iš vieno baito, dviejų baitų, keturių baitų ir 8 baitų. Taigi, vieną reikšmę galima įdėti į krūvą, o likusios vietos (baitų vietos), kad būtų 16 baitų, yra užpildytos netikrais baitais. Tai turi atminties švaistymo trūkumą. Geresnis sprendimas yra užpildyti 16 baitų vietą mažesnėmis reikšmėmis ir turėti tam tikrą programuotojo parašytą kodą, kuris sektų, iš kur gaunamos reikšmės 16 baitų vietoje (registrai). Šis papildomas kodas taip pat reikalingas norint grąžinti vertes. Alternatyva yra užpildyti du 8 baitų bendrosios paskirties registrus skirtingomis reikšmėmis, o tada siųsti dviejų 8 baitų registrų turinį į krūvą. Čia vis tiek reikia papildomo kodo, kad būtų galima stebėti konkrečias mažas reikšmes, kurios patenka į krūvą ir palieka ją.

Šis kodas saugo keturis 4 baitų duomenis į krūvą:

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

Pirmieji keturi registrų baitai (w) – x0, x1, x2 ir x3 – siunčiami į 16 iš eilės einančių baitų vietas krūvoje. Atkreipkite dėmesį į „str“, o ne „push“ naudojimą. Atkreipkite dėmesį į šauktuką kiekvienos instrukcijos pabaigoje. Kadangi atminties krūva auga žemyn, pirmoji keturių baitų reikšmė prasideda nuo pozicijos, kuri yra minus keturiais baitais žemiau ankstesnės krūvos rodyklės padėties. Likusios keturių baitų reikšmės seka, mažėja. Šis kodo segmentas atliks teisingą (ir eilės tvarka) keturių baitų išspaudimo atitikmenį:

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

Atkreipkite dėmesį, kad vietoj pop naudojamas ldr opcode. Taip pat atkreipkite dėmesį, kad čia nenaudojamas šauktukas.

Visi X0 (8 baitai) ir X1 (8 baitai) baitai gali būti siunčiami į 16 baitų vietą krūvoje taip:

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

Tokiu atveju x2 (w2) ir x3 (w3) registrai nereikalingi. Visi norimi baitai yra X0 ir X2 registruose. Atkreipkite dėmesį į stp opkodą, skirtą registro turinio poroms saugoti RAM. Taip pat atkreipkite dėmesį į šauktuko simbolį. Pop atitikmuo yra:

ldp x0, x1, [sp], #0

Šioje instrukcijoje nėra šauktuko. Atkreipkite dėmesį į opkodą LDP, o ne LDR, kad įkeltumėte dvi iš eilės duomenų vietas iš atminties į du µP registrus. Taip pat atminkite, kad kopijavimas iš atminties į µP registrą įkeliamas, jo nereikia painioti su failo įkėlimu iš disko į RAM, o kopijavimas iš µP registro į RAM yra saugomas.

6.48 Paprogramė
Paprogramė yra kodo blokas, kuris atlieka užduotį, pasirinktinai remdamasis kai kuriais argumentais ir pasirinktinai grąžina rezultatą. Pagal susitarimą R0–R3 registrai (keturi registrai) naudojami argumentams (parametrams) perduoti paprogramei, o R0 – rezultatui grąžinti skambinančiajam. Paprogramė, kuriai reikia daugiau nei 4 įvesčių, naudoja krūvą papildomoms įvestims. Norėdami iškviesti paprogramę, naudokite nuorodą arba sąlyginės šakos nurodymą. Nuorodos instrukcijos sintaksė yra tokia:

BL etiketė

Kur BL yra operacijos kodas, o etiketė reiškia paprogramės pradžią (adresą). Ši šaka yra besąlyginė, pirmyn arba atgal 128 MB. Sąlyginės šakos instrukcijos sintaksė yra tokia:

B.cond etiketė

Kur cond yra sąlyga, pvz., eq (lygus) arba ne (nelygus). Šioje programoje yra paprogramė doadd, kuri prideda dviejų argumentų reikšmes ir pateikia rezultatą R0:

AREA subout, CODE, READONLY ; Pavadinkite šį kodo bloką
ĮĖJIMAS ; Pažymėkite pirmą nurodymą vykdyti
paleisti MOV r0, #10 ; Nustatykite parametrus
MOV r1, Nr. 3
BL doadd ; Skambinimo paprogramė
sustabdyti MOV r0, #0x18 ; angel_SWIreason_ReportException
LDR r1, =0x20026 ; ADP_Stopped_ApplicationExit
SVC #0x123456 ; ARM pusiau priegloba (anksčiau SWI)
doadd ADD r0, r0, r1 ; Paprogramės kodas
BX lr ; Grįžimas iš paprogramės
;
GALAS ; Pažymėkite failo pabaigą

Pridedami skaičiai yra dešimtainiai 10 ir dešimtainiai 3. Pirmosios dvi eilutės šiame kodo (programos) bloke bus paaiškintos vėliau. Kitos trys eilutės siunčia 10 į R0 registrą ir 3 į R1 registrą, taip pat iškviečia paprogramę doadd. „doadd“ yra etiketė, kurioje yra paprogramės pradžios adresas.

Paprogramė susideda tik iš dviejų eilučių. Pirmoje eilutėje R0 turinys 3 pridedamas prie R0 turinio 10, todėl R0 gaunamas rezultatas 13. Antroji eilutė su BX opcode ir LR operandu grįžta iš paprogramės į skambinančiojo kodą.

TEISINGAI
RET operacinės kodas ARM 64 vis dar susijęs su paprograme, tačiau veikia kitaip nei RTS 6502 arba RET x64, arba „BX LR“ derinys ARM 64. ARM 64 RET sintaksė yra tokia:

TASIUS {Xn}

Ši instrukcija suteikia programai galimybę tęsti paprogramę, kuri nėra skambinančiojo paprogramė, arba tiesiog tęsti su kita instrukcija ir jos kodo segmentu. Xn yra bendrosios paskirties registras, kuriame yra adresas, kuriuo programa turėtų tęstis. Ši instrukcija šakojasi besąlygiškai. Numatytasis turinys yra X30, jei Xn nenurodytas.

Procedūros iškvietimo standartas
Jei programuotojas nori, kad jo kodas sąveikautų su kodu, kurį parašė kažkas kitas, arba su kodu, kurį sukūrė kompiliatorius, programuotojas turi susitarti su asmeniu arba kompiliatoriaus kūrėju dėl registro naudojimo taisyklių. ARM architektūrai šios taisyklės vadinamos Procedure Call Standard arba PCS. Tai yra dviejų ar trijų šalių susitarimai. PCS nurodo šiuos dalykus:

  • Kurie µP registrai naudojami argumentams perduoti į funkciją (paprogramę)
  • Kurie µP registrai naudojami norint grąžinti rezultatą į funkciją, kuri iškviečia, kuri yra žinoma kaip skambinantysis
  • Kuris µP užregistruoja iškviečiamą funkciją, kuri yra žinoma kaip iškviestasis asmuo, gali sugadinti
  • Kuris µP užregistruoja skambinamąjį, negali sugadinti

6.49 Pertraukia
ARM procesoriui yra dviejų tipų pertraukimo valdiklio grandinės:

  • Standartinis pertraukimų valdiklis: pertraukimų valdiklis nustato, kurį įrenginį reikia aptarnauti, nuskaitydamas įrenginio bitų schemų registrą pertraukimo valdiklyje.
  • Vector Interrupt Controller (VIC): teikia pirmenybę pertraukimams ir supaprastina nustatymą, kuris įrenginys sukėlė pertraukimą. Susiejęs prioritetą ir tvarkyklės adresą su kiekvienu pertraukimu, VIC tik patvirtina pertraukimo signalą procesoriui, jei naujo pertraukimo prioritetas yra didesnis nei šiuo metu vykdomos pertraukimo tvarkyklės.

Pastaba : Išimtis yra klaida. Išsami informacija apie 32 bitų ARM kompiuterio vektorinio pertraukimo valdiklį yra tokia (64 bitai yra panašūs):

6.49.1 lentelė
ARM vektoriaus išimtis / pertraukimas 32 bitų kompiuteriui
Išimtis / pertraukimas Trumpa ranka Adresas Aukštas adresas
Nustatyti iš naujo RESET 0x00000000 0xffff0000
Neapibrėžta instrukcija UNDEF 0x00000004 0xffff0004
Programinės įrangos pertraukimas SWI 0x00000008 0xffff0008
Išankstinis atšaukimas PABT 0x0000000C 0xffff000C
Aborto data DABT 0x00000010 0xffff0010
Rezervuota 0x00000014 0xffff0014
Pertraukimo užklausa IRQ 0x00000018 0xffff0018
Greito pertraukimo užklausa FIQ 0x0000001C 0xffff001C

Tai atrodo kaip 6502 architektūros išdėstymas NMI , BR , ir IRQ gali turėti rodykles nuliniame puslapyje, o atitinkamos procedūros yra aukštai atmintyje (ROM OS). Trumpi ankstesnės lentelės eilučių aprašymai yra tokie:

RESET
Tai atsitinka, kai procesorius įsijungia. Jis inicijuoja sistemą ir nustato krūvas skirtingiems procesoriaus režimams. Tai didžiausio prioriteto išimtis. Įėjus į atstatymo tvarkyklę, CPSR veikia SVC režimu, o IRQ ir FIQ bitai nustatomi į 1, užmaskuojant bet kokius pertraukimus.

ABOTO DATA
Antras pagal prioritetą. Taip atsitinka, kai bandome nuskaityti / įrašyti netinkamą adresą arba pasiekti netinkamą prieigos leidimą. Įėjus į duomenų nutraukimo tvarkyklę, IRQ bus išjungtas (1 bitų rinkinys) ir įjungtas FIQ. IRQ yra užmaskuoti, bet FIQ laikomi neužmaskuoti.

FIQ
Aukščiausio prioriteto pertraukimas, IRQ ir FIQ, išjungiami, kol nebus tvarkomas FIQ.

IRQ
Aukšto prioriteto pertraukimas, IRQ tvarkytuvas, įvedamas tik tuo atveju, jei nėra vykdomo FIQ ir duomenų nutraukimo.

Išankstinis parengimas nutraukti
Tai panašu į duomenų nutraukimą, bet nutinka, kai nepavyksta gauti adreso. Įėjus į tvarkyklę, IRQ išjungiami, tačiau FIQ ​​lieka įgalinti ir gali įvykti per išankstinio gavimo nutraukimą.

SWI
Programinės įrangos pertraukimo (SWI) išimtis įvyksta, kai vykdoma SWI instrukcija ir nėra pažymėtos jokios kitos aukštesnio prioriteto išimtys.

Neapibrėžta instrukcija
Neapibrėžtos instrukcijos išimtis atsiranda, kai komanda, kurios nėra ARM arba Thumb komandų rinkinyje, pasiekia konvejerio vykdymo stadiją ir nė viena iš kitų išimčių nėra pažymėta. Tai yra toks pat prioritetas kaip ir SWI, koks gali atsitikti vienu metu. Tai reiškia, kad vykdoma instrukcija negali būti ir SWI, ir neapibrėžta instrukcija tuo pačiu metu.

ARM išimties tvarkymas
Kai įvyksta išimtis, įvyksta šie įvykiai:

  • Išsaugokite CPSR išimties režimo SPSR.
  • Kompiuteris saugomas išimties režimo LR.
  • Nuorodų registras nustatomas konkrečiu adresu, remiantis esama instrukcija. Pavyzdžiui: ISR atveju LR = paskutinė įvykdyta instrukcija + 8.
  • Atnaujinkite CPSR apie išimtį.
  • Nustatykite kompiuterį į išimčių tvarkyklės adresą.

6.5 Instrukcijos ir duomenys

Duomenys reiškia kintamuosius (etiketes su jų reikšmėmis) ir masyvus bei kitas struktūras, panašias į masyvą. Eilutė yra tarsi simbolių masyvas. Sveikųjų skaičių masyvas matomas viename iš ankstesnių skyrių. Instrukcijose nurodomi operatyviniai kodai ir jų operandai. Programą galima parašyti naudojant operacijų kodus ir duomenis, sumaišytus vienoje tęstinėje atminties dalyje. Šis metodas turi trūkumų, bet nerekomenduojamas.

Pirmiausia programa turi būti parašyta su instrukcijomis, o po to – duomenimis (daugiskaita nuo atskaitos yra duomenys). Instrukcijų ir duomenų atskyrimas gali būti vos keli baitai. Programai ir instrukcijos, ir duomenys gali būti viename arba dviejuose atskiruose atminties skyriuose.

6.6 Harvardo architektūra

Vienas iš ankstyvųjų kompiuterių vadinamas Harvard Mark I (1944). Griežta Harvardo architektūra naudoja vieną adresų erdvę programos instrukcijoms ir skirtingą atskirą adresų erdvę duomenims. Tai reiškia, kad yra du atskiri prisiminimai. Toliau parodyta architektūra:


6.71 pav. Harvardo architektūra

Valdymo blokas atlieka instrukcijų dekodavimą. Aritmetinis loginis vienetas (ALU) atlieka aritmetines operacijas su kombinuota logika (vartai). ALU taip pat atlieka logines operacijas (pvz., perjungia).

Naudojant 6502 mikroprocesorių, instrukcija pirmiausia siunčiama mikroprocesoriui (valdymo blokui), o po to nulinis taškas (duomenų vienaskaita) patenka į µP registrą, kol jie sąveikauja. Tam reikia bent dviejų laikrodžio impulsų ir tai nėra vienalaikė prieiga prie instrukcijos ir atskaitos taško. Kita vertus, Harvardo architektūra suteikia galimybę vienu metu pasiekti instrukcijas ir duomenis, kai tiek nurodymai, tiek atskaitos taškai įvedami į µP tuo pačiu metu (operacinis kodas į valdymo bloką ir atskaitos taškas į µP registrą), išsaugant bent vieną laikrodžio impulsą. Tai paralelizmo forma. Ši lygiagretumo forma naudojama šiuolaikinių pagrindinių plokščių aparatūros talpykloje (žr. tolesnę diskusiją).

6.7 Talpyklos atmintis

Laikinoji atmintis (RAM) yra didelės spartos atminties sritis (palyginti su pagrindinės atminties greičiu), kurioje laikinai saugomos programos instrukcijos arba duomenys, kad būtų galima naudoti ateityje. Laikinoji atmintis veikia greičiau nei pagrindinė atmintis. Paprastai šios instrukcijos arba duomenų elementai nuskaitomi iš naujausios pagrindinės atminties ir greičiausiai jų prireiks netrukus. Pagrindinis laikinosios atminties tikslas yra padidinti pakartotinės prieigos prie tų pačių pagrindinių atminties vietų greitį. Kad būtų veiksminga, prieiga prie talpyklos elementų turi būti žymiai greitesnė nei prieiga prie pirminio instrukcijų ar duomenų šaltinio, vadinamo Backing Store.

Kai naudojamas kaupimas talpykloje, kiekvienas bandymas pasiekti pagrindinę atminties vietą prasideda paieška talpykloje. Jei pageidaujamas elementas yra, procesorius nedelsdamas jį nuskaito ir naudoja. Tai vadinama talpyklos smūgiu. Jei paieška talpykloje nesėkminga (trūksta talpyklos), instrukcija arba duomenų elementas turi būti nuskaitytas iš atsarginės saugyklos (pagrindinės atminties). Gaunant prašomą elementą, jo kopija pridedama prie talpyklos, kad ją būtų galima naudoti artimiausiu metu.

Atminties valdymo blokas
Atminties valdymo blokas (MMU) yra grandinė, valdanti pagrindinę atmintį ir susijusius atminties registrus pagrindinėje plokštėje. Anksčiau tai buvo atskira integrinė grandinė pagrindinėje plokštėje; tačiau šiandien jis paprastai yra mikroprocesoriaus dalis. MMU taip pat turėtų valdyti talpyklą (grandinę), kuri šiandien taip pat yra mikroprocesoriaus dalis. Talpyklos grandinė praeityje buvo atskira integrinė grandinė.

Statinė RAM
Statinė RAM (SRAM) turi daug greitesnį prieigos laiką nei DRAM, nors ir žymiai sudėtingesnės grandinės sąskaita. SRAM bitų ląstelės užima daug daugiau vietos integruotoje grandinėje nei DRAM įrenginio, galinčio saugoti lygiavertį duomenų kiekį, ląstelės. Pagrindinę atmintį (RAM) paprastai sudaro DRAM (dinaminė RAM).

Laikinoji atmintis pagerina kompiuterio našumą, nes daugelis algoritmų, kuriuos vykdo operacinės sistemos ir programos, rodo atskaitos vietovę. Nuorodos vieta reiškia pakartotinį duomenų, kurie buvo pasiekti neseniai, naudojimą. Tai vadinama laikina vietovė. Šiuolaikinėje pagrindinėje plokštėje talpyklos atmintis yra toje pačioje integrinėje grandinėje kaip ir mikroprocesorius. Pagrindinė atmintis (DRAM) yra toli ir pasiekiama per autobusus. Referencinė vietovė taip pat reiškia erdvinę vietovę. Erdvinė vietovė yra susijusi su didesniu duomenų prieigos greičiu dėl fizinio artumo.

Paprastai talpyklos atminties sritys yra mažos (baitų vietų skaičiumi), palyginti su pagrindine saugykla (pagrindine atmintimi). Laikinosios atminties įrenginiai yra sukurti maksimaliam greičiui, o tai paprastai reiškia, kad jie yra sudėtingesni ir brangesni už bitą nei duomenų saugojimo technologija, kuri naudojama atsarginėje saugykloje. Dėl riboto dydžio talpyklos įrenginiai greitai prisipildo. Kai talpykloje nėra vietos naujam įrašui saugoti, senesnį įrašą reikia atmesti. Talpyklos valdiklis naudoja talpyklos keitimo strategiją, kad pasirinktų, kuris talpyklos įrašas bus perrašytas nauju įrašu.

Mikroprocesoriaus talpyklos atminties tikslas yra maksimaliai padidinti talpyklos įvykių procentą laikui bėgant, taip užtikrinant didžiausią nuolatinį komandų vykdymo greitį. Norint pasiekti šį tikslą, talpyklos logika turi nustatyti, kurios instrukcijos ir duomenys bus patalpinti į talpyklą ir saugomi artimiausiam naudojimui.

Procesoriaus talpyklos logika neužtikrina, kad talpykloje esantis duomenų elementas bus kada nors vėl naudojamas, kai jis bus įdėtas į talpyklą.

Talpyklos logika remiasi tikimybe, kad dėl laiko (pasikartojantis laikui bėgant) ir erdvinės (erdvės) lokalumo labai didelė tikimybė, kad talpykloje saugomi duomenys bus pasiekti artimiausiu metu. Praktiškai naudojant šiuolaikinius procesorius, talpyklos smūgiai paprastai įvyksta 95–97 procentuose atminties prieigos. Kadangi laikinosios atminties delsa yra nedidelė DRAM delsos dalis, didelis talpyklos pataikymo dažnis žymiai pagerina našumą, palyginti su dizainu be talpyklos.

Tam tikras lygiagretumas su talpykla
Kaip minėta anksčiau, geros programos atmintyje instrukcijos yra atskirtos nuo duomenų. Kai kuriose talpyklos sistemose talpyklos grandinė yra procesoriaus „kairėje“, o kita talpyklos grandinė yra procesoriaus „dešinėje“. Kairėje talpykloje tvarkomos programos (arba programos) instrukcijos, o dešinėje – tos pačios programos (arba tos pačios programos) duomenys. Tai leidžia geriau padidinti greitį.

6.8 Procesai ir gijos

Tiek CISC, tiek RISC kompiuteriai turi procesus. Procesas yra programinėje įrangoje. Vykdoma (vykdoma) programa yra procesas. Operacinė sistema turi savo programas. Kol kompiuteris veikia, veikia ir operacinės sistemos programos, leidžiančios kompiuteriui veikti. Tai operacinės sistemos procesai. Vartotojas arba programuotojas gali rašyti savo programas. Kai veikia vartotojo programa, tai yra procesas. Nesvarbu, ar programa parašyta asamblėjos kalba, ar aukšto lygio kalba, pvz., C ar C++. Visus procesus (vartotojo ar OS) valdo kitas procesas, vadinamas „planuotoju“.

Siūlas yra tarsi procesui priklausantis poprocesas. Procesas gali prasidėti ir suskaidyti į gijas, o tada vis tiek tęsiasi kaip vienas procesas. Procesas be gijų gali būti laikomas pagrindine gija. Procesus ir jų gijas valdo tas pats planuoklis. Pats planuoklis yra programa, kai ji yra OS disko rezidentė. Kai veikia atmintyje, planuoklis yra procesas.

6.9 Daugiafunkcis apdorojimas

Gijos valdomos beveik kaip procesai. Daugiafunkcis apdorojimas reiškia, kad vienu metu vykdomas daugiau nei vienas procesas. Yra kompiuterių, kuriuose yra tik vienas mikroprocesorius. Yra kompiuterių, kuriuose yra daugiau nei vienas mikroprocesorius. Naudojant vieną mikroprocesorių, procesai ir (arba) gijos naudoja tą patį mikroprocesorių interleaving (arba laiko pjaustymo) būdu. Tai reiškia, kad procesas naudoja procesorių ir sustoja nebaigęs. Kitas procesas arba gija naudoja procesorių ir sustoja nebaigę. Tada kitas procesas arba gija naudoja mikroprocesorių ir sustoja nebaigus. Tai tęsiasi tol, kol visi procesai ir gijos, kurias į eilę įtraukė planuoklis, turės procesoriaus dalį. Tai vadinama vienu metu vykstančiu kelių apdorojimu.

Kai yra daugiau nei vienas mikroprocesorius, yra lygiagretus daugiaprocesis, o ne lygiagrečiai. Tokiu atveju kiekvienas procesorius vykdo tam tikrą procesą arba giją, kuri skiriasi nuo to, ką veikia kitas procesorius. Visi tos pačios pagrindinės plokštės procesoriai tuo pačiu metu vykdo skirtingus procesus ir (arba) skirtingas gijas lygiagrečiame daugiaprocesyje. Lygiagrečio kelių apdorojimo procesus ir gijas vis dar valdo planuotojas. Lygiagretus kelių apdorojimas yra greitesnis nei lygiagretus kelių apdorojimas.

Šiuo metu skaitytojui gali kilti klausimas, kaip lygiagretus apdorojimas yra greitesnis nei vienu metu. Taip yra todėl, kad procesoriai dalijasi (turi naudoti skirtingu laiku) tą pačią atmintį ir įvesties/išvesties prievadus. Na, o naudojant talpyklą bendras pagrindinės plokštės veikimas yra greitesnis.

6.10 Puslapis

Atminties valdymo blokas (MMU) yra grandinė, kuri yra arti mikroprocesoriaus arba mikroprocesoriaus mikroschemoje. Jis tvarko atminties žemėlapį arba ieškos ir kitas atminties problemas. Nei 6502 µP, nei Commodore-64 kompiuteris per se neturi MMU (nors Commodore-64 vis dar yra tam tikras atminties valdymas). Commodore-64 tvarko atmintį puslapiuose, kur kiekvienas puslapis yra 256 10 baitų ilgio (100 16 baitų ilgio). Jai nebuvo privaloma tvarkyti atmintį puslapiu. Jis vis tiek gali turėti tik atminties žemėlapį ir tada programas, kurios tiesiog tilptų į skirtingas paskirtas sritis. Na, puslapių paieška yra vienas iš būdų efektyviai naudoti atmintį neturint daug atminties skyrių, kuriuose negali būti duomenų ar programos.

Kompiuterio x86 386 architektūra buvo išleista 1985 m. Adresų magistralė yra 32 bitų pločio. Taigi iš viso 2 32 = galima 4 294 967 296 adresų erdvė. Ši adresų erdvė padalinta į 1 048 576 puslapius = 1 024 KB puslapių. Su tokiu puslapių skaičiumi vieną puslapį sudaro 4 096 baitai = 4 KB. Šioje lentelėje rodomi x86 32 bitų architektūros fizinių adresų puslapiai:

6.10.1 lentelė
Fiziniai adresuojami puslapiai, skirti x86 architektūrai
Bazė 16 adresų Puslapiai 10 bazinių adresų
FFFFF000 – FFFFFFFF 1 048 575 psl 4 294 963 200 – 4 294 967 295
FFFFE000 – FFFFEFFF 1 044 479 psl 4 294 959 104 – 4 294 963 199
FFFFD000 – FFFFDFFF 1 040 383 psl 4 294 955 008 – 4 294 959 103
|
|
|
|
|
|
|
|
|
00002000 – 00002FFF 2 puslapis 8 192 – 12 288
00001000 – 00001FFF Puslapis 1 4 096 – 8 191
00000000 – 00000FFF 0 puslapis 0 – 4 095

Šiandien programą sudaro daugiau nei viena programa. Viena programa gali užimti mažiau nei puslapį (mažiau nei 4096) arba du ar daugiau puslapių. Taigi, programa gali užimti vieną ar daugiau puslapių, kurių kiekvienas puslapis yra 4096 baitų ilgio. Skirtingi žmonės gali parašyti prašymą, kiekvienam priskiriant vieną ar daugiau puslapių.

Atkreipkite dėmesį, kad 0 puslapis yra nuo 00000000H iki 00000FFF
1 puslapis yra nuo 00001000H iki 00001FFFH, 2 puslapis yra nuo 00002000 H – 00002FFF H , ir taip toliau. 32 bitų kompiuteryje procesoriuje yra du 32 bitų registrai, skirti fiziniam puslapių adresui: vienas baziniam adresui, o kitas indekso adresui. Pavyzdžiui, norint pasiekti 2 puslapio baitų vietas, bazinio adreso registras turi būti 00002 H kuris yra pirmieji 20 bitų (iš kairės) 2 puslapio pradžios adresams. Likę bitai yra 000 diapazone H į FFF H yra registre, vadinamame „indeksų registru“. Taigi, visus puslapio baitus galima pasiekti tiesiog padidinus indekso registro turinį nuo 000 H į FFF H . Indekso registro turinys pridedamas prie turinio, kuris nesikeičia pagrindiniame registre, kad būtų gautas galiojantis adresas. Ši rodyklės adresų schema tinka ir kitiems puslapiams.

Tačiau taip tikrai nėra taip, kaip kiekvienam puslapiui parašyta asamblėjos kalbos programa. Kiekvienam puslapiui programuotojas įrašo kodą, pradedant nuo 000 puslapio H į puslapį FFF H . Kadangi kodas skirtinguose puslapiuose yra sujungtas, kompiliatorius naudoja indekso adresavimą, kad sujungtų visus susijusius adresus skirtinguose puslapiuose. Pavyzdžiui, darant prielaidą, kad 0, 1 ir 2 puslapis yra skirti vienai programai ir kiekvienas turi 555 H adresus, kurie yra sujungti vienas su kitu, kompiliatorius sukompiliuoja taip, kad kai 555 H 0 puslapio reikia pasiekti, 00000 H bus baziniame registre ir 555 H bus indeksų registre. Kai 555 m H iš 1 puslapio reikia pasiekti, 00001 H bus baziniame registre ir 555 H bus indeksų registre. Kai 555 m H galima pasiekti 2 puslapį, 00002 H bus baziniame registre, o 555H – indeksų registre. Tai įmanoma, nes adresus galima identifikuoti naudojant etiketes (kintamuosius). Skirtingi programuotojai turi susitarti dėl etikečių pavadinimų, kurie bus naudojami skirtingiems prisijungimo adresams.

Puslapio virtualioji atmintis
Puslapio paieška, kaip aprašyta anksčiau, gali būti modifikuojama, siekiant padidinti atminties dydį, naudojant metodą, vadinamą „Puslapio virtualia atmintimi“. Darant prielaidą, kad visi fizinės atminties puslapiai, kaip aprašyta anksčiau, turi kažką (instrukcijas ir duomenis), ne visi puslapiai šiuo metu yra aktyvūs. Puslapiai, kurie šiuo metu neaktyvūs, siunčiami į standųjį diską ir pakeičiami puslapiais iš standžiojo disko, kuriuos reikia paleisti. Tokiu būdu padidėja atminties dydis. Kai kompiuteris ir toliau veikia, puslapiai, kurie tampa neaktyvūs, pakeičiami kietajame diske esančiais puslapiais, kurie vis dar gali būti puslapiai, kurie buvo išsiųsti iš atminties į diską. Visa tai atlieka atminties valdymo blokas (MMU).

6.11 Problemos

Prieš pereinant prie kito skyriaus, skaitytojui patariama išspręsti visas skyriaus problemas.

1) Pateikite CISC ir RISC kompiuterių architektūros panašumus ir skirtumus. Nurodykite po vieną SISC ir RISC kompiuterio pavyzdį.

2) a) Kokie yra šie CISC kompiuterio pavadinimai pagal bitus: baitas, žodis, dvigubas žodis, keturvardis ir dvigubas keturvardis.
b) Kokie yra šie RISC kompiuterio pavadinimai pagal bitus: baitas, pusžodis, žodis ir dvigubas žodis.
c) Taip arba Ne. Ar dvigubas ir keturžodis reiškia tuos pačius dalykus ir CISC, ir RISC architektūrose?

3 a) x64 atveju asamblėjos kalbos instrukcijų baitų skaičius svyruoja nuo ko iki kokio?
b) Ar baitų skaičius visose ARM 64 asamblėjos kalbos instrukcijose yra fiksuotas? Jei taip, koks yra visų instrukcijų baitų skaičius?

4) Išvardykite dažniausiai naudojamas asamblėjos kalbos instrukcijas x64 ir jų reikšmes.

5) Išvardykite dažniausiai naudojamas ARM 64 asamblėjos kalbos instrukcijas ir jų reikšmes.

6) Nubraižykite pažymėtą senojo kompiuterio Harvardo architektūros blokinę schemą. Paaiškinkite, kaip jos instrukcijos ir duomenų funkcijos naudojamos šiuolaikinių kompiuterių talpykloje.

7) Atskirkite procesą nuo gijos ir nurodykite proceso, kuris tvarko procesus ir gijas daugelyje kompiuterių sistemų, pavadinimą.

8) Trumpai paaiškinkite, kas yra daugiafunkcis apdorojimas.

9) a) Paaiškinkite puslapius, taikomus x86 386 µP kompiuterio architektūrai.
b) Kaip galima pakeisti šį puslapių siuntimą, kad padidėtų visos atminties dydis?