Поглавље 6: Основе модерне рачунарске архитектуре са асемблерским језиком

Poglavle 6 Osnove Moderne Racunarske Arhitekture Sa Asemblerskim Jezikom



6.1 Увод

Савремени рачунари опште намене су два типа: ЦИСЦ и РИСЦ. ЦИСЦ је скраћеница од Цомплек Инструцтион Сет Цомпутер. РИСК је скраћеница од Редуцед Сет Инструцтион Сет Цомпутер. Микропроцесори 6502 или 6510, у зависности од рачунара Цоммодоре-64, више личе на РИСЦ архитектуру него на ЦИСЦ архитектуру.

РИСЦ рачунари генерално имају краће инструкције асемблерског језика (по броју бајтова) у поређењу са ЦИСЦ рачунарима.







Белешка : Било да се ради о ЦИСЦ, РИСЦ или старом рачунару, периферија почиње од унутрашњег порта и иде ка споља кроз спољни порт на вертикалној површини системске јединице рачунара (базне јединице) и до спољног уређаја.



Типична инструкција ЦИСЦ рачунара може се видети као спајање неколико кратких инструкција асемблерског језика у једну дужу инструкцију асемблерског језика што једну резултирајућу инструкцију чини сложеном. Конкретно, ЦИСЦ рачунар учитава операнде из меморије у регистре микропроцесора, изводи операцију, а затим складишти резултат назад у меморију, све у једној инструкцији. С друге стране, ово су најмање три инструкције (кратке) за РИСЦ рачунар.



Постоје две популарне серије ЦИСЦ рачунара: Интел микропроцесорски рачунари и АМД микропроцесорски рачунари. АМД је скраћеница од Адванцед Мицро Девицес; то је компанија за производњу полупроводника. Интелове серије микропроцесора, према редоследу развоја, су 8086, 8088, 80186, 80286, 80386, 80486, Пентиум, Цоре, и Сериес, Целерон и Ксеон. Инструкције асемблерског језика за ране Интел микропроцесоре као што су 8086 и 8088 нису много сложене. Међутим, они су сложени за нове микропроцесоре. Најновији АМД микропроцесори за ЦИСЦ серију су Ризен, Оптерон, Атхлон, Турион, Пхеном и Семпрон. Интел и АМД микропроцесори су познати као к86 микропроцесори.





АРМ је скраћеница од Адванцед РИСЦ Мацхине. АРМ архитектуре дефинишу породицу РИСЦ процесора који су погодни за употребу у широком спектру апликација. Док се многи Интел и АМД микропроцесори користе у десктоп персоналним рачунарима, многи АРМ процесори служе као уграђени процесори у безбедносно критичне системе као што су аутомобилске кочнице против блокирања и као процесори опште намене у паметним сатовима, преносивим телефонима, таблетима и лаптоп рачунарима . Иако се оба типа микропроцесора могу видети у малим и великим уређајима, РИСЦ микропроцесори се налазе више у малим уређајима него у великим уређајима.

Цомпутер Ворд
Ако се за рачунар каже да је рачунар од 32-битне речи, то значи да се информације чувају, преносе и манипулишу у облику тридесетдвобитних бинарних кодова унутар унутрашњег дела матичне плоче. То такође значи да су регистри опште намене у микропроцесору рачунара широки 32 бита. А, Кс и И регистри микропроцесора 6502 су регистри опште намене. Они су широки осам бита, тако да је рачунар Цоммодоре-64 компјутер за речи са осам бита.



Неки вокабулар
Кс86 Цомпутерс

Значења бајта, речи, двоструке речи, четири речи и двоструке речи су следећа за к86 рачунаре:

  • Бите : 8 бита
  • Реч : 16 бита
  • Двострука реч : 32 бита
  • Куадворд : 64 бита
  • Доубле куадворд : 128 бита

АРМ рачунари
Значења бајта, полуречи, речи и двоструке речи су за АРМ рачунаре следећа:

  • Бите : 8 бита
  • Постани пола : 16 бита
  • Реч : 32 бита
  • Двострука реч : 64 бита

Треба напоменути разлике и сличности за називе (и вредности) к86 и АРМ.

Белешка : Предзнак целих бројева у оба типа рачунара је комплементар два.

Локација меморије
Код рачунара Цоммодоре-64, меморијска локација је обично један бајт, али повремено може бити два узастопна бајта када се разматрају показивачи (индиректно адресирање). Са модерним к86 рачунаром, меморијска локација је 16 узастопних бајтова када се ради са двоструком четвороречју од 16 бајтова (128 бита), 8 узастопних бајтова када се ради са четвороречју од 8 бајтова (64 бита), 4 узастопна бајта када се ради о двострукој речи од 4 бајта (32 бита), 2 узастопна бајта када се ради са речју од 2 бајта (16 бита) и 1 бајт када се ради са бајтом (8 бита). Код модерног АРМ рачунара, меморијска локација је 8 узастопних бајтова када се ради са двоструком речју од 8 бајтова (64 бита), 4 узастопна бајта када се ради са речју од 4 бајта (32 бита), 2 узастопна бајта када се ради са полуречју од 2 бајта (16 бита) и 1 бајт када се ради са бајтом (8 бита).

Ово поглавље објашњава шта је заједничко у ЦИСЦ и РИСЦ архитектури и које су њихове разлике. Ово се ради у поређењу са 6502 µП и компјутером цоммодоре-64 где је применљиво.

6.2 Блок дијаграм матичне плоче модерног рачунара

ПЦ је скраћеница од Персонал Цомпутер. Следи генерички основни блок дијаграм за модерну матичну плочу са једним микропроцесором за лични рачунар. Представља ЦИСЦ или РИСЦ матичну плочу.


Слика 6.21 Основни блок дијаграм матичне плоче модерног рачунара

Три интерна порта су приказана на дијаграму, али их у пракси има више. Сваки порт има регистар који се може видети као сам порт. Свако коло порта има најмање још један регистар који се може назвати „регистар статуса“. Статусни регистар означава порт за програм који шаље сигнал прекида микропроцесору. Постоји коло контролера прекида (није приказано) које разликује различите линије прекида са различитих портова и има само неколико линија до µП.

ХД.Ц на дијаграму означава Хард Дриве Цард. НИЦ је скраћеница од Нетворк Интерфаце Цард. Картица чврстог диска (коло) је повезана са чврстим диском који се налази унутар основне јединице (системске јединице) савременог рачунара. Мрежна интерфејс картица (коло) је повезана преко екстерног кабла са другим рачунаром. На дијаграму постоји један порт и ДМА (погледајте следећу илустрацију) који су повезани на картицу хард диска и/или на картицу мрежног интерфејса. ДМА је скраћеница за директан приступ меморији.

Запамтите из рачунарског поглавља Цоммодоре-64 да би се бајтови из меморије послали на диск јединицу или други рачунар, сваки бајт мора да се копира у регистар у микропроцесору пре него што се копира на одговарајући интерни порт, а затим аутоматски на уређај. Да би се бајтови са диск јединице или другог рачунара примили у меморију, сваки бајт мора бити копиран из одговарајућег интерног регистра порта у регистар микропроцесора пре него што се копира у меморију. Ово обично траје дуго ако је број бајтова у току велики. Решење за брз пренос је коришћење директног приступа меморији (коло) без проласка кроз микропроцесор.

ДМА коло је између порта и ХД. Ц или НИЦ. Са директним приступом меморији ДМА кола, пренос великих токова бајтова је директно између ДМА кола и меморије (РАМ) без континуираног учешћа микропроцесора. ДМА користи адресну магистралу и сабирницу података уместо µП. Укупно трајање преноса је краће него ако се користи µП хард. И ХД Ц. и НИЦ користе ДМА када имају велики ток података (бајтова) за пренос са РАМ-ом (меморијом).

ГПУ је скраћеница од Грапхицс Процессинг Унит. Овај блок на матичној плочи је одговоран за слање текста и покретних или непокретних слика на екран.

Код савремених рачунара (ПЦ) не постоји меморија само за читање (РОМ). Постоји, међутим, БИОС или УЕФИ који је врста непроменљиве РАМ меморије. Информације у БИОС-у се заправо одржавају помоћу батерије. Батерија је оно што заправо одржава и тајмер сата, у право време и датум за рачунар. УЕФИ је измишљен након БИОС-а и заменио је БИОС, иако је БИОС и даље прилично релевантан у модерним рачунарима. О њима ћемо више разговарати касније!

У модерним рачунарима, магистрале адреса и података између µП и интерних портова (и меморије) нису паралелне магистрале. То су серијске сабирнице којима су потребна два проводника за пренос у једном смеру и још два проводника за пренос у супротном смеру. То значи, на пример, да се 32-бита могу слати у серији (један бит за другим) у било ком смеру.

Ако је серијски пренос само у једном правцу са два проводника (две линије), каже се да је полудуплекс. Ако је серијски пренос у оба смера са четири проводника, по један пар у оба смера, за то се каже да је пуни дуплекс.

Цела меморија модерног рачунара и даље се састоји од низа локација бајтова: осам бита по бајту. Савремени рачунар има меморијски простор од најмање 4 гига бајта = 4 к 210 к 2 10 к 2 10 = 4 к 1,073,741,824 10 бајтова = 4 к 1024 10/суб> к 1024 10 к 1024 10 = 4 к 1,073,741,824 10 .

Белешка : Иако на претходној матичној плочи није приказано тајмерско коло, све модерне матичне плоче имају кола тајмера.

6.3 Основе архитектуре рачунара к64

6.31 Сет регистара к64
64-битни микропроцесор из к86 серије микропроцесора је 64-битни микропроцесор. Сасвим је модерно заменити 32-битни процесор исте серије. Регистри опште намене 64-битног микропроцесора и њихови називи су следећи:


Слика 6.31 Регистри опште намене за к64

На датој илустрацији је приказано шеснаест (16) регистара опште намене. Сваки од ових регистара је широк 64 бита. Гледајући регистар у горњем левом углу, 64 бита су идентификована као РАКС. Прва 32 бита овог истог регистра (с десна) су идентификована као ЕАКС. Првих 16 битова овог истог регистра (с десна) су идентификовани као АКС. Други бајт (с десне стране) овог истог регистра је идентификован као АХ (Х овде значи високо). И први бајт (овог истог регистра) је идентификован као АЛ (Л овде значи низак). Гледајући регистар у доњем десном углу, 64 бита су идентификована као Р15. Прва 32 бита овог истог регистра су идентификована као Р15Д. Првих 16 битова овог истог регистра идентификовано је као Р15В. А први бајт је идентификован као Р15Б. Имена осталих регистара (и подрегистра) су на сличан начин објашњена.

Постоје неке разлике између Интел и АМД µП. Информације у овом одељку су за Интел.

Са 6502 µП, регистар програмског бројача (није доступан директно) који садржи следећу инструкцију која треба да се изврши је широк 16 бита. Овде (к64), програмски бројач се зове Инструцтион Поинтер, и широк је 64 бита. Означен је као РИП. То значи да к64 µП може адресирати до 264 = 1,844674407 к 1019 (у ствари 18,446,744,073,709,551,616) локација меморијских бајтова. РИП није регистар опште намене.

Стацк Поинтер Регистер или РСП је међу 16 регистара опште намене. Показује на последњи унос стека у меморији. Као и код 6502 µП, стек за к64 расте наниже. Код к64, стек у РАМ-у се користи за чување повратних адреса за потпрограме. Такође се користи за чување „простора сенки“ (погледајте следећу дискусију).

6502 µП има 8-битни регистар статуса процесора. Еквивалент у к64 се зове РФЛАГС регистар. Овај регистар чува ознаке које се користе за резултате операција и за контролу процесора (µП). Широк је 64 бита. Виша 32 бита су резервисана и тренутно се не користе. Следећа табела даје имена, индекс и значења за најчешће коришћене битове у РФЛАГС регистру:

Табела 6.31.1
Најчешће коришћене РФЛАГС заставице (битови)
Симбол Мало Име Сврха
ЦФ 0 Царри Поставља се ако аритметичка операција генерише пренос или позајмљивање најзначајнијег бита резултата; другачије очишћено. Ова заставица означава услов преливања за аритметику целих бројева без предзнака. Такође се користи у аритметици вишеструке прецизности.
ПФ 2 Паритет Поставља се ако најмањи-значајни бајт резултата садржи паран број од 1 бита; другачије очишћено.
ОФ 4 Подесите Поставља се ако аритметичка операција генерише пренос или позајмљивање из бита 3 резултата; другачије очишћено. Ова заставица се користи у бинарно кодираној децималној (БЦД) аритметици.
ЗФ 6 Нула Поставља се ако је резултат нула; другачије очишћено.
СФ 7 Сигн Поставља се ако је једнак најважнијем биту резултата који је предзнак целог броја са предзнаком (0 означава позитивну вредност, а 1 негативну вредност).
ОФ Једанаест Оверфлов Поставља се ако је целобројни резултат превелики позитиван број или премали негативан број (искључујући предзнак) да би стао у одредишни операнд; другачије очишћено. Ова заставица означава услов преливања за аритметику целог броја са предзнаком (комплемента два).
ДФ 10 Правац Подешава се ако инструкције низа смера раде (инкремент или декремент).
ИД двадесет један Идентификација Поставља се ако променљивост означава присуство ЦПУИД инструкције.

Поред осамнаест 64-битних регистара који су претходно наведени, архитектура к64 µП има осам 80-битних широких регистара за аритметику са покретним зарезом. Ових осам регистара се такође могу користити као ММКС регистри (погледајте следећу дискусију). Такође постоји шеснаест 128-битних регистара за КСММ (погледајте следећу дискусију).

То није све у регистрима. Постоји више к64 регистара који су сегментни регистри (углавном се не користе у к64), контролни регистри, регистри за управљање меморијом, регистри за отклањање грешака, регистри виртуелизације, регистри перформанси који прате све врсте интерних параметара (погоди/промашаји у кеш меморији, извршене микро операције, време , и још много тога).

СИМД

СИМД је скраћеница од Сингле Инструцтион Мултипле Дата. То значи да једна инструкција асемблерског језика може да делује на више података истовремено у једном микропроцесору. Размотрите следећу табелу:

1 2 3 4 5 6 7 8
+ 9 10 Једанаест 12 13 14 петнаест 16
= 10 12 14 16 18 двадесет 22 24

У овој табели, осам парова бројева се додаје паралелно (у истом трајању) да би се добило осам одговора. Једна инструкција асемблерског језика може извршити осам паралелних целобројних сабирања у ММКС регистрима. Слично се може урадити са КСММ регистрима. Дакле, постоје ММКС инструкције за целе бројеве и КСММ инструкције за флоат.

6.32 Мапа меморије и к64

Са показивачем инструкција (програмски бројач) који има 64 бита, то значи да се може адресирати 264 = 1,844674407 к 1019 локација меморијских бајтова. У хексадецималном, највиша локација бајтова је ФФФФ,ФФФФ,ФФФФ,ФФФФ16. Ниједан обичан рачунар данас не може да обезбеди тако велики меморијски (комплетан) простор. Дакле, одговарајућа меморијска мапа за к64 рачунар је следећа:

Приметите да јаз од 0000,8000,0000,000016 до ФФФФ,7ФФФ,ФФФФ,ФФФФ16 нема меморијске локације (нема меморијске РАМ банке). Ово је разлика од ФФФФ,0000,0000,000116 која је прилично велика. Канонска горња половина има оперативни систем, док канонска доња половина има корисничке програме (апликације) и податке. Оперативни систем се састоји од два дела: малог УЕФИ (БИОС) и великог дела који се учитавају са чврстог диска. Следеће поглавље говори више о савременим оперативним системима. Обратите пажњу на сличност са овом меморијском мапом и оном за Цоммодоре-64 када је 64 КБ можда изгледало као много меморије.

У овом контексту, оперативни систем се грубо назива 'кернел'. Језгро је слично Керналу рачунара Цоммодоре-64, али има далеко више потпрограма.

Ендианнесс за к64 је мали ендиан, што значи да за локацију доња адреса указује на нижи бајт садржаја у меморији.

6.33 Режими адресирања језика асемблера за к64

Режими адресирања су начини на које инструкција може да приступи µП регистрима и меморији (укључујући интерне порт регистре). к64 има много начина адресирања, али овде су адресирани само уобичајени начини адресирања. Општа синтакса за инструкције овде је:

опцоде одредиште, извор

Децимални бројеви се пишу без икаквог префикса или суфикса. Са 6502, извор је имплицитан. к64 има више оп-кодова од 6502, али неки од опкодова имају исту мнемонику. Појединачне к64 инструкције су променљиве дужине и могу бити величине од 1 до 15 бајтова. Уобичајени начини адресирања су следећи:

Режим непосредног адресирања
Овде је изворни операнд стварна вредност, а не адреса или ознака. Пример (прочитајте коментар):

АДД ЕАКС, 14 ; додајте децимални 14 до 32-битни ЕАКС од 64-битни РАКС, одговор остаје у ЕАКС (одредиште)

Региструјте се у режиму регистрације адресирања
Пример:

АДД Р8Б, АЛ ; додајте 8-битни АЛ РАКС у Р8Б 64-битног Р8 – одговори остају у Р8Б (одредиште)

Индиректни и индексирани начин адресирања
Индиректно адресирање са 6502 µП значи да локација дате адресе у инструкцији има ефективну адресу (показивач) коначне локације. Слична ствар се дешава са к64. Индексно адресирање са 6502 µП значи да се садржај µП регистра додаје датој адреси у инструкцији да би се добила ефективна адреса. Слична ствар се дешава са к64. Такође, са к64, садржај регистра се такође може помножити са 1 или 2 или 4 или 8 пре него што се дода на дату адресу. Инструкција мов (цопи) к64 може комбиновати и индиректно и индексирано адресирање. Пример:

МОВ Р8В, 1234[8*РАКС+РЦКС] ; померите реч на адреси (8 к РАКС + РЦКС) + 1234

Овде Р8В има првих 16 бита Р8. Дата адреса је 1234. РАКС регистар има 64-битни број који се множи са 8. Резултат се додаје садржају 64-битног РЦКС регистра. Овај други резултат се додаје датој адреси која је 1234 да би се добила ефективна адреса. Број на локацији ефективне адресе се помера (копира) на прво 16-битно место (Р8В) регистра Р8, замењујући оно што је тамо било. Обратите пажњу на употребу угластих заграда. Запамтите да је реч у к64 ширина 16 бита.

РИП Релативно адресирање
За 6502 µП, релативно адресирање се користи само са инструкцијама гранања. Тамо, један операнд кода операције је помак који се додаје или одузима садржају програмског бројача за ефективну адресу инструкције (не адресу података). Слична ствар се дешава са к64 где се програмски бројач назива као инструкцијски показивач. Инструкција са к64 не мора бити само инструкција гранања. Пример РИП-релативног адресирања је:

МОВ АЛ, [РИП]

АЛ РАКС-а има 8-битни број са предзнаком који се додаје или одузима од садржаја у РИП-у (64-битни показивач инструкција) да би указао на следећу инструкцију. Имајте на уму да су извор и одредиште изузетно замењени у овој инструкцији. Такође обратите пажњу на употребу угластих заграда које се односе на садржај РИП-а.

6.34 Често коришћена упутства за к64

У следећој табели * означава различите могуће суфиксе подскупа кодова операција:

Табела 6.34.1
Често коришћена упутства у к64
Опцоде Значење
МОВ Премештање (копирање) у/из/између меморије и регистара
ЦМОВ* Разни условни потези
КСЦХГ Размена
БСВАП Замена бајтова
ПУСХ/ПОП Употреба стека
АДД/АДЦ Додај/са ношењем
СУБ/СБЦ Одузми/са ношењем
МУЛ/ИМУЛ Помножи/непотписано
ДИВ/ИДИВ Подели/непотписано
ИНЦ/ДЕЦ Инкремент/Декремент
НЕГ Негирати
ЦМП Упоредити
И/ИЛИ/КСОР/НЕ Битвисе операције
СХР/САР Логички/аритметички помак удесно
СХЛ/САЛ Логички/аритметички помак улево
РОР/РОЛЕ Ротирајте десно/лево
РЦР/РЦЛ Ротирајте десно/лево кроз наставак за ношење
БТ/БТС/БТР Тестирање битова/и постављање/и ресетовање
ЈМП Безусловни скок
ЈЕ/ЈНЕ/ЈЦ/ЈНЦ/Ј* Скочи ако је једнако/није једнако/носи/не носи/много других
ВАЛК/ВАЛК/ВАЛК Петља са ЕЦКС-ом
ПОЗОВИ/ПОНОВНИ Позови потпрограм/повратак
НОП Нема операције
ЦПУИД Информације о процесору

к64 има упутства за множење и дељење. Има хардверска кола за множење и дељење у свом µП. 6502 µП нема хардверска кола за множење и дељење. Брже је извршити множење и дељење помоћу хардвера него софтвера (укључујући померање битова).

Стринг упутства
Постоји велики број стрингова инструкција, али једина о којој се овде говори је МОВС (за померање низа) инструкција за копирање стринга који почиње на адреси Ц000 Х . За почетак на адреси Ц100 Х , користите следеће упутство:

МОВС [Ц100Х], [Ц000Х]

Обратите пажњу на суфикс Х за хексадецимални.

6.35 Петља у к64

6502 µП има упутства за гранање за петљу. Инструкција гранања скаче на локацију адресе која има нову инструкцију. Локација адресе може се назвати „петља“. к64 има ЛООП/ЛООПЕ/ЛООПНЕ упутства за петљу. Ове резервисане речи асемблерског језика не треба мешати са ознаком „петља“ (без наводника). Понашање је следеће:

ЛООП смањује ЕЦКС и проверава да ли ЕЦКС није нула. Ако је тај услов (нула) испуњен, скаче на одређену ознаку. У супротном, пропада (наставите са остатком упутстава у следећој дискусији).

ЛООПЕ смањује ЕЦКС и проверава да ЕЦКС није нула (на пример, може бити 1) и да је ЗФ постављен (на 1). Ако су ови услови испуњени, скаче на етикети. У супротном, пропада.

ЛООПНЕ смањује ЕЦКС и проверава да ЕЦКС није нула и да ЗФ НИЈЕ постављен (тј. да буде нула). Ако су ови услови испуњени, скаче на ознаку. У супротном, пропада.

Са к64, РЦКС регистар или његови подделови као што су ЕЦКС или ЦКС, држе бројач цео број. Са инструкцијама ЛООП, бројач нормално одбројава, смањујући се за 1 за сваки скок (петља). У следећем сегменту кода у петљи, број у ЕАКС регистру се повећава са 0 на 10 у десет итерација, док се број у ЕЦКС-у одбројава (смањује) 10 пута (прочитајте коментаре):

МОВ ЕАКС, 0 ;
МОВ ЕЦКС, 10 ; подразумевано одбројавајте 10 пута, једном за сваку итерацију
етикета:
ИНЦ ЕАКС ; повећати ЕАКС као тело петље
ЛООП лабел ; смањите ЕАКС, и ако ЕАКС није нула, поново извршите тело петље са „лабел:“

Кодирање петље почиње од „лабел:“. Обратите пажњу на употребу дебелог црева. Кодирање петље завршава се ознаком ЛООП која каже смањивање ЕАКС. Ако његов садржај није нула, вратите се на инструкцију после „ознаке:“ и поново извршите било коју инструкцију (све инструкције тела) која се спушта надоле до „ознаке ЛООП“. Имајте на уму да „ознака“ и даље може имати друго име.

6.36 Улаз/излаз за к64

Овај део поглавља бави се слањем података на излазни (интерни) порт или примањем података са улазног (интерног) порта. Чипсет има осмобитне портове. Било која два узастопна 8-битна порта могу се третирати као 16-битни порт, а било која четири узастопна порта могу бити 32-битни порт. На овај начин, процесор може да пренесе 8, 16 или 32 бита на или са спољног уређаја.

Информације се могу пренети између процесора и интерног порта на два начина: коришћењем онога што је познато као улаз/излаз са мапираним меморијом или коришћењем засебног улазно/излазног адресног простора. Меморијски мапирани И/О је као оно што се дешава са 6502 процесором где су адресе портова заправо део целог меморијског простора. У овом случају, када се подаци шаљу на одређену адресу, они иду на порт, а не у меморијску банку. Портови могу имати посебан И/О адресни простор. У овом последњем случају, све меморијске банке имају своје адресе од нуле. Постоји посебан распон адреса од 0000Х до ФФФФ16. Користе их портови у чипсету. Матична плоча је програмирана тако да се не збуни између И/О мапираног меморијом и одвојеног И/О адресног простора.

У/И са мапираним меморијом
Са овим, портови се сматрају меморијским локацијама, а нормални опкодови који се користе између меморије и µП се користе за пренос података између µП и портова. Дакле, да бисте преместили бајт са порта на адреси Ф000Х у µП регистар РАКС:ЕАКС:АКС:АЛ, урадите следеће:

МОВ АЛ, [Ф000Х]

Низ се може преместити из меморије у порт и обрнуто. Пример:

МОВС [Ф000Х], [Ц000Х] ; извор је Ц000Х, а одредиште је порт на Ф000Х.

Одвојени И/О адресни простор

При томе се морају користити посебна упутства за унос и излаз.

Пренос појединачних ставки
Регистар процесора за пренос је РАКС. У ствари, то је РАКС:ЕАКС за двоструку реч, РАКС:ЕАКС:АКС за реч и РАКС:ЕАКС:АКС:АЛ за бајт. Дакле, да бисте пренели бајт са порта на ФФФ0х, у РАКС:ЕАКС:АКС:АЛ, откуцајте следеће:

У АЛ, [ФФФ0Х]

За обрнути пренос откуцајте следеће:

ОУТ [ФФФ0Х], АЛ

Дакле, за појединачне ставке, упутства су ИН и ОУТ. Адреса порта се такође може дати у регистру РДКС:ЕДКС:ДКС.

Трансфер стрингс
Низ се може пренети из меморије на порт за чипсет и обрнуто. Да бисте пренели низ са порта на адреси ФФФ0Х у меморију, почните од Ц100Х, откуцајте:

ИНС [ЕСИ], [ДКС]

који има исти ефекат као:

ИНС [ЕДИ], [ДКС]

Програмер би требало да унесе двобајтну адресу порта ФФФ0Х у регистар РДКС:ЕДКС:Дк, а двобајтну адресу Ц100Х у регистар РСИ:ЕСИ или РДИ:ЕДИ. За обрнути пренос, урадите следеће:

ИНС [ДКС], [ЕСИ]

који има исти ефекат као:

ИНС [ДКС], [ЕДИ]

6.37 Стацк у к64

Као и 6502 процесор, к64 процесор такође има стек у РАМ-у. Стек за к64 може бити 2 16 = 65.536 бајтова или може бити 2 32 = 4,294,967,296 бајтова дужине. Такође расте наниже. Када се садржај регистра убаци у стек, број у РСП показивачу стека се смањује за 8. Запамтите да је меморијска адреса за к64 широка 64 бита. Вредност у показивачу стека у µП указује на следећу локацију у стеку у РАМ-у. Када се садржај регистра (или вредност у једном операнду) искочи из стека у регистар, број у РСП показивачу стека се повећава за 8. Оперативни систем одлучује о величини стека и где он почиње у РАМ-у и расте наниже. Запамтите да је стек структура Ласт-Ин-Фирст-Оут (ЛИФО) која расте наниже и смањује се нагоре у овом случају.

Да бисте гурнули садржај µП РБКС регистра у стек, урадите следеће:

ПУСХ РБКС

Да бисте последњи унос у стеку вратили у РБКС, урадите следеће:

ПОП РБКС

6.38 Процедура у к64

Потпрограм у к64 се зове „процедура“. Стек се овде користи више него што се користи за 6502 µП. Синтакса за к64 процедуру је:

проц_наме:
орган поступка

јел тако

Пре него што наставите, приметите да су кодови операција и ознаке за к64 потпрограм (инструкције језика састављања уопште) неосетљиви на велика и мала слова. То је име проц је исто као ПРОЦ_НАМЕ. Као и код 6502, име назива процедуре (ознаке) почиње на почетку новог реда у уређивачу текста за асемблерски језик. Ово је праћено двотачком, а не размаком и опкодом као код 6502. Следи тело потпрограма, које се завршава са РЕТ, а не РТС као код 6502 µП. Као и код 6502, свака инструкција у телу, укључујући РЕТ, не почиње на почетку своје линије. Имајте на уму да ознака овде може имати више од 8 знакова. Да бисте позвали ову процедуру, одозго или испод откуцане процедуре, урадите следеће:

ЦАЛЛ проц_наме

Код 6502, назив ознаке је само тип за позивање. Међутим, овде се уписује резервисана реч „ЦАЛЛ“ или „цалл“, а након размака следи назив процедуре (потпрограм).

Када се ради о процедурама, обично постоје две процедуре. Једна процедура позива другу. Процедура која позива (има инструкцију за позивање) назива се „позивалац“, а процедура која се позива назива се „позивница“. Постоји конвенција (правила) коју треба пратити.

Правила позиваоца

Позивалац треба да се придржава следећих правила када позива потпрограм:

1. Пре позивања потпрограма, позивалац треба да сачува садржај одређених регистара који су означени као сачувани од позиваоца у стек. Регистри који су сачувани код позиваоца су Р10, Р11 и сви регистри у које су постављени параметри (РДИ, РСИ, РДКС, РЦКС, Р8, Р9). Ако садржај ових регистара треба да се сачува у току позива потпрограма, гурните их у стек уместо да их сачувате у РАМ-у. Ово се мора урадити јер позивалац мора да користи регистре за брисање претходног садржаја.

2. Ако је процедура сабирање два броја на пример, два броја су параметри који се прослеђују стеку. Да бисте проследили параметре у потпрограм, ставите их шест у следеће регистре по редоследу: РДИ, РСИ, РДКС, РЦКС, Р8, Р9. Ако постоји више од шест параметара у потпрограму, гурните остатак на стек обрнутим редоследом (тј. први последњи параметар). Пошто се стек смањује, први од додатних параметара (заправо седми параметар) се чува на најнижој адреси (ова инверзија параметара је историјски коришћена да би се омогућило прослеђивање функција (потпрограма) са променљивим бројем параметара).

3. Да позовете потпрограм (процедуру), користите инструкцију за позивање. Ова инструкција поставља повратну адресу на врх параметара на стеку (најнижа позиција) и гране кода потпрограма.

4. Након што се потпрограм врати (тј. одмах након инструкције позива), позивалац мора уклонити све додатне параметре (изван шест који су ускладиштени у регистрима) из стека. Ово враћа стек у стање пре извршеног позива.

5. Позивалац може очекивати да ће пронаћи повратну вредност (адресу) потпрограма у регистру РАКС.

6. Позивалац враћа садржај регистара који је сачувао позивалац (Р10, Р11 и било који у регистрима за пролаз параметара) тако што их искаче из стека. Позивалац може претпоставити да ниједан други регистр није модификован од стране потпрограма.

Због начина на који је конвенција о позивању структурисана, обично је случај да неки (или већина) ових корака неће направити никакве промене у стеку. На пример, ако постоји шест или мање параметара, ништа се у том кораку не гура у стек. Слично томе, програмери (и компајлери) обично држе резултате до којих им је стало ван регистара сачуваних код позиваоца у корацима 1 и 6 како би спречили вишак притискања и искакања.

Постоје још два начина за прослеђивање параметара потпрограму, али они неће бити обрађени у овом онлајн курсу за каријеру. Један од њих користи сам стек уместо регистара опште намене.

Правила позиваоца

Дефиниција позване потпрограма треба да се придржава следећих правила:

1. Доделите локалне варијабле (варијабле које се развијају у оквиру процедуре) користећи регистре или направите простор на стеку. Подсетимо, гомила расте надоле. Дакле, да бисте направили простор на врху стека, показивач стека треба да се смањи. Износ за који се смањује показивач стека зависи од потребног броја локалних променљивих. На пример, ако су потребни локални флоат и локални лонг (укупно 12 бајтова), показивач стека треба да се смањи за 12 да би се направио простор за ове локалне променљиве. У језику високог нивоа као што је Ц, ово значи декларисање променљивих без додељивања (иницијализације) вредности.

2. Затим, вредности свих регистара који су означени као сачувани код позиваоца (регистри опште намене које позивалац није сачувао) које користи функција морају бити сачуване. Да бисте сачували регистре, гурните их на стек. Регистри који су сачувани од позиваоца су РБКС, РБП и Р12 до Р15 (РСП је такође сачуван конвенцијом позива, али не мора да се гура на стек током овог корака).

Након што се ове три радње изврше, стварни рад потпрограма може да се настави. Када је потпрограм спреман за повратак, правила конвенције позива се настављају.

3. Када је потпрограм готов, повратна вредност за потпрограм треба да се стави у РАКС ако већ није тамо.

4. Потпрограм мора да врати старе вредности свих регистара сачуваних од позиваоца (РБКС, РБП и Р12 до Р15) који су измењени. Садржај регистра се враћа тако што се искаче из стека. Имајте на уму да регистре треба искакати обрнутим редоследом у ком су гурнути.

5. Затим делоцирамо локалне варијабле. Најлакши начин да то урадите је да додате РСП-у исти износ који је од њега одузет у кораку 1.

6. Коначно, враћамо се позиваоцу извршавањем рет инструкције. Ово упутство ће пронаћи и уклонити одговарајућу повратну адресу из стека.

Пример тела потпрограма позиваоца за позивање другог потпрограма који је „миФунц“ је следећи (прочитајте коментаре):

; Желите да позовете функцију „миФунц“ која траје три
; целобројни параметар. Први параметар је у РАКС-у.
; Други параметар је константа 456. Трећи
; параметар је на меморијској локацији „варијабл“

пусх рди ; рди ће бити парам, па га сачувајте
; лонг ретВал = миФунц (к, 456, з);

мов рди , рак ; ставите први параметар у РДИ
мов рси, 456 ; ставите други параметар у РСИ
мов рдк , [варијабл] ; ставите трећи параметар у РДКС

цалл миФунц ; позовите функцију

поп рди ; вратити сачувану РДИ вредност
; повратна вредност миФунц је сада доступна у РАКС-у

Пример функције позиваоца (миФунц) је (прочитајте коментаре):

миФунц :
; ∗∗∗ Стандардни пролог потпрограма ∗∗∗
суб РСП, 8 ; простор за 64-битну локалну променљиву (резултат) користећи „суб“ опкод

пусх рбк ; сачувај позване-сачувај регистре
пусх рбп ; оба ће користити миФунц

; ∗∗∗ Тело подрутине ∗∗∗
мов рак, рди; параметар 1 на РАКС
мов рбп, рси; параметар 2 до РБП
мов рбк, рдк; параметар 3 до рб к
мов [рсп + 1 6], рбк; ставите рбк у локалну променљиву
адд [рсп+1 6], рбп; додајте рбп у локалну променљиву
мов рак, [рсп +16]; мов садржај локалне променљиве у РАКС
; (повратна вредност/коначни резултат)

; ∗∗∗ Стандардни епилог потпрограма ∗∗∗
поп рбп ; опоравити регистре чувања позиваоца
поп рбк ; обрнуто од када се гурне
додати РСП, 8; ослободити локалну променљиву(е). 8 значи 8 бајтова
рет ; искочи највишу вредност из стека, скочи тамо

6.39 Прекиди и изузеци за к64

Процесор обезбеђује два механизма за прекид извршавања програма, прекиде и изузетке:

  • Прекид је асинхрони (може се десити у било ком тренутку) догађај који обично покреће У/И уређај.
  • Изузетак је синхрони догађај (дешава се док се код извршава, унапред програмира, на основу неке појаве) који се генерише када процесор открије један или више унапред дефинисаних услова док извршава инструкцију. Наведене су три класе изузетака: грешке, замке и прекиди.

Процесор реагује на прекиде и изузетке у суштини на исти начин. Када се сигнализира прекид или изузетак, процесор зауставља извршавање тренутног програма или задатка и прелази на процедуру руковања која је написана посебно за руковање прекидом или условом изузетка. Процесор приступа процедури руковаоца преко уноса у Табели дескриптора прекида (ИДТ). Када руковалац заврши са руковањем прекидом или изузетком, контрола програма се враћа прекинутом програму или задатку.

Оперативни систем, извршни и/или управљачки програми уређаја нормално управљају прекидима и изузецима независно од апликацијских програма или задатака. Апликациони програми могу, међутим, да приступе руковаоцима прекида и изузетака који су уграђени у оперативни систем или да га изврше путем позива на језику асемблера.

Дефинисано је осамнаест (18) унапред дефинисаних прекида и изузетака, који су повезани са уносима у ИДТ. Две стотине двадесет четири (224) кориснички дефинисана прекида се такође могу направити и повезати са табелом. Сваки прекид и изузетак у ИДТ-у је идентификован бројем који се назива „вектор“. Табела 6.39.1 наводи прекиде и изузетке са уносима у ИДТ и њиховим одговарајућим векторима. Вектори од 0 до 8, од 10 до 14 и од 16 до 19 су унапред дефинисани прекиди и изузеци. Вектори 32 до 255 су за софтверски дефинисане прекиде (корисник) који су или за софтверске прекиде или за маскирне хардверске прекиде.

Када процесор открије прекид или изузетак, ради једну од следећих ствари:

  • Изврши имплицитни позив процедуре руковаоца
  • Извршите имплицитни позив задатку руковаоца

6.4 Основе 64-битне АРМ рачунарске архитектуре

АРМ архитектуре дефинишу породицу РИСЦ процесора који су погодни за употребу у широком спектру апликација. АРМ је архитектура учитавања/складишта која захтева да се подаци учитају из меморије у регистар пре него што се са њим изврши било каква обрада као што је АЛУ (аритметичка логичка јединица). Следећа инструкција похрањује резултат назад у меморију. Иако ово може изгледати као корак уназад од к86 и к64 архитектура, које раде директно на операндима у меморији у једној инструкцији (користећи регистре процесора, наравно), приступ учитавања/складишта, у пракси, дозвољава неколико узастопних операција да се изврши великом брзином на операнду када се учита у један од многих процесорских регистара. АРМ процесори имају опцију малог или великог поретка. Подразумевана поставка АРМ 64 је литтле-ендиан, што је конфигурација коју обично користе оперативни системи. 64-битна АРМ архитектура је модерна и постављена је да замени 32-битну АРМ архитектуру.

Белешка : Свака инструкција за 64-битни АРМ µП је дуга 4 бајта (32 бита).

6.41 64-битни АРМ регистар
Постоји 31 64-битни регистар опште намене за 64-битни АРМ µП. Следећи дијаграм приказује регистре опште намене и неке важне регистре:


Слика 4.11.1 64-битни регистри опште намене и неки важни регистри

Регистри опште намене се називају Кс0 до Кс30. Први 32-битни део за сваки регистар се назива В0 до В30. Када разлика између 32 бита и 64 бита није наглашена, користи се префикс „Р“. На пример, Р14 се односи на В14 или Кс14.

6502 µП има 16-битни програмски бројач и може адресирати 2 16 локације меморијских бајтова. 64-битни АРМ µП има 64-битни програмски бројач и може адресирати до 2 64 = 1,844674407 к 1019 (у ствари 18,446,744,073,709,551,616) локација меморијских бајтова. Програмски бројач садржи адресу следеће инструкције која треба да се изврши. Дужина инструкције АРМ64 или ААрцх64 је типично четири бајта. Процесор аутоматски повећава овај регистар за четири након што се свака инструкција преузме из меморије.

Регистар показивача стека или СП није међу 31 регистром опште намене. Показивач стека било које архитектуре показује на последњи унос стека у меморији. За АРМ-64, стек расте надоле.

6502 µП има 8-битни регистар статуса процесора. Еквивалент у АРМ64 се зове ПСТАТЕ регистар. Овај регистар чува ознаке које се користе за резултате операција и за контролу процесора (µП). Широк је 32 бита. Следећа табела даје имена, индекс и значења за често коришћене битове у ПСТАТЕ регистру:

Табела 6.41.1
Најчешће коришћене ПСТАТЕ заставице (битови)
Симбол Мало Сврха
М 0-3 Режим: Тренутни ниво привилегија извршења (УСР, СВЦ, и тако даље).
Т 4 Тхумб: Поставља се ако је активан скуп инструкција Т32 (палац). Ако је поништено, скуп инструкција АРМ је активан. Кориснички код може поставити и обрисати овај бит.
И 9 Ендианнесс: Постављање овог бита омогућава биг-ендиан мод. Ако је јасно, режим малог ендиана је активан. Подразумевано је режим малог ендиана.
П 27 Кумулативна ознака засићења: Поставља се ако у неком тренутку у низу операција дође до преливања или засићења
ИН 28 Ознака преливања: Поставља се ако је операција резултирала потписаним преливањем.
Ц 29 Ознака за ношење: Показује да ли је сабирање довело до преноса или је одузимање довело до позајмице.
ВИТХ 30 Ознака нула: Поставља се ако је резултат операције нула.
Н 31 Негативна заставица: Поставља се ако је резултат операције негативан.

АРМ-64 µП има много других регистара.

СИМД
СИМД је скраћеница од Сингле Инструцтион, Мултипле Дата. То значи да једна инструкција асемблерског језика може да делује на више података истовремено у једном микропроцесору. Постоје тридесет два регистра ширине 128 бита за употребу са СИМД операцијама и операцијама са покретним зарезом.

6.42 Мапирање меморије
РАМ и ДРАМ су меморије са случајним приступом. ДРАМ је спорији у раду од РАМ-а. ДРАМ је јефтинији од РАМ-а. Ако у меморији има више од 32 гигабајта (ГБ) континуираног ДРАМ-а, биће више проблема са управљањем меморијом: 32 ГБ = 32 к 1024 к 1024 к 1024 бајта. За цео меморијски простор који је далеко већи од 32 ГБ, ДРАМ изнад 32 ГБ треба да буде промешан са РАМ меморијом ради бољег управљања меморијом. Да бисте разумели АРМ-64 меморијску мапу, прво би требало да разумете мапу меморије од 4 ГБ за 32-битну АРМ централну процесорску јединицу (ЦПУ). ЦПУ значи µП. За 32-битни рачунар, максимални меморијски адресабилни простор је 2 32 = 4 к 2 10 к 2 10 к 2 10 = 4 к 1024 к 1024 к 1024 = 4.294.967.296 = 4 ГБ.

32-битна АРМ меморијска мапа
Мапа меморије за 32-битни АРМ је:

За 32-битни рачунар, максимална величина целе меморије је 4 ГБ. Од адресе од 0ГБ до адресе од 1ГБ налазе се РОМ оперативни систем, РАМ и И/О локације. Цела идеја РОМ ОС, РАМ-а и И/О адреса је слична ситуацији Цоммодоре-64 са могућим 6502 ЦПУ-ом. ОС РОМ за Цоммодоре-64 је на врху меморијског простора. РОМ ОС је овде много већи од оног код Цоммодоре-64 и налази се на почетку читавог меморијског адресног простора. У поређењу са другим модерним рачунарима, РОМ ОС је овде комплетан, у смислу да је упоредив са количином ОС-а на њиховим чврстим дисковима. Постоје два главна разлога за постојање ОС у интегрисаним колима РОМ-а: 1) АРМ ЦПУ се углавном користе у малим уређајима као што су паметни телефони. Многи чврсти дискови су већи од паметних телефона и других малих уређаја, 2) због безбедности. Када је ОС у меморији само за читање, хакери не могу да га оштете (делове замене). РАМ секције и секције за улаз/излаз су такође веома велике у поређењу са онима код Цоммодоре-64.

Када се напајање укључи са 32-битним РОМ ОС-ом, ОС мора почети са (покренути) са адресе 0к00000000 или адресе 0кФФФФ0000 ако је ХиВЕЦс омогућен. Дакле, када се напајање укључи након фазе ресетовања, хардвер ЦПУ-а учитава 0к00000000 или 0кФФФФ0000 у програмски бројач. Префикс „0к“ значи хексадецимални. Адреса покретања АРМв8 64-битних процесора је дефинисана имплементација. Међутим, аутор саветује рачунарског инжењера да почне са 0к00000000 или 0кФФФФ0000 ради компатибилности уназад.

Од 1ГБ до 2ГБ је мапирани улаз/излаз. Постоји разлика између мапираних И/О и само И/О који се налазе између 0ГБ и 1ГБ. Са И/О, адреса за сваки порт је фиксна као код Цоммодоре-64. Са мапираним И/О, адреса за сваки порт није нужно иста за сваку операцију рачунара (динамичка).

Од 2ГБ до 4ГБ је ДРАМ. Ово је очекивана (или уобичајена) РАМ меморија. ДРАМ је скраћеница за Динамиц РАМ, не представља осећај промене адресе током рада рачунара, већ у смислу да вредност сваке ћелије у физичкој РАМ меморији мора да се освежава при сваком импулсу такта.

Белешка :

  • Од 0к0000,0000 до 0к0000, ФФФФ је ОС РОМ.
  • Од 0к0001,0000 до 0к3ФФФ,ФФФФ, може бити више РОМ-а, затим РАМ-а, а затим нешто И/О.
  • Од 0к4000,0000 до 0к7ФФФ,ФФФФ, дозвољен је додатни И/О и/или мапирани И/О.
  • Од 0к8000,0000 до 0кФФФФ, ФФФФ је очекивани ДРАМ.

То значи да очекивани ДРАМ у пракси не мора да почиње на граници меморије од 2 ГБ. Зашто би програмер требало да поштује идеалне границе када нема довољно физичких РАМ банака које су постављене на матичну плочу? То је зато што купац нема довољно новца за све РАМ банке.

36-битна АРМ меморијска мапа
За 64-битни АРМ рачунар, сва 32 бита се користе за адресирање целе меморије. За 64-битни АРМ рачунар, првих 36 бита се може користити за адресирање целе меморије која је, у овом случају, 2 36 = 68,719,476,736 = 64ГБ. Ово је већ много сећања. Данашњим обичним рачунарима није потребна оваква количина меморије. Ово још није до максималног опсега меморије којој се може приступити преко 64 бита. Мапа меморије за 36-бита за АРМ ЦПУ је:

Од адресе од 0ГБ до адресе од 4ГБ је 32-битна меморијска мапа. „Резервисано“ значи да се не користи и чува се за будућу употребу. Не морају бити физичке меморијске банке које су постављене на матичну плочу за тај простор. Овде ДРАМ и мапирани И/О имају иста значења као и за 32-битну меморијску мапу.

У пракси се може наћи следећа ситуација:

  • 0к1 0000 0000 – 0к3 ФФФФ ФФФФ; резервисано. 12 ГБ адресног простора је резервисано за будућу употребу.
  • 0к4 0000 0000 – 0к7 ФФФФ ФФФФ; мапирани И/О. 16 ГБ адресног простора је доступно за динамички мапирани И/О.
  • 0к8 0000 0000 – 0к8 7ФФФ ФФФФ ФФФФ; Рупа или ДРАМ. 2ГБ адресног простора може да садржи било шта од следећег:
    • Рупа за омогућавање партиционисања ДРАМ уређаја (као што је описано у следећој дискусији).
    • ДРАМ.
  • 0к8 8000 0000 – 0кФ ФФФФ ФФФФ; ДРАМ. 30 ГБ адресног простора за ДРАМ.

Ова меморијска мапа је надскуп 32-битне мапе адреса, са додатним простором који је подељен на 50% ДРАМ-а (1/2) са опционом рупом у њој и 25% мапираног И/О простора и резервисаног простора (1/4 ). Преосталих 25% (1/4) је за 32-битну меморијску мапу ½ + ¼ + ¼ = 1.

Белешка : Од 32 бита до 360 бита је додавање 4 бита најзначајнијој страни од 36 бита.

40-битна меморијска мапа
40-битна мапа адреса је надскуп 36-битне мапе адреса и прати исти образац од 50% ДРАМ-а опционе рупе у њој, 25% мапираног И/О простора и резервисаног простора, и остатак од 25% простор за претходну меморијску мапу (36-битна). Дијаграм за меморијску мапу је:

Величина рупе је 544 – 512 = 32 ГБ. У пракси се може наћи следећа ситуација:

  • 0к10 0000 0000 – 0к3Ф ФФФФ ФФФФ; резервисано. 192 ГБ адресног простора је резервисано за будућу употребу.
  • 0к40 0000 0000 – 0к7Ф ФФФФ ФФФФ; мапирано. И/О 256 ГБ адресног простора је доступно за динамички мапирани И/О.
  • 0к80 0000 0000 – 0к87 ФФФФ ФФФФ; рупа или ДРАМ. 32 ГБ адресног простора може да садржи било шта од следећег:
    • Рупа за омогућавање партиционисања ДРАМ уређаја (као што је описано у следећој дискусији)
    • ДРАМ
  • 0к88 0000 0000 – 0кФФ ФФФФ ФФФФ; ДРАМ. 480 ГБ адресног простора за ДРАМ.

Белешка : Од 36 бита до 40 бита је додавање 4 бита најзначајнијој страни од 36 бита.

ДРАМ Холе
У меморијској мапи изнад 32-бита, то је или ДРАМ рупа или наставак ДРАМ-а са врха. Када је то рупа, то треба ценити на следећи начин: ДРАМ рупа пружа начин да се велики ДРАМ уређај подели на више опсега адреса. Опциона ДРАМ рупа се предлаже на почетку више границе ДРАМ адресе. Ово омогућава поједностављену шему декодирања при партиционисању ДРАМ уређаја великог капацитета преко нижег физички адресираног региона.

На пример, део ДРАМ меморије од 64 ГБ је подељен на три региона са помацима адресе који се обављају једноставним одузимањем у битовима адресе високог реда на следећи начин:

Табела 6.42.1
Пример 64ГБ ДРАМ партиционисања са рупама
Физичке адресе у СоЦ-у Офсет Интерна ДРАМ адреса
2 ГБ (32-битна мапа) 0к00 8000 0000 – 0к00 ФФФФ ФФФФ -0к00 8000 0000 0к00 0000 0000 – 0к00 7ФФФ ФФФФ
30 ГБ (36-битна мапа) 0к08 8000 0000 – 0к0Ф ФФФФ ФФФФ -0к08 0000 0000 0к00 8000 0000 – 0к07 ФФФФ ФФФФ
32 ГБ (40-битна мапа) 0к88 0000 0000 – 0к8Ф ФФФФ ФФФФ -0к80 0000 0000 0к08 0000 0000 – 0к0Ф ФФФФ ФФФФ

Предложене 44-битне и 48-битне адресиране меморијске мапе за АРМ процесоре
Претпоставимо да лични рачунар има 1024 ГБ (= 1ТБ) меморије; то је превише сећања. И тако, 44-битне и 48-битне адресиране меморијске мапе за АРМ ЦПУ за 16 ТБ и 256 ТБ, респективно, су само предлози за будуће потребе рачунара. У ствари, ови предлози за АРМ ЦПУ прате исту поделу меморије по односу као претходне меморијске мапе. То је: 50% ДРАМ-а са опционом рупом у њему, 25% мапираног И/О простора и резервисаног простора, а остатак од 25% простора за претходну меморијску мапу.

52-битне, 56-битне, 60-битне и 64-битне адресиране меморијске мапе тек треба да буду предложене за АРМ 64 бита за далеку будућност. Ако научници у то време још увек сматрају да је подела целокупног меморијског простора 50 : 25 : 25 корисна, одржаће тај однос.

Белешка : СоЦ је скраћеница од Систем-на-чипу што се односи на кола у µП чипу којих иначе не би било.

СРАМ или статичка меморија са случајним приступом је бржа од традиционалније ДРАМ-а, али захтева више површине силикона. СРАМ не захтева освежавање. Читач може да замисли РАМ као СРАМ.

6.43 Режими адресирања језика асемблера за АРМ 64
АРМ је архитектура учитавања/складишта која захтева да се подаци учитају из меморије у регистар процесора пре него што се са њим изврши било каква обрада као што је аритметичко-логичка операција. Следећа инструкција похрањује резултат назад у меморију. Иако ово може изгледати као корак уназад у односу на к86 и његове накнадне к64 архитектуре, које раде директно на операндима у меморији у једној инструкцији, у пракси, приступ учитавања/складишта дозвољава да се неколико узастопних операција изведе великом брзином на операнд након што се учита у један од многих регистара процесора.

Формат АРМ асемблерског језика има сличности и разлике са серијом к64 (к86).

  • Офсет : Потписана константа се може додати у основни регистар. Помак се куца као део инструкције. На пример: лдр к0, [рк, #10] учитава р0 речју на адреси р1+10.
  • Регистровати : Неозначени инкремент који је ускладиштен у регистру може се додати или одузети од вредности у основном регистру. На пример: лдр р0, [к1, к2] учитава р0 речју на адреси к1+к2. Било који од регистра се може сматрати основним регистром.
  • Скалирани регистар : Повећање у регистру се помера лево или десно за одређени број позиција бита пре него што се дода или одузме од вредности основног регистра. На пример: лдр к0, [к1, к2, лсл #3] учитава р0 речју на адреси р1+(р2×8). Померање може бити логичко померање улево или удесно (лсл или лср) које убацује нулте битове на испражњене позиције бита или аритметички померање удесно (аср) које реплицира бит знака на испражњеним позицијама.

Када су укључена два операнда, одредиште долази испред (са леве стране) извора (постоје неки изузеци од овога). Опкодови за АРМ асемблерски језик не разликују велика и мала слова.

Режим тренутног АРМ64 адресирања
Пример:

мов р0, #0кФФ000000; Учитајте 32-битну вредност ФФ000000х у р0

Децимална вредност је без 0к, али јој и даље претходи #.

Регистер Дирецт
Пример:

мов к0, к1 ; Копирајте к1 у к0

Регистер Индирецт
Пример:

стр к0, [к3] ; Сачувајте к0 на адреси у к3

Региструјте индиректно са одмаком
Примери:

лдр к0, [к1, #32] ; Учитати р0 са вредношћу на адреси [р1+32]; р1 је основни регистар
стр к0, [к1, #4] ; Чувајте р0 на адреси [р1+4]; р1 је основни регистар; бројеви су основа 10

Региструјте индиректно са помаком (претходно увећано)
Примери:

лдр к0, [к1, #32]! ; Учитајте р0 са [р1+32] и ажурирајте р1 на (р1+32)
стр к0, [к1, #4]! ; Сачувајте р0 у [р1+4] и ажурирајте р1 на (р1+4)

Обратите пажњу на употребу „!” симбол.

Региструјте индиректно са помаком (накнадно увећано)
Примери:

лдр к0, [к1], #32; Учитајте [к1] у к0, а затим ажурирајте к1 на (к1+32)
стр к0, [к1], #4; Сачувајте к0 у [к1], а затим ажурирајте к1 на (к1+4)

Индиректни двоструки регистар
Адреса операнда је збир основног регистра и регистра инкремента. Имена регистара су окружена угластим заградама.
Примери:

лдр к0, [к1, к2] ; Учитај к0 са [к1+к2]
стр к0, [рк, к2] ; Чувајте к0 у [к1+к2]

Релативни начин адресирања
У режиму релативног адресирања, ефективна инструкција је следећа инструкција у програмском бројачу, плус индекс. Индекс може бити позитиван или негативан.
Пример:

лдр к0, [ком, #24]

То значи регистар оптерећења Кс0 са речју на коју указује садржај рачунара плус 24.

6.44 Нека уобичајена упутства за АРМ 64
Ево уобичајених упутстава:

6.45 Лоопинг

Илустрација
Следећи код наставља да додаје вредност у регистру Кс10 вредности у Кс9 све док вредност у Кс8 не буде нула. Претпоставимо да су све вредности цели бројеви. Вредност у Кс8 се одузима за 1 у свакој итерацији:

петља:
ЦБЗ Кс8, прескочи
ДОДАЈТЕ Кс9, Кс9, Кс10 ; први Кс9 је одредиште, а други Кс9 извор
СУБ Кс8, Кс8, #1; први Кс8 је одредиште, а други Кс8 је извор
Б петља
прескочити:

Као и код 6502 µП и Кс64 µП, ознака у АРМ 64 µП почиње на почетку линије. Остатак инструкција почиње на неким местима након почетка реда. Код к64 и АРМ 64, ознака је праћена двотачком и новим редом. Док код 6502, иза ознаке следи инструкција после размака. У претходном коду, прва инструкција која је „ЦБЗ Кс8, прескочи“ значи да ако је вредност у Кс8 нула, наставите на ознаку „скип:“, прескачући инструкције између и настављајући са остатком упутстава испод „прескочи:“. „Б петља“ је безусловни скок на ознаку „петља“. Било који други назив ознаке може се користити уместо „петље“.

Дакле, као и са 6502 µП, користите упутства за гранање да бисте имали петљу са АРМ 64.

6.46 АРМ 64 Улаз/Излаз
Сви АРМ периферни уређаји (интерни портови) су меморијски мапирани. То значи да је програмски интерфејс скуп меморијских адресираних регистара (интерних портова). Адреса таквог регистра је одступање од одређене адресе меморијске базе. Ово је слично начину на који 6502 ради улаз/излаз. АРМ нема опцију за одвојени И/О адресни простор.

6.47 Гомила АРМ 64
АРМ 64 има стек у меморији (РАМ) на сличан начин као 6502 и к64. Међутим, код АРМ64 не постоји пусх или поп код. Стацк у АРМ 64 такође расте наниже. Адреса у показивачу стека показује одмах иза последњег бајта последње вредности која је смештена у стек.

Разлог зашто не постоји генерички поп или пусх опцоде за АРМ64 је тај што АРМ 64 управља својим стеком у групама од 16 узастопних бајтова. Међутим, вредности постоје у групама бајтова од једног бајта, два бајта, четири бајта и 8 бајтова. Дакле, једна вредност се може ставити у стек, а остала места (локације бајтова) за надокнађивање 16 бајтова су допуњена лажним бајтовима. Ово има недостатак губитка меморије. Боље решење је да се локација од 16 бајта попуни мањим вредностима и да неки програмер напише код који прати одакле потичу вредности на 16-бајтној локацији (регистри). Овај додатни код је такође потребан за повлачење вредности. Алтернатива овоме је попуњавање два 8-бајтна регистра опште намене различитим вредностима, а затим слање садржаја два 8-бајтна регистра у стек. Овде је још увек потребан додатни код за праћење одређених малих вредности које улазе у стек и напуштају стек.

Следећи код складишти четири 4-бајтна података у стек:

стр в0, [сп, #-4]!
стр в1, [сп, #-8]!
стр в2, [сп, #-12]!
стр в3, [сп, #-16]!

Прва четири бајта (в) регистара – к0, к1, к2 и к3 – шаљу се на локације од 16 узастопних бајтова у стеку. Обратите пажњу на употребу „стр“, а не „пусх“. Обратите пажњу на симбол узвика на крају сваке инструкције. Пошто меморијски стек расте наниже, прва вредност од четири бајта почиње на позицији која је минус четири бајта испод претходне позиције показивача стека. Остале вредности од четири бајта следе, иду надоле. Следећи сегмент кода ће урадити исправан (и по редоследу) еквивалент за искакање четири бајта:

лдр в3, [сп], #0
лдр в2, [сп], #4
лдр в1, [сп], #8
лдр в0, [сп], #12

Обратите пажњу на употребу лдр опцоде-а уместо поп. Такође имајте на уму да се овде не користи симбол узвика.

Сви бајтови у Кс0 (8 бајтова) и Кс1 (8 бајтова) могу се послати на локацију од 16 бајтова у стеку на следећи начин:

стп к0, к1, [сп, #-16]! ; 8 + 8 = 16

У овом случају, регистри к2 (в2) и к3 (в3) нису потребни. Сви тражени бајтови су у регистрима Кс0 и Кс2. Обратите пажњу на стп опцоде за чување парова садржаја регистра у РАМ-у. Такође обратите пажњу на симбол узвика. Поп еквивалент је:

лдп к0, к1, [сп], #0

За ово упутство не постоји знак узвика. Обратите пажњу на опкод ЛДП уместо ЛДР за учитавање две узастопне локације података из меморије у два µП регистра. Такође запамтите да је копирање из меморије у µП регистар учитавање, не треба се мешати са учитавањем датотеке са диска у РАМ, а копирање из µП регистра у РАМ је складиштење.

6.48 Потпрограм
Потпрограм је блок кода који извршава задатак, опционо заснован на неким аргументима и опционо враћа резултат. По конвенцији, регистри Р0 до Р3 (четири регистра) се користе за прослеђивање аргумената (параметара) потпрограму, а Р0 се користи за прослеђивање резултата назад позиваоцу. Потпрограм којем је потребно више од 4 улаза користи стек за додатне улазе. Да бисте позвали потпрограм, користите везу или инструкцију условног гранања. Синтакса за инструкцију везе је:

БЛ лабел

Где је БЛ код операције, а ознака представља почетак (адресу) потпрограма. Ова грана је безусловна, напред или назад у оквиру 128МБ. Синтакса за инструкцију условног гранања је:

Б.цонд лабел

Где је цонд услов, нпр. ек (једнако) или не (није једнако). Следећи програм има потпрограм доадд који додаје вредности два аргумента и враћа резултат у Р0:

ПОДРУЧЈЕ ПОДРУЧЈА, КОД, САМО ЧИТАЊЕ; Именујте овај блок кода
УЛАЗ ; Означите прву инструкцију за извршење
старт МОВ р0, #10; Подесите параметре
МОВ р1, #3
БЛ доадд ; Цалл потпрограм
стоп МОВ р0, #0к18; ангел_СВИреасон_РепортЕкцептион
ЛДР р1, =0к20026 ; АДП_Стоппед_АпплицатионЕкит
СВЦ #0к123456 ; АРМ полухостинг (раније СВИ)
доадд АДД р0, р0, р1; Шифра подрутине
БКС лр ; Повратак из потпрограма
;
КРАЈ ; Означите крај датотеке

Бројеви за додавање су децимални 10 и децимални 3. Прва два реда у овом блоку кода (програма) биће објашњена касније. Следећа три реда шаљу 10 у регистар Р0 и 3 у регистар Р1, а такође позивају потпрограм доадд. „Доадд“ је ознака која садржи адресу почетка потпрограма.

Потпрограм се састоји од само два реда. Први ред додаје садржај 3 од Р на садржај 10 од Р0 што дозвољава резултат 13 у Р0. Други ред са БКС опкодом и ЛР операндом се враћа из потпрограма у код позиваоца.

ЈЕЛ ТАКО
Оперативни код РЕТ у АРМ 64 се и даље бави потпрограмом, али функционише другачије од РТС у 6502 или РЕТ на к64, или комбинације „БКС ЛР“ у АРМ 64. У АРМ 64, синтакса за РЕТ је:

ПРАВО {Ксн}

Ова инструкција даје могућност програму да настави са потпрограмом који није потпрограм позиваоца, или само настави са неком другом инструкцијом и њеним следећим сегментом кода. Ксн је регистар опште намене који садржи адресу на коју програм треба да настави. Ово упутство се безусловно грана. Подразумевано је да је садржај Кс30 ако Ксн није дат.

Стандард позива процедуре
Ако програмер жели да његов код буде у интеракцији са кодом који је написао неко други или са кодом који је произвео компајлер, програмер треба да се договори са особом или писцем компајлера о правилима за коришћење регистра. За АРМ архитектуру, ова правила се називају Стандард позива процедура или ПЦС. То су споразуми између две или три стране. ПЦС наводи следеће:

  • Који µП регистри се користе за прослеђивање аргумената у функцију (потпрограм)
  • Који µП регистри се користе за враћање резултата функцији која обавља позив, а која је позната као позивалац
  • Који µП региструје функцију која се позива, а која је позната као позвани, може да се поквари
  • Који µП региструје позвани не може покварити

6.49 Прекиди
Постоје два типа кола контролера прекида доступних за АРМ процесор:

  • Стандардни контролер прекида: Руковалац прекида одређује који уређај захтева сервисирање читањем регистра битмапа уређаја у контролеру прекида.
  • Векторски контролер прекида (ВИЦ): даје приоритет прекидима и поједностављује одређивање који је уређај изазвао прекид. Након повезивања приоритета и адресе руковаоца са сваким прекидом, ВИЦ само потврђује сигнал прекида процесору ако је приоритет новог прекида већи од тренутног руковаоца прекидом.

Белешка : Изузетак се односи на грешку. Детаљи за контролер векторских прекида за 32-битни АРМ рачунар су следећи (64-битни је сличан):

Табела 6.49.1
АРМ векторски изузетак/прекид за 32-битни рачунар
Изузетак/прекид Схорт Ханд Адреса Висока адреса
Ресетовати РЕСЕТОВАЊЕ 0к00000000 0кфффф0000
Недефинисано упутство УНДЕФ 0к00000004 0кфффф0004
Софтверски прекид СВИ 0к00000008 0кфффф0008
Префетцх аборт пабт 0к0000000Ц 0кфффф000Ц
Датум абортуса ДАБТ 0к00000010 0кфффф0010
Резервисано 0к00000014 0кфффф0014
Захтев за прекидом ИРК 0к00000018 0кфффф0018
Захтев за брзи прекид ФИК 0к0000001Ц 0кфффф001Ц

Ово изгледа као аранжман за архитектуру 6502 где НМИ , БР , и ИРК може имати показиваче на страници нула, а одговарајуће рутине су високо у меморији (РОМ ОС). Кратки описи редова претходне табеле су следећи:

РЕСЕТОВАЊЕ
Ово се дешава када се процесор укључи. Он иницијализује систем и поставља стекове за различите режиме процесора. То је изузетак највишег приоритета. По уласку у обрађивач ресетовања, ЦПСР је у СВЦ режиму и ИРК и ФИК бит су постављени на 1, маскирајући све прекиде.

ДАТУМ АБОРТУСА
Други највећи приоритет. Ово се дешава када покушамо да читамо/пишемо на неважећу адресу или приступимо погрешној дозволи приступа. По уласку у Дата Аборт Хандлер, ИРК-ови ће бити онемогућени (И-бит сет 1) и ФИК ће бити омогућен. ИРК-ови су маскирани, али ФИК-ови остају немаскирани.

ФИК
Прекид највишег приоритета, ИРК & ФИКс, су онемогућени док се ФИК не обради.

ИРК
Прекид високог приоритета, ИРК руковалац, се уноси само ако нема текућег ФИК-а и прекида података.

Пре-Фетцх Аборт
Ово је слично прекиду података, али се дешава при неуспешном преузимању адресе. По уласку у руковалац, ИРК-ови су онемогућени, али ФИК-ови остају омогућени и могу се десити током прекида пре преузимања.

СВИ
Изузетак софтверског прекида (СВИ) настаје када се СВИ инструкција изврши, а ниједан од других изузетака вишег приоритета није означен.

Недефинисано упутство
Изузетак Недефинисана инструкција се јавља када инструкција која није у АРМ или Тхумб скупу инструкција достигне фазу извршења цевовода и ниједан од других изузетака није означен. Ово је исти приоритет као и СВИ јер се може десити једно по једно. То значи да инструкција која се извршава не може истовремено бити и СВИ инструкција и недефинисана инструкција.

АРМ руковање изузецима
Следећи догађаји се дешавају када се догоди изузетак:

  • Сачувајте ЦПСР у СПСР режима изузетака.
  • ПЦ се чува у ЛР режима изузетака.
  • Регистар везе је подешен на одређену адресу на основу тренутне инструкције. На пример: за ИСР, ЛР = последња извршена инструкција + 8.
  • Ажурирајте ЦПСР о изузетку.
  • Подесите рачунар на адресу обрађивача изузетака.

6.5 Упутства и подаци

Подаци се односе на променљиве (ознаке са њиховим вредностима) и низове и друге структуре које су сличне низу. Стринг је попут низа знакова. Низ целих бројева се види у једном од претходних поглавља. Инструкције се односе на операцијске кодове и њихове операнде. Програм се може написати са опкодовима и подацима помешаним у једном континуираном делу меморије. Овај приступ има недостатке, али се не препоручује.

Прво треба написати програм са упутствима, а затим са подацима (множина података је податак). Раздвајање између инструкција и података може бити само неколико бајтова. За програм, и упутства и подаци могу бити у једном или два одвојена одељка у меморији.

6.6 Архитектура Харварда

Један од раних рачунара се зове Харвард Марк И (1944). Строга архитектура Харварда користи један адресни простор за инструкције програма и други одвојени адресни простор за податке. То значи да постоје два одвојена сећања. У наставку је приказана архитектура:


Слика 6.71 Архитектура Харварда

Контролна јединица врши декодирање инструкција. Аритметичко-логичка јединица (АЛУ) обавља аритметичке операције са комбинационом логиком (капија). АЛУ такође обавља логичке операције (нпр. померање).

Код микропроцесора 6502, инструкција прво иде микропроцесору (контролној јединици) пре него што датум (једнина за податке) иде у µП регистар пре него што ступи у интеракцију. Ово захтева најмање два импулса такта и није истовремени приступ инструкцији и датуму. Са друге стране, харвардска архитектура обезбеђује истовремени приступ упутствима и подацима, при чему и инструкција и датум улазе у µП у исто време (опкод за контролну јединицу и датум у µП регистар), чувајући најмање један импулс такта. Ово је облик паралелизма. Овај облик паралелизма се користи у хардверском кешу модерних матичних плоча (погледајте следећу дискусију).

6.7 Кеш меморија

Кеш меморија (РАМ) је меморијски регион велике брзине (у поређењу са брзином главне меморије) који привремено чува инструкције програма или податке за будућу употребу. Кеш меморија ради брже од главне меморије. Обично се ова упутства или ставке података преузимају из недавне главне меморије и вероватно ће бити поново потребне ускоро. Примарна сврха кеш меморије је да повећа брзину сталног приступа истим локацијама главне меморије. Да би био ефикасан, приступ кешираним ставкама мора бити знатно бржи од приступа оригиналном извору упутстава или података који се назива Бацкинг Сторе.

Када је кеширање у употреби, сваки покушај приступа главној меморијској локацији почиње претрагом кеша. Ако је тражена ставка присутна, процесор је одмах преузима и користи. Ово се зове Цацхе Хит. Ако је претрага кеша неуспешна (промашај у кеш меморији), инструкција или ставка података мора да се преузме из складишта (главна меморија). У процесу преузимања тражене ставке, копија се додаје у кеш меморију за очекивану употребу у блиској будућности.

Јединица за управљање меморијом
Јединица за управљање меморијом (ММУ) је коло које управља главном меморијом и повезаним меморијским регистрима на матичној плочи. У прошлости је то било засебно интегрисано коло на матичној плочи; али данас је типично део микропроцесора. ММУ такође треба да управља кеш меморијом (коло) које је данас такође део микропроцесора. Кеш коло је било засебно интегрисано коло у прошлости.

Статичка РАМ меморија
Статички РАМ (СРАМ) има знатно брже време приступа од ДРАМ-а, иако на рачун знатно сложенијих кола. СРАМ бит ћелије заузимају много више простора на матрици интегрисаног кола него ћелије ДРАМ уређаја који је способан да складишти еквивалентну количину података. Главна меморија (РАМ) се обично састоји од ДРАМ-а (Динамиц РАМ).

Кеш меморија побољшава перформансе рачунара јер многи алгоритми које извршавају оперативни системи и апликације показују локалност референце. Локалитет референце се односи на поновну употребу података којима се недавно приступило. Ово се назива временска локација. На модерној матичној плочи, кеш меморија је у истом интегрисаном колу као и микропроцесор. Главна меморија (ДРАМ) је далеко и доступна је преко магистрала. Референтни локалитет се такође односи на просторни локалитет. Просторни локалитет има везе са већом брзином приступа подацима због физичке близине.

По правилу, региони кеш меморије су мали (по броју бајт локација) у поређењу са позадинским складиштем (главна меморија). Уређаји кеш меморије су дизајнирани за максималну брзину, што генерално значи да су сложенији и скупљи по биту од технологије складиштења података која се користи у складишту. Због своје ограничене величине, уређаји кеш меморије се брзо пуне. Када кеш меморија нема доступну локацију за складиштење новог уноса, старији унос се мора одбацити. Контролор кеша користи Политику замене кеша да би изабрао који ће унос кеша бити замењен новим уносом.

Циљ кеш меморије микропроцесора је да максимизира проценат кеш погодака током времена, чиме се обезбеђује највиша одржива брзина извршења инструкција. Да би се постигао овај циљ, логика кеширања мора да одреди које ће инструкције и подаци бити смештени у кеш меморију и задржани за скору будућу употребу.

Логика кеширања процесора нема гаранцију да ће кеширана ставка података икада поново бити коришћена након што је уметнута у кеш.

Логика кеширања се ослања на вероватноћу да због временске (понављајући се током времена) и просторне (просторне) локације, постоји врло добра шанса да ће се кешираним подацима приступити у блиској будућности. У практичним имплементацијама на модерним процесорима, погоци у кеш меморији се обично дешавају на 95 до 97 процената приступа меморији. Пошто је латенција кеш меморије мали део латенције ДРАМ-а, висока стопа погодака у кеш меморију доводи до значајног побољшања перформанси у поређењу са дизајном без кеш меморије.

Неки паралелизам са кешом
Као што је раније поменуто, добар програм у меморији има инструкције одвојене од података. У неким кеш системима, постоји кеш коло на „левој” страни процесора, а постоји још једно кеш коло „десно” од процесора. Леви кеш обрађује упутства програма (или апликације), а десни кеш обрађује податке истог програма (или исте апликације). Ово доводи до боље повећане брзине.

6.8 Процеси и нити

И ЦИСЦ и РИСЦ рачунари имају процесе. У софтверу је процес. Програм који се покреће (извршава) је процес. Оперативни систем долази са сопственим програмима. Док рачунар ради, покрећу се и програми оперативног система који омогућавају рад рачунара. То су процеси оперативног система. Корисник или програмер може писати сопствене програме. Када је покренут кориснички програм, то је процес. Није битно да ли је програм написан на асемблеру или на језику високог нивоа као што је Ц или Ц++. Свим процесима (корисничким или ОС) управља други процес који се назива „планер“.

Нит је као подпроцес који припада процесу. Процес може да почне и да се подели на нити, а затим да се настави као један процес. Процес без нити се може сматрати главном нити. Процесима и њиховим нитима управља исти планер. Сам планер је програм када је резидент на ОС диску. Када ради у меморији, планер је процес.

6.9 Вишеструка обрада

Нитовима се управља скоро као процесима. Мултипроцесирање значи покретање више од једног процеса у исто време. Постоје рачунари са само једним микропроцесором. Постоје рачунари са више од једног микропроцесора. Са једним микропроцесором, процеси и/или нити користе исти микропроцесор на начин преплитања (или временског пресека). То значи да процес користи процесор и зауставља се без завршетка. Други процес или нит користи процесор и зауставља се без завршетка. Затим, други процес или нит користи микропроцесор и зауставља се без завршетка. Ово се наставља све док сви процеси и нити које је распоредио у реду не буду имали удео у процесору. Ово се назива истовремена вишепроцесна обрада.

Када постоји више од једног микропроцесора, постоји паралелна вишепроцесна обрада, за разлику од конкурентности. У овом случају, сваки процесор покреће одређени процес или нит, различит од онога што други процесор покреће. Сви процесори на истој матичној плочи покрећу своје различите процесе и/или различите нити у исто време у паралелном вишепроцесирању. Процесима и нитима у паралелном вишепроцесирању још увек управља планер. Паралелна вишеструка обрада је бржа од истовремене вишепроцесне обраде.

У овом тренутку, читалац се може запитати колико је паралелна обрада бржа од истовремене обраде. То је зато што процесори деле (морају да користе у различито време) исту меморију и улазно/излазне портове. Па, уз коришћење кеша, укупни рад матичне плоче је бржи.

6.10 Пејџинг

Јединица за управљање меморијом (ММУ) је коло које је близу микропроцесора или у чипу микропроцесора. Он се бави меморијском мапом или страницом и другим проблемима са меморијом. Ни 6502 µП ни Цоммодоре-64 рачунар немају ММУ сам по себи (иако још увек постоји одређено управљање меморијом у Цоммодоре-64). Цоммодоре-64 управља меморијом тако што пребацује на страницу где је свака страница 256 10 дужине бајтова (100 16 дужине бајтова). Није било обавезно да рукује меморијом пејџингом. И даље може имати само меморијску мапу, а затим и програме који се само уклапају у своја различита одређена подручја. Па, страница је један од начина да се обезбеди ефикасна употреба меморије без много меморијских секција које не могу имати податке или програм.

Архитектура рачунара к86 386 објављена је 1985. Адресна магистрала је широка 32 бита. Дакле, укупно 2 32 = 4,294,967,296 адресног простора је могуће. Овај адресни простор је подељен на 1.048.576 страница = 1.024 КБ страница. Са овим бројем страница, једна страница се састоји од 4.096 бајтова = 4 КБ. Следећа табела приказује странице физичке адресе за к86 32-битну архитектуру:

Табела 6.10.1
Физичке адресабилне странице за к86 архитектуру
База 16 адреса Пагес База 10 адреса
ФФФФФ000 – ФФФФФФФФ Страна 1,048,575 4.294.963.200 – 4.294.967.295
ФФФФЕ000 – ФФФФЕФФФ Страна 1,044,479 4.294.959.104 – 4.294.963.199
ФФФФД000 – ФФФФДФФФ Страна 1,040,383 4.294.955.008 – 4.294.959.103
|
|
|
|
|
|
|
|
|
00002000 – 00002ФФФ страна 2 8.192 – 12.288
00001000 – 00001ФФФ Страна 1 4.096 – 8.191
00000000 – 00000ФФФ Страница 0 0 – 4.095

Апликација се данас састоји од више од једног програма. Један програм може заузети мање од једне странице (мање од 4096) или може заузети две или више страница. Дакле, апликација може заузети једну или више страница где је свака страница дугачка 4096 бајтова. Различити људи могу да напишу апликацију, при чему је свака особа додељена једној или више страница.

Обратите пажњу да је страница 0 од 00000000Х до 00000ФФФ
страница 1 је од 00001000Х до 00001ФФФХ, страница 2 је од 00002000 Х – 00002ФФФ Х , и тако даље. За 32-битни рачунар, постоје два 32-битна регистра у процесору за физичко адресирање страница: један за основну адресу, а други за индексну адресу. За приступ локацијама бајтова на страници 2, на пример, регистар за основну адресу треба да буде 00002 Х што је првих 20 битова (са леве стране) за почетне адресе странице 2. Остатак битова у опсегу од 000 Х то ФФФ Х налазе се у регистру који се назива „индексни регистар“. Дакле, свим бајтовима на страници може се приступити само повећањем садржаја у индексном регистру од 000 Х то ФФФ Х . Садржај у индексном регистру се додаје садржају који се не мења у основном регистру да би се добила ефективна адреса. Ова шема индексног адресирања важи и за остале странице.

Међутим, програм на асемблерском језику није написан за сваку страницу. За сваку страницу, програмер пише код почевши од странице 000 Х на страницу ФФФ Х . Пошто су кодови на различитим страницама повезани, компајлер користи индексно адресирање да повеже све повезане адресе на различитим страницама. На пример, под претпоставком да су страница 0, страница 1 и страница 2 за једну апликацију и свака има 555 Х адресе које су повезане једна са другом, компајлер компајлира на начин да када 555 Х странице 0 треба приступити, 00000 Х биће у базном регистру и 555 Х биће у индексном регистру. Када 555 Х на страници 1 треба приступити, 00001 Х биће у базном регистру и 555 Х биће у индексном регистру. Када 555 Х на страни 2 треба приступити, 00002 Х биће у основном регистру, а 555Х ће бити у индексном регистру. Ово је могуће јер се адресе могу идентификовати помоћу ознака (променљивих). Различити програмери морају да се договоре око назива ознака које ће се користити за различите адресе за повезивање.

Страница Виртуелна меморија
Страничење, као што је претходно описано, може се модификовати да би се повећала величина меморије у техници која се назива „Виртуелна меморија странице“. Под претпоставком да све странице физичке меморије, као што је претходно описано, имају нешто (инструкције и податке), нису све странице тренутно активне. Странице које тренутно нису активне шаљу се на чврсти диск и замењују се страницама са чврстог диска које треба да буду покренуте. На тај начин се повећава величина меморије. Како рачунар наставља да ради, странице које постану неактивне замењују се страницама на чврстом диску, које и даље могу бити странице које су послате из меморије на диск. Све ово ради Јединица за управљање меморијом (ММУ).

6.11 Проблеми

Читаоцу се саветује да реши све проблеме у једном поглављу пре него што пређе на следеће поглавље.

1) Наведите сличности и разлике ЦИСЦ и РИСЦ рачунарских архитектура. Наведите по један пример СИСЦ и РИСЦ рачунара.

2) а) Који су следећи називи за ЦИСЦ рачунар у смислу битова: бајт, реч, двострука реч, четворка реч и двострука четворореч.
б) Који су следећи називи за РИСЦ рачунар у смислу битова: бајт, полуреч, реч и двострука реч.
ц) Да или Не. Да ли двострука реч и четворореч значе исте ствари у ЦИСЦ и РИСЦ архитектури?

3 а) За к64, број бајтова за упутства асемблерског језика креће се од чега до чега?
б) Да ли је број бајтова за сва упутства асемблерског језика за АРМ 64 фиксиран? Ако да, колики је број бајтова за све инструкције?

4) Наведите најчешће коришћена упутства асемблерског језика за к64 и њихова значења.

5) Наведите најчешће коришћена упутства асемблерског језика за АРМ 64 и њихова значења.

6) Нацртајте означени блок дијаграм старог рачунара Харвард Арцхитецтуре. Објасните како се његове инструкције и карактеристике података користе у кешу савремених рачунара.

7) Разликујте процес и нит и дајте име процеса који управља процесима и нитима у већини рачунарских система.

8) Укратко објасните шта је мултипроцесирање.

9) а) Објасните пејџинг како је применљиво на архитектуру рачунара к86 386 µП.
б) Како се ова страница може модификовати да би се повећала величина целе меморије?