1 / 34

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

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

avalon
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Декларисање променљивих • У оквиру сегмента података могу се декларисати скаларне и структурне променљиве. • Касније у програму се може приступати тим променљивама на основу њихових симболичких имена датих у декларацији у облику лабела. • Приликом декларације може се (али и не мора) задати иницијална вредност променљиве.

  3. лабела недефинисана иницијална вредност директива Декларисање променљивих • За декларисање променљивих обима бајт могу се употребити асемблерске директиве db, или byteи sbyte. imepr db ?

  4. Декларисање променљивих • dbје директива која се користила у старијим верзијама асемблера (пре МАСМ 6.x). • У новијим верзијама могу се користити byteи sbyteза декларисање неозначених и означених података обима једног бајта.

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

  6. DOS иницијализује ове променљиве на 0 али не можемо да се ослонимо на то! Декларисање променљивих dseg segment i db ? j byte ? k sbyte ? dseg ends … mov i,0 mov j,245 mov k,-5 mov al,i mov j,al

  7. Декларисање променљивих dseg segment i db 0 j byte 255 k sbyte -1 dseg ends • Водите рачуна да асемблер не проверава тип податка већ само обим!

  8. Декларисање променљивих • За декларисање променљивих обима речи (16-битне) могу се употребити асемблерске директиве dw, или wordи sword. rec dw ? neoznr word ? oznrec sword ? inic0 word 0 inicM1 sword -1 iniBig word 65535 iniOfs dw rec

  9. иницијална вредност лабелакоја представља име низа дуплицирање елеменат у заградама n пута тип (обим) елемента низа број елемената низа Декларисање променљивих • За декларисање променљивих обима дупле речи (32-битне) могу се употребити асемблерске директиве dd, или dwordи sdword. • За декларисање низова употребићемо imenizaosnovitipn dup (?)

  10. Декларисање променљивих • Код декларисања вишедимензионалних низова морамо водити рачуна да се елементи тих низова смештају у линеаран низ меморијских локација. • Постоје два начина смештања • column-order (FORTRAN, BASIC) • row-order (Pascal, C, …)

  11. Инструкције за пренос података • Инструкције за пренос података су mov, xchg, lea, lds, les, push, pop, lahf, sahf … • Инструкција mov има неколико облика: mov reg,reg mov mem,reg mov reg,mem mov mem,imm mov reg,imm mov segreg,mem16 mov segreg,reg16 mov mem16,segreg mov reg16,segreg

  12. Инструкције за пренос података • Инструкцијом movне може се копирати садржај из једне у другу меморијску локацију нити напунити сегментни регистар непосредном вредношћу. • У свим варијантама операнди морају бити истог обима. • Не утиче на маркере!

  13. Инструкције за пренос података • Инструкција xchgмења вредности својим операндима. xchg reg,mem xchg reg,reg • Не утиче на маркере!

  14. Инструкције за пренос података • Инструкцијelds иles служе за пуњење пара 16-битног регистра опште намене и сегментног регистра (DS или ES). lds reg16,mem32 les reg16,mem32 • Не утиче на маркере!

  15. Инструкције за пренос података • Инструкција lea има облик lеа reg16,mem • Пуни 16-битни регистар ефективном адресом меморијске локације. • Не утиче на маркере!

  16. Инструкције за пренос података • Инструкције push иpopслуже за упис и читање из магацинама облик push reg16 pop reg16 push serreg pop segreg ;osim CS push mem ; 16-bitne pop mem ; 16-bitne • Не утиче на маркере!

  17. Инструкције за пренос података • Инструкције lahf иsahfслуже за пуњење регистра AH нижим бајтом статусног регистра, односно за копирање регистра AH у нижи бајт статусног регистра. lahf sahf

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

  19. Инструкције за конверзију • Инструкцијa xlatпреводи вредност у AL на основу табеле у меморијичија је базна адреса у регистру BX: temp:=al+bx al:=ds:[temp] • Инструкције из ове групе немају експлицитних операнада и не утичу на маркере.

  20. Аритметичке инструкције • Инструкције за сабирање: add, adc, inc, aaa, daa. • Инструкције за одузимање: sub, sbb, dec, aas, das. • Инструкција за поређење cmp. • Инструкција за промену знака neg. • Инструкције за множење: mul, imul, aam. • Инструкције за дељење: div, idiv, aad.

  21. Аритметичке инструкције • Синтакса инструкција add и adc слична је синтакси mov инструкције осим што није могуће сабирање са сегментним регистром. • Инструкција adc врши сабирање са преносом. • Обе инструкције утичу на исти начин на маркере и то на ОF, CF, SF, ZF, AF и PF.

  22. Аритметичке инструкције • Синтакса инструкцијeinc је: inc reg inc mem inc reg16 • Ова инструкција увећава свој операнд за један и осим CF утиче на исти начин на маркере као и addoperand,1

  23. Аритметичке инструкције • Инструкције AAA и DAA служе за ASCII и децимално подешавање код BCD аритметике. • У првом случају ради се заправо о непакованом формату BCDбројева, а у другом о пакованом. if ((al and 0Fh)> 9 or (AF=1)) then al:=al+6 ah:=ah+1 AF:=1 CF:=1 else AF:=0 CF:=0 endif al:=al and 0Fh

  24. Аритметичке инструкције if ((al and 0Fh)> 9 or (AF=1)) then al:=al+6 AF:=1 endif if ((al and 0Fh)> 9 or (CF=1)) then al:=al+60h CF:=1 endif

  25. Аритметичке инструкције • Инструкције за одузимање sub, sbb, dec, aas и das имају слични синтаксу као и њихови аналогони за сабирање. • Наравно ради се о одузимању, одузимању са позајмицом, смањењу за 1 и подешавањима код одузимања.

  26. Аритметичке инструкције if ((al and 0Fh)> 9 or (AF=1)) then al:=al-6 ah:=ah-1 AF:=1 CF:=1 else AF:=0 CF:=0 endif al:=al and 0Fh

  27. Аритметичке инструкције if ((al and 0Fh)> 9 or (AF=1)) then al:=al-6 AF:=1 endif if ((al and 0Fh)> 9 or (CF=1)) then al:=al-60h CF:=1 endif

  28. Аритметичке инструкције • Инструкција за поређење има синтаксу: cmp reg,reg cmp reg,mem cmp mem,reg cmp reg,imm cmp mem,imm • Ова инструкција одузима од одредишног изворни операнд, резултат не смешта нигде, а на основу резултатат поставља ZF, SF, OF и CF.

  29. Аритметичке инструкције • Инструкција за негацију има синтаксу: neg dest; dest:=0-dest • Ова инструкција утиче на AF, SF, PF и ZF. • Ако је операнд био нула његов знак се не мења али се поставља CF. Негација најмаљег негативног броја не мења операнд али поставља OF.

  30. Аритметичке инструкције • Инструкција mulслужи за неозначено а imul за означено множење. mul reg mul mem imul reg imul mem • Ако је операнд 8-битан онда се извршава ax:=al*operand8 • Ако је операнд 16-битан извршава се dx:ax:=ax*operand16

  31. Аритметичке инструкције • Вредности маркера AF, PF, SF, ZF нису дефинисане после ових инструкција. • Инструкција aam служи за ASCII подешавање после множења. Она подразумева да су помножена два 8-битна броја и да је резултату ax. ah:=ax div 10 al:=ax mod 10

  32. Аритметичке инструкције • Синтакса инструкција за дељење div, idiv и aad слична је онима за множење. • Код 8-битног дељења дели се ax 8-битним операндом после чега је количник у al а остатак у ah. • Код 16-битног дељења дели се dx:ax16-битним операндом после чега је количник у ax а остатак у dx. • Инструкција аad обавља al:=ah*10+al ah:=0

  33. Логичке инструкције and/or/xor reg,reg and/or/xor mem,reg and/or/xor reg,mem and/or/xor reg,imm and/or/xor mem,imm not reg not mem

  34. Логичке инструкције • Инструкција not не утиче на маркере, док остале утичу тако што бришу CFи OF, ZF постављају на основу резултата, SF на основу бита највеће тежине резултата а AF је недефинисан.

More Related