Assembler 8086 Register

Assembler 8086 Register

Thu 31 December 2009

En liten oversikt over registerene.


Vi har 5 forskjellige typar/kategoriar 16 bits register i en 8086 prosessor

Dersom en held seg til desse registera er en garantert at programmet kjøyrer på alle maskiner, sidan desse registera finst i alle 80x86 modellane

80386, 80486 og pentium har i tilegg til dessee også fleire utvidingar og register

*General purpose register (ax, bx, cx, dx)

*Pointer og index register (sp, bp, si, di)

*Segment register (cs, d, ss, es)

*Instruction pointer (ip)

*Flags (of, df, if, tf, sf, zf, af, pf, cf)

Som tidligare nevnt er alle 8086 register 16 bitar store, og general purpose registera ax, bx, cx, og dx er i tilegg delt opp i to, slik at vi får øvre og nedre del av registera, t.d ah og al.
Dette gir oss muligheten til å jobbe på kvar av dei to delane separat (2x 8 bit) eller heile registeret sett som eit (1 x 16bit).
Men det er viktig å huske at dersom ein endrar eine delen av registeret so vert og heile verdien til registeret endra, dvs at dersom du endrar verdien i t.d ah so vil også verdien til ax bli endra.

General purpose register:

ax = Accumulator
Vert brukt til å akkumulere resultat frå addisjon, subtraksjon, mm

bx = Base
Peikar ofte til start adressa (base) til en struktur i minnet

cx = Count
Vert ofte brukt til å spesifisere antall ganger en operasjon skal utførast

dx = Data
Vert brukt til å oppbevare data som programmet skal bruke, t.d dersom en har subrutiner og treng å mellomlagre resultat

Pointer og index register:

I kontrast til dei 4 general purpose registera er dei andre 8086 registera nærmare relatert til spesifikke operasjonar.

Stack pointer (sp)
Peikar alltid på toppen av prosessorens stack

Base pointer (bp)
Adresserar vanligvis variablar som er lagra i stabelen

Source index (si) og Destination index (di)
Er kjent som string register og skal hjelpe prosessoren i arbeidet med å prosessere byte strengar

NB! Merk at en byte string ikkjer er det samme som datatypen string som en er kjent med frå høgnivå språk. En byte string er rett og slett berre en sekvens med etterfølgande bytes

Segment register:

Dei fire segment registera (cs, dx, ss og es) lokaliserar starten på dei fire 64K segmenta i minnet.
Et program kan allokere meir en fire minne segment, men en må då swappe dei riktige verdiane inn og ut av et eller fleire av segment registera for å vere istand til å adressere dei ekstra segmenta.
Segment registera er spesialiserte og du kan ikkje utføre matte operasjonar direkte på segment registera. Du kan heller ikkje bruke dei til å lagre resultata frå andre operasjonar.

Code segment (cs)
Adresserar starten av programmets maskin kode i minnet

Data segment (ds)
Adresserar starten av programmets variablar i minnet

Stack segment (ss)
Adresserar starten av programmets stabel i minnet

Extra segxment (es)
Lokaliserar et ekstra data segment dersom nødvendig, men i mange program vil es og ds adressere samme del av minnet.

Instruction pointer:

Vert brukt til å spesifisere/peike på den maskin kode instruksjonen som skal utførast som neste, relativt til segmenta lokalisert av cs.
En referar sjelden/aldri til ip direkte, istadenfor brukar en instruksjonar som endra ip (og muligens cs) for og endre lokalisjonen til neste instruksjon som skal utførast. På denne måten kan ein endre flyten i programmet, t.d dersom ein kallar ei subrutien vil adressa til denne rutina bli lasta inn i ip (evt cs:ip paret).

Flagg:

Det er verdt å merke seg at flagg registeret er 16 bitar (som alle dei andre registera), men det vert berre 9 av dei 16 bitane vert brukt. Dei resterande 7 bitane er ikkje til noko nytte for program.
Individuelle flagg vert representert med en enkel bokstav (o, d, i, t, s, z, a, p og c), men kan også skrivast med en 'f' etter bokstaven for å indikere at det er flagg det er snakk om.

of - Overflow flagg
df - Direction flagg
if - Interrupt enable flagg
tf - Trap (single-step) flagg
sf - Sign flagg
zf - Zero flagg
af - Auxiliary flagg
pf - Parity flagg
cf - Carry flagg

Som oftast vil 8086 flagga reflektere resultatet av diverse instruksjonar og operasjonar. T.d etter addisjon, vil cf (carry flagg) indikere om resultatet inneheld en rest/carry
Overflow flagget indikerar om resultatet av en signed addisjon ikkje kan presenterast korrekt innanfor et gitt number av bitar.
Etterkvart som ein lærer fleire assembler instruksjonar vil ein sjå kva og korleis dei forskjellige kan brukast og kva rolle dei spelar for et programms handlingar

Tagged as : prolog assembler