Rikujtim: Kompjuterët përdorin bazën numerike 2 për paraqitje të numrave - numrat binar.
Kompjuteri ka:
Brenda CPU gjenden njësi memorike të veçanta që njihen si regjistra dhe përdoren për ruajtje të përkohshme të të dhënave.
Radhitja e vargjeve të bajtave në memorie
Procesori 8086 është mikroprocesor 16-bitësh i dizajnuar nga Intel ndërmjet viteve 1976-1978.
8086 ka qenë implementimi i parë i arkitekturës së instruksioneve x86, e cila është arkitektura më e përdorur sot.
Procesori ekzekuton urdhëra të definuara në instruction setin (ISA).
Gjuha e ulët ku urdhërat jepen në nivel të ISA njihet si assembly language.
Vegla për emulim të 8086 - emu8086.
Notacioni i numrave në kod:
b
0
dhe kanë prapashtesën h
o
Regjistrat e procesorit 8086
Regjistrat mbajnë vlera 16-bitëshe.
Disa regjistra lejojnë qasjen në bajtin e ulët dhe të lartë.
Shembull: Regjistri AX
është regjistër 16 bitësh ku AH
paraqet 8 bitat e lartë ndërsa AL
paraqet 8 bitat e ulët.
Regjistrat e përgjitshëm të 8086
AX (AH/AL) - regjistri akumulator
Përdoret për veprime aritmetikore dhe logjike. Në 8086 nuk jemi të obliguar t’i ruajmë rezultatet e llogaritjeve në akumulator.
BX (BH/BL) - regjistri bazë
Përdoret për të ruajtur shtesat (offset) e adresave gjatë qasjes në memorie.
CX (CH/CL) - regjistri i numërimit
Përdoret për të numëruar ciklet e unazës, anëtarët e vargut, etj.
DX (DH/DL) - regjistri i të dhënave
Përdoret për rezultatet e shumëzimit dhe pjesëtimit dhe specifikim të porteve në disa operacione hyrëse/dalëse.
SI - source index regjistri
Përdoret si pointer për adresim në të dhëna, shpesh për operacione me stringje.
Llogaritet si shtesa (offset) e adresës që gjendet në DS
.
DI - destination index regjistri
Përdoret si pointer për adresim në të dhëna, shpesh për operacione me stringje.
Llogaritet si shtesa (offset) e adresës që gjendet në ES
.
BP - base pointer
Përdoret për qasje në variablat lokale në stack.
Llogaritet si shtesa (offset) e adresës që gjendet në SS
.
SP - stack pointer
Tregon adresën e elementit në maje të stackut.
Llogaritet si shtesa (offset) e adresës që gjendet në SS
.
Segment regjistrat të 8086
Përdorën gjatë llogaritjes së adresave për qasje në memorie.
Gjatë adresimit përdorim këto terme:
Vlerat e adresës që gjenden në segment regjistrat CS
, DS
, SS
, ES
quhen segment.
Vlerat e adresës që gjendet në regjistrat e përgjithshëm BX
, SI
, DI
, BP
quhen offset (shtesë).
Gjatë qasjes në memorie adresa llogaritet duke shumëzuar vlerën e segment regjistrit me 10h
(segmenti) dhe duke e mbledhur vlerën rezultuese me vlerën e regjistrit të përgjithshëm (offsetin).
Adresat e fituara njihen si adresa efektive.
Aritmetika me adresa bëhet për qëllim të qasjes në më shumë adresa sesa vetëm 16 bit (madhësia e regjistrave).
Procesorët pasardhës (32-bit dhe 64-bit) nuk kanë nevojë për operacione të tilla pasi që regjistrat kanë hapësirë të mjaftueshme për të paraqitur numër më të madh të adresave ($2^{32}$ dhe $2^{64}$).
Detyrë: Supozohet se në segment regjistër gjendet vlera 0AB45h
dhe në regjistër të përgjitshëm gjendet vlera 00023h
. Të llogaritet adresa efektive që paraqesin këta regjistra.
Për gjenerim të adresave përdoren kombinimet në tabelën e mëposhtme.
Nga secila kolonë mund të marrim (opsionalisht) nga një element dhe t’i mbledhim së bashku.
Relacionet e përgjithshme regjistër-segment:
BX
me DS
SI
me DS
DI
me ES
BP
me SS
Relacionet speciale:
IP
me CS
SP
me SS
.Regjistrat special të 8086
CS
segmentit për ta adresuar instruksionin aktual.Statuset e procesorit
Carry Flag ndezet nëse kemi bartje nga MSB gjatë mbledhjes.
Overflow Flag ndezet nëse mbledhja e dy numrave pozitiv jep numër negativ ose mbledhja e dy numrave negativ jep numër pozitiv.
Programimi në gjuhë të asamblerit
Sikur në gjuhët tjera programuese, programet shkruhen si listë e urdhërave.
Programi fillon ekzekutimin nga lart-poshtë dhe kur mbaron kthen kontrollën te sistemi operativ.
Programet zakonisht fillohen me direktivën ORG 100h
.
ORG
(origin) nuk është urdhër por direktivë që i tregon asamblerit të fillojë shkruarjen e kodit të makinës nga një shtesë e caktuar në segmentin aktual.
Kjo për shkak që programet e vjetra .COM kanë nisur ekzekutimin nga offseti 0x100
.
Komentet shkruhen duke filluar me pikëpresje. Gjithçka pas ;
injorohet nga asambleri.
Urdhëri RET
bën kthimin nga nënprogrami, ngjashëm me urdhërin return
të gjuhëve të larta.
Programi minimal:
ORG 100h
RET
që është ekuivalent me programin në gjuhën C:
void main() {
return;
}
Urdhëri MOV
është i ngjashëm me operatorin e barazimit =
në gjuhë të larta programuese.
MOV DST, SRC
merr vlerën nga burimi SRC
dhe e ruan në destinacionin DST
.
Kjo mund të ilustrohet me pseudokodin:
DST = SRC
Programi në vijim ruan vlerën heksadecimale 0x1234
në regjistrin AX
dhe pastaj mbyllet:
ORG 100h
MOV AX, 01234h
RET
Pseudokodi në C:
void main() {
AX = 0x1234;
return;
}
Programi që shfaq shkronjën A
në ekran:
ORG 100h ; directive required for a COM program.
MOV AX, 0B800h ; set AX to hexadecimal value of B800h.
MOV DS, AX ; copy value of AX to DS.
MOV CL, 'A' ; set CL to ASCII code of 'A', it is 41h.
MOV CH, 01011111b ; set CH to binary value.
MOV BX, 15Eh ; set BX to 15Eh.
MOV [BX], CX ; copy contents of CX to memory at B800:015E
RET ; returns to operating system.