Архитектура и програмирање микропроцесора intel 8086 (2)

35
Архитектура и програмирање микропроцесора Intel 8086 (2) Декларисање променљивих Инструкције за пренос података Инструкције за конверзију Аритметичке инструкције Логичке инструкције

Upload: gauri

Post on 14-Jan-2016

32 views

Category:

Documents


2 download

DESCRIPTION

Архитектура и програмирање микропроцесора Intel 8086 (2). Декларисање променљивих Инструкције за пренос података Инструкције за конверзију Аритметичке инструкције Логичке инструкције. Декларисање променљивих. У оквиру сегмента података могу се декларисати скаларне и структурне променљиве. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Архитектура и програмирање микропроцесора  Intel 8086  (2)

Архитектура и програмирање

микропроцесора Intel 8086 (2)

Декларисање променљивих Инструкције за пренос података Инструкције за конверзију Аритметичке инструкције Логичке инструкције

Page 2: Архитектура и програмирање микропроцесора  Intel 8086  (2)

Декларисање променљивих У оквиру сегмента података могу се

декларисати скаларне и структурне променљиве.

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

Приликом декларације може се (али и не мора) задати иницијална вредност променљиве.

Page 3: Архитектура и програмирање микропроцесора  Intel 8086  (2)

Декларисање променљивих За декларисање променљивих обима

бајт могу се употребити асемблерске директиве db, или byte и sbyte.

imepr db ?

лабела

директиванедефинисана

иницијална вредност

Page 4: Архитектура и програмирање микропроцесора  Intel 8086  (2)

Декларисање променљивих db је директива која се користила у

старијим верзијама асемблера (пре МАСМ 6.x).

У новијим верзијама могу се користити byte и sbyte за декларисање неозначених и означених података обима једног бајта.

Page 5: Архитектура и програмирање микропроцесора  Intel 8086  (2)

Декларисање променљивих Када су декларисане, променљиве се

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

Page 6: Архитектура и програмирање микропроцесора  Intel 8086  (2)

Декларисање променљивихdsegsegmenti db ?j byte ?k sbyte ?dsegends

…mov i,0mov j,245mov k,-5mov al,imov j,al

DOS иницијализује ове променљиве на 0 али не можемо да се ослонимо на то!

Page 7: Архитектура и програмирање микропроцесора  Intel 8086  (2)

Декларисање променљивихdsegsegmenti db 0j byte 255k sbyte -1dsegends

Водите рачуна да асемблер не проверава тип податка већ само обим!

Page 8: Архитектура и програмирање микропроцесора  Intel 8086  (2)

Декларисање променљивих За декларисање променљивих обима

речи (16-битне) могу се употребити асемблерске директиве dw, или word и sword.

rec dw ?neoznr word ?oznrec sword ?inic0 word 0inicM1 sword -1iniBig word 65535iniOfs dw rec

Page 9: Архитектура и програмирање микропроцесора  Intel 8086  (2)

Декларисање променљивих За декларисање променљивих обима

дупле речи (32-битне) могу се употребити асемблерске директиве dd, или dword и sdword.

За декларисање низова употребићемо

imeniza osnovitip n dup (?)

лабела која представља име низа тип (обим)

елемента низа

број елеменат

а низа

дуплицирање елеменат у заградама n

пута

иницијална вредност

Page 10: Архитектура и програмирање микропроцесора  Intel 8086  (2)

Декларисање променљивих Код декларисања вишедимензионалних

низова морамо водити рачуна да се елементи тих низова смештају у линеаран низ меморијских локација.

Постоје два начина смештања column-order (FORTRAN, BASIC) row-order (Pascal, C, …)

Page 11: Архитектура и програмирање микропроцесора  Intel 8086  (2)

Инструкције за пренос података Инструкције за пренос података су mov, xchg, lea, lds, les, push, pop, lahf, sahf …

Инструкција mov има неколико облика:mov reg,regmov mem,regmov reg,memmov mem,immmov reg,immmov segreg,mem16

mov segreg,reg16

mov mem16,segregmov reg16,segreg

Page 12: Архитектура и програмирање микропроцесора  Intel 8086  (2)

Инструкције за пренос података Инструкцијом mov не може се копирати

садржај из једне у другу меморијску локацију нити напунити сегментни регистар непосредном вредношћу.

У свим варијантама операнди морају бити истог обима.

Не утиче на маркере!

Page 13: Архитектура и програмирање микропроцесора  Intel 8086  (2)

Инструкције за пренос података Инструкција xchg мења вредности

својим операндима. xchg reg,mem

xchg reg,reg Не утиче на маркере!

Page 14: Архитектура и програмирање микропроцесора  Intel 8086  (2)

Инструкције за пренос података Инструкцијe lds и les служе за

пуњење пара 16-битног регистра опште намене и сегментног регистра (DS или ES).

lds reg16,mem32

les reg16,mem32

Не утиче на маркере!

Page 15: Архитектура и програмирање микропроцесора  Intel 8086  (2)

Инструкције за пренос података Инструкција lea има облик

lеа reg16,mem Пуни 16-битни регистар ефективном

адресом меморијске локације. Не утиче на маркере!

Page 16: Архитектура и програмирање микропроцесора  Intel 8086  (2)

Инструкције за пренос података Инструкције push и pop служе за упис и

читање из магацинама обликpush reg16

pop reg16

push serregpop segreg ;osim CSpush mem ; 16-bitnepop mem ; 16-bitne

Не утиче на маркере!

Page 17: Архитектура и програмирање микропроцесора  Intel 8086  (2)

Инструкције за пренос података Инструкције lahf и sahf служе за

пуњење регистра AH нижим бајтом статусног регистра, односно за копирање регистра AH у нижи бајт статусног регистра.

lahfsahf

Page 18: Архитектура и програмирање микропроцесора  Intel 8086  (2)

Инструкције за конверзију Инструкције за конверзију су cbw, cwd и xlat.

Инструкција cbw врши знаковно проширење 8-битне вредности из AL у 16-битну вредност у AX.

Инструкција cwd врши знаковно проширење 16-битне вредности из AX у 32-битну вредност у DX:AX.

Page 19: Архитектура и програмирање микропроцесора  Intel 8086  (2)

Инструкције за конверзију Инструкцијa xlat преводи вредност у

AL на основу табеле у меморији чија је базна адреса у регистру BX:

temp:=al+bxal:=ds:[temp]

Инструкције из ове групе немају експлицитних операнада и не утичу на маркере.

Page 20: Архитектура и програмирање микропроцесора  Intel 8086  (2)

Аритметичке инструкције Инструкције за сабирање: add, adc, inc,

aaa, daa. Инструкције за одузимање: sub, sbb,

dec, aas, das. Инструкција за поређење cmp. Инструкција за промену знака neg. Инструкције за множење: mul, imul,

aam. Инструкције за дељење: div, idiv, aad.

Page 21: Архитектура и програмирање микропроцесора  Intel 8086  (2)

Аритметичке инструкције Синтакса инструкција add и adc слична

је синтакси mov инструкције осим што није могуће сабирање са сегментним регистром.

Инструкција adc врши сабирање са преносом.

Обе инструкције утичу на исти начин на маркере и то на ОF, CF, SF, ZF, AF и PF.

Page 22: Архитектура и програмирање микропроцесора  Intel 8086  (2)

Аритметичке инструкције Синтакса инструкцијe inc је:

inc reginc meminc reg16

Ова инструкција увећава свој операнд за један и осим CF утиче на исти начин на маркере као и

add operand,1

Page 23: Архитектура и програмирање микропроцесора  Intel 8086  (2)

Аритметичке инструкције Инструкције AAA и DAA служе за ASCII и

децимално подешавање код BCD аритметике.

У првом случају ради се заправо о непакованом формату BCD бројева, а у другом о пакованом.

Page 24: Архитектура и програмирање микропроцесора  Intel 8086  (2)

Аритметичке инструкцијеif ((al and 0Fh)> 9 or (AF=1)) then

al:=al+6ah:=ah+1AF:=1CF:=1

elseAF:=0CF:=0

endifal:=al and 0Fh

Page 25: Архитектура и програмирање микропроцесора  Intel 8086  (2)

Аритметичке инструкцијеif ((al and 0Fh)> 9 or (AF=1)) then

al:=al+6AF:=1

endifif ((al > 9Fh) or (CF=1)) then

al:=al+60hCF:=1

endif

Page 26: Архитектура и програмирање микропроцесора  Intel 8086  (2)

Аритметичке инструкције Инструкције за одузимање sub, sbb, dec,

aas и das имају слични синтаксу као и њихови аналогони за сабирање.

Наравно ради се о одузимању, одузимању са позајмицом, смањењу за 1 и подешавањима код одузимања.

Page 27: Архитектура и програмирање микропроцесора  Intel 8086  (2)

Аритметичке инструкцијеif ((al and 0Fh)> 9 or (AF=1)) then

al:=al-6ah:=ah-1AF:=1CF:=1

elseAF:=0CF:=0

endifal:=al and 0Fh

Page 28: Архитектура и програмирање микропроцесора  Intel 8086  (2)

Аритметичке инструкцијеif ((al and 0Fh)> 9 or (AF=1)) then

al:=al-6AF:=1

endifif ((al > 9Fh) or (CF=1)) then

al:=al-60hCF:=1

endif

Page 29: Архитектура и програмирање микропроцесора  Intel 8086  (2)

Аритметичке инструкције Инструкција за поређење има синтаксу:

cmp reg,regcmp reg,memcmp mem,reg cmp reg,immcmp mem,imm

Ова инструкција одузима од одредишног изворни операнд, резултат не смешта нигде, а на основу резултатат поставља ZF, SF, OF и CF.

Page 30: Архитектура и програмирање микропроцесора  Intel 8086  (2)

Аритметичке инструкције Инструкција за негацију има синтаксу:

neg dest; dest:=0-dest Ова инструкција утиче на AF, SF, PF и

ZF. Ако је операнд био нула његов знак се

не мења али се поставља CF. Негација најмањег негативног броја не мења операнд али поставља OF.

Page 31: Архитектура и програмирање микропроцесора  Intel 8086  (2)

Аритметичке инструкције Инструкција mul служи за неозначено а

imul за означено множење.mul regmul memimul regimul mem

Ако је операнд 8-битан онда се извршава

ax:=al*operand8

Ако је операнд 16-битан извршава сеdx:ax:=ax*operand16

Page 32: Архитектура и програмирање микропроцесора  Intel 8086  (2)

Аритметичке инструкције Вредности маркера AF, PF, SF, ZF нису

дефинисане после ових инструкција. Инструкција aam служи за ASCII

подешавање после множења. Она подразумева да су помножена два 8-битна броја и да је резултат у ax.

ah:=ax div 10

al:=ax mod 10

Page 33: Архитектура и програмирање микропроцесора  Intel 8086  (2)

Аритметичке инструкције Синтакса инструкција за дељење div,

idiv и aad слична је онима за множење. Код 8-битног дељења дели се ax 8-

битним операндом после чега је количник у al а остатак у ah.

Код 16-битног дељења дели се dx:ax 16-битним операндом после чега је количник у ax а остатак у dx.

Инструкција аad обављаal:=ah*10+alah:=0

Page 34: Архитектура и програмирање микропроцесора  Intel 8086  (2)

Логичке инструкцијеand/or/xor reg,regand/or/xor mem,regand/or/xor reg,memand/or/xor reg,immand/or/xor mem,imm

not regnot mem

Page 35: Архитектура и програмирање микропроцесора  Intel 8086  (2)

Логичке инструкције Инструкција not не утиче на маркере,

док остале утичу тако што бришу CF и OF, ZF постављају на основу резултата, SF на основу бита највеће тежине резултата а AF је недефинисан.