• Здраво и добредојдовте на форумот на IT.mk.

    Доколку сеуште не сте дел од најголемата заедница на ИТ професионалци и ентузијасти во Македонија, можете бесплатно да се - процесот нема да ви одземе повеќе од 2-3 минути, а за полесна регистрација овозможивме и регистрирање со Facebook и Steam.

8086 – Регистри

  • Ја почнал/а темата
  • #1

Fiasco

Gaining Experience
2 март 2008
3,036
203
404
www.igorjanevski.com
Ако некој го интересира за регистрите на CPU 8086 еве можност да дознае нешто за нив. Незнам колку се слични овие регистри со оние на денешните процесори, но се надевам во суштина нема некоја разлика.

Процесорот 8086 има вкупно 14 регистри кои се достапни за програмерот. Осум од нив се познати како општи регистри т.е можат да бидат употребени од програмерот за манипулација со податоците. Секој од нив е 16 битови долг т.е содржи 16 битен бинарен број. Првите четири регистри се однесуваат како дата регистри. Тие се: ax, bx, cx и dx. Вторите четири регистри се index/pointer регистри. Тие се: sp, bp, si и di. Дата регистрите можат да бидат третирани како 16-битни регистри или како два 8-битни регистри. Секој 8-битен регистер може да се употребува независно од останатите.

Подолу се прикажани 16-битните регистри на Интел 8086 процесорот:


General Purpose 8086 Registers
Reg --High --Low --Name
AX -AH -AL -Accumulator
BX -BH -BL -Base
CX -CH -CL -Counter
DX -DH -DL -Data

16-Bit Pointer Registers
Reg --Name
SI -Source Index
DI -Destination Index
BP -Stack Frame Base Pointer
SP -Stack Pointer

Segment Registers
Reg --Name
CS -Code Segment
DS -Data Segment
ES -Extra Segment
SS -Stack Segment

AX - Accumulator Register
АX е главниот регистер кој константно се менува низ секоја програма. Тој е движечката сила. Сите останати регистри изгледа како само да му служат на АХ регистерот кој е нај употребуван.
8086 има неколку поврзани конекции помеѓу АХ или АL и останатите регистри:

Register Unique Relationship With AX
BX The xlat (translation) instruction uses AL.
DX Division, multiplication, port manipulation.
SI, DI Copy memory using string instructions and AX or AL.


BX - Base Register
Како додаток на главниот простор, можеш да употребуваш BX за пристап до меморијата; тоа е единствениот општонаменски регистер кој исто така работи како покажувач. За разлика од SI и DI, BX не работи со префиксот REP, или редоследни инструкции. По дефолт, мемориските операции кои употребуваат BX, користат DS регистер. Овој пример лоадира AL со бајт од конкретниот код:
mov al, BYTE PTR cs:[bx]

CX - Counter Register
Како додаток на главниот простор, CX се користи како повторувачки против удар. Префиксот REP, инструкцијата LOOP и инструкциите shift/rotate, сите тие се пребројуваат во CX или CL.
Има неколку недоследности во тоа како CPU ги третира loop точките. CX и REP префиксот.


DX - Data Register
Од друга страна, DX е најмалку разновидниот регистер во кој што можеби се наоѓа неговата најголема предност; често го користиме DX, безрезервно како регистер за зачувување на податоци без грижа дека податоците ќе бидат префрлани напред и назад. DX исто така го има главниот збор во поделбата на инструкциите. После 16-битна поделба, потсетникот е сместен во DX. DX регистерот се користи исто така со AU и со in и out инструкциите за да се прецизира бројот на порти.
Го користиме DX заедно со AX за да ги повратиме долгите интеџери на јазици на високо ниво. Најзначајниот збор е во DX, а low word е во AX.


BP - Base Pointer
Како што BX покажувачите се претпоставува дека се поврзани со DS сегментот, BP покажувачите се поврзани со стак сегментот SS. Можеш да го користиш DS или ЕS преовладувачки сегмент но тоа не ја содржи моќта на BP: брзо адресирање на стак податоците.
Повеќето рутини поставуваат стак рамки за влез на податоците кои што се пренесуваат на стакот.
Податоците на стакот изгледаат како следните:

The Stack Frame
Value Offset Location
Arg1 [BP+8] Higher address
Arg2 [BP+6]
Return segment [BP+4]
Return offset [BP+2]
Saved BP register [BP+0] Lower address

SI - Source Index
Како додаток на главниот простор, SI исто така се користи како изворен покажувач за редоследни и мемориски операции. Lodsb and lodsw претпоставуваат дека DS : DI укажуваат на изворните податоци, додека movsb and movsw претпоставуваат дека DS : SI укажуваат на изворот и ES : DI укажуваат на дестинацијата.

DI - Destination Index
Под предпоставка дека е поврзано со ES, scasb, stosb и слични инструкции ја имаат ES : DI како дестинација.

SP - Stack Pointer
Се што правиме влијае на стакот. Стак регистерот ја следи патеката на податоците и повратните адреси, и ги заштитува податоците од судир како скокаме од модул на модул.
Откако почетниот код на програмата го креирала стак покажувачот, покажувачот е постојано автоматски како што ние работиме. Секогаш кога ќе наидеме на некој регистер, стак покажувачот се адаптира за податоците. Кога и да повикаме рутина, процесорот ја вклучува повратната адреса на стакот, потоа ја става повратната адреса на инструкцискиот покажувач кога ја напуштаме рутината со ред инструкции.


CS - Code Segment
CS регистерот секогаш укажува на сегментот каде нашиот код се наоѓа – ако контролата на програмата помине успешно во нашата рутина може да претпоставиме дека CS регистерот е валиден. Никогаш не го лоадираме CS рачно; тоа секогаш се лоадира автоматски.


DS - Data Segment
Кога јазикот на високо ниво ја префрла контролата на нашата процедура, DS укажува на дефолт сегментот на податоци. Поточно, DS укажува на DGROUP која ги вклулува сите сегменти на податоци во близина. DS е резервирано за сите јазици на високо ниво и мора да биде повратена кога процедурата завршува.


ES - Extra Segment

Ова е навистина регистерот со повеќе сегменти. По дефолт, нема вредност, и Мајкрософт јазиците на високо ниво никогаш не претпоставуваат дека ЕS e зачуван. Како и DS никогаш не можеш да го лоадираш ES регистерот директно.
Обично се користи со DI иако може да се прицврсти за ES како сегмент кој доминира и да се употребува ES со SI, BX или BP. ES е корисен за читање на неколку бајти од подалечната меморија како што е ром биос верзијата од F000 сегментот.


SS - Stack Segment
Како што DS регистерот го контролира сегментот со податоци, SS регистерот работи со SP регистерот на одржувањето на стак сегментот.
Никогаш не треба да се менува SS во процедура повикана од јазик на високо ниво освен ако не сме го распределиле внатрешниот стак за друга задача која бара повеќе стак простор. Запомни дека треба да се смени SS и SP во исто време и да се осигура дека се оневозможени прекини, или било кој настан кој користи макар и мал дел од стак просторот.
 

Нови мислења

Последни Теми

Статистика

Теми
43,581
Мислења
823,904
Членови
28,079
Најнов член
ivannalex
На врв Дно