Архитектура и програмирање микропроцесора intel 8086 (2)
DESCRIPTION
Архитектура и програмирање микропроцесора Intel 8086 (2). Декларисање променљивих Инструкције за пренос података Инструкције за конверзију Аритметичке инструкције Логичке инструкције. Декларисање променљивих. У оквиру сегмента података могу се декларисати скаларне и структурне променљиве. - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Архитектура и програмирање микропроцесора Intel 8086 (2)](https://reader035.vdocuments.site/reader035/viewer/2022062221/568146e8550346895db42127/html5/thumbnails/1.jpg)
Архитектура и програмирање
микропроцесора Intel 8086 (2)
Декларисање променљивих Инструкције за пренос података Инструкције за конверзију Аритметичке инструкције Логичке инструкције
![Page 2: Архитектура и програмирање микропроцесора Intel 8086 (2)](https://reader035.vdocuments.site/reader035/viewer/2022062221/568146e8550346895db42127/html5/thumbnails/2.jpg)
Декларисање променљивих У оквиру сегмента података могу се
декларисати скаларне и структурне променљиве.
Касније у програму се може приступати тим променљивама на основу њихових симболичких имена датих у декларацији у облику лабела.
Приликом декларације може се (али и не мора) задати иницијална вредност променљиве.
![Page 3: Архитектура и програмирање микропроцесора Intel 8086 (2)](https://reader035.vdocuments.site/reader035/viewer/2022062221/568146e8550346895db42127/html5/thumbnails/3.jpg)
Декларисање променљивих За декларисање променљивих обима
бајт могу се употребити асемблерске директиве db, или byte и sbyte.
imepr db ?
лабела
директиванедефинисана
иницијална вредност
![Page 4: Архитектура и програмирање микропроцесора Intel 8086 (2)](https://reader035.vdocuments.site/reader035/viewer/2022062221/568146e8550346895db42127/html5/thumbnails/4.jpg)
Декларисање променљивих db је директива која се користила у
старијим верзијама асемблера (пре МАСМ 6.x).
У новијим верзијама могу се користити byte и sbyte за декларисање неозначених и означених података обима једног бајта.
![Page 5: Архитектура и програмирање микропроцесора Intel 8086 (2)](https://reader035.vdocuments.site/reader035/viewer/2022062221/568146e8550346895db42127/html5/thumbnails/5.jpg)
Декларисање променљивих Када су декларисане, променљиве се
могу користити у програму навођењем њиховог имена а асемблер то име аутоматски замењује одговарајућим офсетом у односу на почетак сегмента података.
![Page 6: Архитектура и програмирање микропроцесора Intel 8086 (2)](https://reader035.vdocuments.site/reader035/viewer/2022062221/568146e8550346895db42127/html5/thumbnails/6.jpg)
Декларисање променљивих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)](https://reader035.vdocuments.site/reader035/viewer/2022062221/568146e8550346895db42127/html5/thumbnails/7.jpg)
Декларисање променљивихdsegsegmenti db 0j byte 255k sbyte -1dsegends
Водите рачуна да асемблер не проверава тип податка већ само обим!
![Page 8: Архитектура и програмирање микропроцесора Intel 8086 (2)](https://reader035.vdocuments.site/reader035/viewer/2022062221/568146e8550346895db42127/html5/thumbnails/8.jpg)
Декларисање променљивих За декларисање променљивих обима
речи (16-битне) могу се употребити асемблерске директиве dw, или word и sword.
rec dw ?neoznr word ?oznrec sword ?inic0 word 0inicM1 sword -1iniBig word 65535iniOfs dw rec
![Page 9: Архитектура и програмирање микропроцесора Intel 8086 (2)](https://reader035.vdocuments.site/reader035/viewer/2022062221/568146e8550346895db42127/html5/thumbnails/9.jpg)
Декларисање променљивих За декларисање променљивих обима
дупле речи (32-битне) могу се употребити асемблерске директиве dd, или dword и sdword.
За декларисање низова употребићемо
imeniza osnovitip n dup (?)
лабела која представља име низа тип (обим)
елемента низа
број елеменат
а низа
дуплицирање елеменат у заградама n
пута
иницијална вредност
![Page 10: Архитектура и програмирање микропроцесора Intel 8086 (2)](https://reader035.vdocuments.site/reader035/viewer/2022062221/568146e8550346895db42127/html5/thumbnails/10.jpg)
Декларисање променљивих Код декларисања вишедимензионалних
низова морамо водити рачуна да се елементи тих низова смештају у линеаран низ меморијских локација.
Постоје два начина смештања column-order (FORTRAN, BASIC) row-order (Pascal, C, …)
![Page 11: Архитектура и програмирање микропроцесора Intel 8086 (2)](https://reader035.vdocuments.site/reader035/viewer/2022062221/568146e8550346895db42127/html5/thumbnails/11.jpg)
Инструкције за пренос података Инструкције за пренос података су 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)](https://reader035.vdocuments.site/reader035/viewer/2022062221/568146e8550346895db42127/html5/thumbnails/12.jpg)
Инструкције за пренос података Инструкцијом mov не може се копирати
садржај из једне у другу меморијску локацију нити напунити сегментни регистар непосредном вредношћу.
У свим варијантама операнди морају бити истог обима.
Не утиче на маркере!
![Page 13: Архитектура и програмирање микропроцесора Intel 8086 (2)](https://reader035.vdocuments.site/reader035/viewer/2022062221/568146e8550346895db42127/html5/thumbnails/13.jpg)
Инструкције за пренос података Инструкција xchg мења вредности
својим операндима. xchg reg,mem
xchg reg,reg Не утиче на маркере!
![Page 14: Архитектура и програмирање микропроцесора Intel 8086 (2)](https://reader035.vdocuments.site/reader035/viewer/2022062221/568146e8550346895db42127/html5/thumbnails/14.jpg)
Инструкције за пренос података Инструкцијe lds и les служе за
пуњење пара 16-битног регистра опште намене и сегментног регистра (DS или ES).
lds reg16,mem32
les reg16,mem32
Не утиче на маркере!
![Page 15: Архитектура и програмирање микропроцесора Intel 8086 (2)](https://reader035.vdocuments.site/reader035/viewer/2022062221/568146e8550346895db42127/html5/thumbnails/15.jpg)
Инструкције за пренос података Инструкција lea има облик
lеа reg16,mem Пуни 16-битни регистар ефективном
адресом меморијске локације. Не утиче на маркере!
![Page 16: Архитектура и програмирање микропроцесора Intel 8086 (2)](https://reader035.vdocuments.site/reader035/viewer/2022062221/568146e8550346895db42127/html5/thumbnails/16.jpg)
Инструкције за пренос података Инструкције push и pop служе за упис и
читање из магацинама обликpush reg16
pop reg16
push serregpop segreg ;osim CSpush mem ; 16-bitnepop mem ; 16-bitne
Не утиче на маркере!
![Page 17: Архитектура и програмирање микропроцесора Intel 8086 (2)](https://reader035.vdocuments.site/reader035/viewer/2022062221/568146e8550346895db42127/html5/thumbnails/17.jpg)
Инструкције за пренос података Инструкције lahf и sahf служе за
пуњење регистра AH нижим бајтом статусног регистра, односно за копирање регистра AH у нижи бајт статусног регистра.
lahfsahf
![Page 18: Архитектура и програмирање микропроцесора Intel 8086 (2)](https://reader035.vdocuments.site/reader035/viewer/2022062221/568146e8550346895db42127/html5/thumbnails/18.jpg)
Инструкције за конверзију Инструкције за конверзију су cbw, cwd и xlat.
Инструкција cbw врши знаковно проширење 8-битне вредности из AL у 16-битну вредност у AX.
Инструкција cwd врши знаковно проширење 16-битне вредности из AX у 32-битну вредност у DX:AX.
![Page 19: Архитектура и програмирање микропроцесора Intel 8086 (2)](https://reader035.vdocuments.site/reader035/viewer/2022062221/568146e8550346895db42127/html5/thumbnails/19.jpg)
Инструкције за конверзију Инструкцијa xlat преводи вредност у
AL на основу табеле у меморији чија је базна адреса у регистру BX:
temp:=al+bxal:=ds:[temp]
Инструкције из ове групе немају експлицитних операнада и не утичу на маркере.
![Page 20: Архитектура и програмирање микропроцесора Intel 8086 (2)](https://reader035.vdocuments.site/reader035/viewer/2022062221/568146e8550346895db42127/html5/thumbnails/20.jpg)
Аритметичке инструкције Инструкције за сабирање: add, adc, inc,
aaa, daa. Инструкције за одузимање: sub, sbb,
dec, aas, das. Инструкција за поређење cmp. Инструкција за промену знака neg. Инструкције за множење: mul, imul,
aam. Инструкције за дељење: div, idiv, aad.
![Page 21: Архитектура и програмирање микропроцесора Intel 8086 (2)](https://reader035.vdocuments.site/reader035/viewer/2022062221/568146e8550346895db42127/html5/thumbnails/21.jpg)
Аритметичке инструкције Синтакса инструкција add и adc слична
је синтакси mov инструкције осим што није могуће сабирање са сегментним регистром.
Инструкција adc врши сабирање са преносом.
Обе инструкције утичу на исти начин на маркере и то на ОF, CF, SF, ZF, AF и PF.
![Page 22: Архитектура и програмирање микропроцесора Intel 8086 (2)](https://reader035.vdocuments.site/reader035/viewer/2022062221/568146e8550346895db42127/html5/thumbnails/22.jpg)
Аритметичке инструкције Синтакса инструкцијe inc је:
inc reginc meminc reg16
Ова инструкција увећава свој операнд за један и осим CF утиче на исти начин на маркере као и
add operand,1
![Page 23: Архитектура и програмирање микропроцесора Intel 8086 (2)](https://reader035.vdocuments.site/reader035/viewer/2022062221/568146e8550346895db42127/html5/thumbnails/23.jpg)
Аритметичке инструкције Инструкције AAA и DAA служе за ASCII и
децимално подешавање код BCD аритметике.
У првом случају ради се заправо о непакованом формату BCD бројева, а у другом о пакованом.
![Page 24: Архитектура и програмирање микропроцесора Intel 8086 (2)](https://reader035.vdocuments.site/reader035/viewer/2022062221/568146e8550346895db42127/html5/thumbnails/24.jpg)
Аритметичке инструкције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)](https://reader035.vdocuments.site/reader035/viewer/2022062221/568146e8550346895db42127/html5/thumbnails/25.jpg)
Аритметичке инструкције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)](https://reader035.vdocuments.site/reader035/viewer/2022062221/568146e8550346895db42127/html5/thumbnails/26.jpg)
Аритметичке инструкције Инструкције за одузимање sub, sbb, dec,
aas и das имају слични синтаксу као и њихови аналогони за сабирање.
Наравно ради се о одузимању, одузимању са позајмицом, смањењу за 1 и подешавањима код одузимања.
![Page 27: Архитектура и програмирање микропроцесора Intel 8086 (2)](https://reader035.vdocuments.site/reader035/viewer/2022062221/568146e8550346895db42127/html5/thumbnails/27.jpg)
Аритметичке инструкције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)](https://reader035.vdocuments.site/reader035/viewer/2022062221/568146e8550346895db42127/html5/thumbnails/28.jpg)
Аритметичке инструкције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)](https://reader035.vdocuments.site/reader035/viewer/2022062221/568146e8550346895db42127/html5/thumbnails/29.jpg)
Аритметичке инструкције Инструкција за поређење има синтаксу:
cmp reg,regcmp reg,memcmp mem,reg cmp reg,immcmp mem,imm
Ова инструкција одузима од одредишног изворни операнд, резултат не смешта нигде, а на основу резултатат поставља ZF, SF, OF и CF.
![Page 30: Архитектура и програмирање микропроцесора Intel 8086 (2)](https://reader035.vdocuments.site/reader035/viewer/2022062221/568146e8550346895db42127/html5/thumbnails/30.jpg)
Аритметичке инструкције Инструкција за негацију има синтаксу:
neg dest; dest:=0-dest Ова инструкција утиче на AF, SF, PF и
ZF. Ако је операнд био нула његов знак се
не мења али се поставља CF. Негација најмањег негативног броја не мења операнд али поставља OF.
![Page 31: Архитектура и програмирање микропроцесора Intel 8086 (2)](https://reader035.vdocuments.site/reader035/viewer/2022062221/568146e8550346895db42127/html5/thumbnails/31.jpg)
Аритметичке инструкције Инструкција mul служи за неозначено а
imul за означено множење.mul regmul memimul regimul mem
Ако је операнд 8-битан онда се извршава
ax:=al*operand8
Ако је операнд 16-битан извршава сеdx:ax:=ax*operand16
![Page 32: Архитектура и програмирање микропроцесора Intel 8086 (2)](https://reader035.vdocuments.site/reader035/viewer/2022062221/568146e8550346895db42127/html5/thumbnails/32.jpg)
Аритметичке инструкције Вредности маркера AF, PF, SF, ZF нису
дефинисане после ових инструкција. Инструкција aam служи за ASCII
подешавање после множења. Она подразумева да су помножена два 8-битна броја и да је резултат у ax.
ah:=ax div 10
al:=ax mod 10
![Page 33: Архитектура и програмирање микропроцесора Intel 8086 (2)](https://reader035.vdocuments.site/reader035/viewer/2022062221/568146e8550346895db42127/html5/thumbnails/33.jpg)
Аритметичке инструкције Синтакса инструкција за дељење 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)](https://reader035.vdocuments.site/reader035/viewer/2022062221/568146e8550346895db42127/html5/thumbnails/34.jpg)
Логичке инструкције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)](https://reader035.vdocuments.site/reader035/viewer/2022062221/568146e8550346895db42127/html5/thumbnails/35.jpg)
Логичке инструкције Инструкција not не утиче на маркере,
док остале утичу тако што бришу CF и OF, ZF постављају на основу резултата, SF на основу бита највеће тежине резултата а AF је недефинисан.