Walang kundisyon na mga transition. Mga pangunahing kaalaman sa pagprograma ng mga MP device (Lecture) Control transfer commands

  • 10.01.2024

Kasama ng mga paraan ng mga kalkulasyon ng aritmetika, ang sistema ng pagtuturo ng microprocessor ay mayroon ding paraan ng lohikal na conversion ng data. Sa pamamagitan ng lohikal na ibig sabihin namin ang mga naturang pagbabagong-anyo ng data, na batay sa mga tuntunin ng pormal na lohika.

Gumagana ang pormal na lohika sa antas ng totoo at maling mga pahayag. Para sa isang microprocessor, ito ay karaniwang nangangahulugan ng 1 at 0, ayon sa pagkakabanggit. Ang computer ay katutubong sa wika ng mga zero at isa, ngunit ang pinakamaliit na yunit ng data kung saan gumagana ang mga tagubilin ng makina ay ang byte. Gayunpaman, sa antas ng system, kadalasan ay kinakailangan na makapagpatakbo sa napakababang antas—ang antas ng kaunti.

kanin. 29. Mga tool sa pagpoproseso ng lohikal na data


Kasama sa mga paraan ng lohikal na pagbabago ng data ang mga lohikal na utos at lohikal na operasyon. Ang operand ng pagtuturo ng assembler ay karaniwang isang expression, na kung saan ay isang kumbinasyon ng mga operator at operand. Kabilang sa mga operator na ito ay maaaring mayroon ding mga operator na nagpapatupad ng mga lohikal na operasyon sa mga expression na bagay.

Bago suriin ang mga tool na ito nang detalyado, isaalang-alang natin kung ano ang lohikal na data mismo at kung anong mga operasyon ang ginagawa dito.

Lohikal na datos

Ang teoretikal na batayan para sa lohikal na pagproseso ng data ay pormal na lohika. Mayroong ilang mga sistema ng lohika. Isa sa pinakasikat ay propositional calculus. Ang pahayag ay anumang pahayag na maaaring sabihin sa alinman totoo, o mali.

Ang propositional calculus ay isang hanay ng mga panuntunan na ginagamit upang matukoy ang katotohanan o kamalian ng ilang kumbinasyon ng mga pahayag.

Ang propositional calculus ay napakaharmonya na pinagsama sa mga prinsipyo ng pagpapatakbo ng computer at ang mga pangunahing pamamaraan ng pagprograma nito. Ang lahat ng mga bahagi ng computer hardware ay binuo sa logic chips. Ang sistema para sa kumakatawan sa impormasyon sa isang computer sa pinakamababang antas ay batay sa konsepto ng kaunti. Medyo, na mayroong dalawang estado lamang (0 (false) at 1 (true)), natural na umaangkop sa propositional calculus.

Ayon sa teorya, ang mga sumusunod na lohikal na operasyon ay maaaring isagawa sa mga pahayag (sa mga bit).


1. Negasyon (lohikal HINDI) - isang lohikal na operasyon sa isang operand na ang resulta ay ang kabaligtaran ng orihinal na operand.

Ang operasyong ito ay natatanging nailalarawan sa sumusunod na talahanayan ng katotohanan (Talahanayan 12).

Talahanayan 12. Talahanayan ng katotohanan para sa lohikal na negation

2. Lohikal na karagdagan (logical inclusive O) - isang lohikal na operasyon sa dalawang operand na ang resulta ay true (1) kung ang isa o parehong operand ay totoo (1), at false (0) kung ang parehong operand ay false (0).

Ang operasyong ito ay inilarawan gamit ang sumusunod na talahanayan ng katotohanan (Talahanayan 13).

Talahanayan 13. Talahanayan ng katotohanan para sa lohikal na kasama OR

3. Lohikal na pagpaparami (lohikal AT) - isang lohikal na operasyon sa dalawang operand na nagsusuri sa true (1) kung ang parehong operand ay nagsusuri sa true (1). Sa lahat ng iba pang mga kaso, ang halaga ng operasyon ay false (0).

Ang operasyong ito ay inilarawan gamit ang sumusunod na talahanayan ng katotohanan (Talahanayan 14).

Talahanayan 14. Talahanayan ng katotohanan para sa lohikal na AT

4. Lohikal na eksklusibong karagdagan (lohikal na eksklusibo O) - isang lohikal na operasyon sa dalawang operand na ang resulta ay true (1) kung isa lamang sa dalawang operand ang true (1), at false (0) kung ang parehong operand ay false (0) o " truth" (1). Ang operasyong ito ay inilarawan gamit ang sumusunod na talahanayan ng katotohanan (Talahanayan 15).

Talahanayan 15. Talahanayan ng katotohanan para sa lohikal na eksklusibong OR

Ang sistema ng pagtuturo ng microprocessor ay naglalaman ng limang mga tagubilin na sumusuporta sa mga operasyong ito. Ang mga tagubiling ito ay nagsasagawa ng mga lohikal na operasyon sa mga bit ng operand. Ang mga sukat ng mga operand, natural, ay dapat na pareho. Halimbawa, kung ang laki ng mga operand ay isang salita (16 bits), kung gayon ang lohikal na operasyon ay unang ginanap sa zero bits ng mga operand, at ang resulta nito ay nakasulat sa lugar ng bit 0 ng resulta. Pagkatapos ay sunod-sunod na inuulit ng command ang mga pagkilos na ito sa lahat ng mga bit mula sa una hanggang sa ikalabinlima.

Mga lohikal na utos

Ang sistema ng pagtuturo ng microprocessor ay may sumusunod na hanay ng mga utos na sumusuporta sa pagtatrabaho sa lohikal na data:

1) at operand_1, operand_2 – logical multiplication operation. Ang utos ay gumaganap ng isang bitwise na lohikal na AT operasyon (conjunction) sa mga bit ng operand operand_1 at operand_2. Ang resulta ay isinulat sa operand_1;

2) og operand_1, operand_2 – lohikal na pagpapatakbo ng karagdagan. Ang utos ay gumaganap ng isang bitwise na lohikal na OR na operasyon (disjunction) sa mga bit ng operand operand_1 at operand_2. Ang resulta ay isinulat sa operand_1;

3) hog operand_1, operand_2 – lohikal na eksklusibong operasyon ng karagdagan. Ang pagtuturo ay gumaganap ng isang bitwise na lohikal na eksklusibong OR na operasyon sa mga bit ng operand operand_1 at operand_2. Ang resulta ay nakasulat sa lugar ng operand;

4) pagsubok operand_1, operand_2 – "suriin" na operasyon (gamit ang lohikal na pagpaparami). Ang utos ay gumaganap ng isang bitwise na lohikal AT operasyon sa mga bit ng operand operand_1 at operand_2. Ang estado ng mga operand ay nananatiling pareho, tanging ang mga flag na zf, sf, at pf ay nagbabago, na ginagawang posible na pag-aralan ang estado ng mga indibidwal na piraso ng operand nang hindi binabago ang kanilang estado;

5) hindi operand - lohikal na negation operation. Ang utos ay gumaganap ng isang bitwise inversion (pinapalitan ang halaga ng kabaligtaran) ng bawat bit ng operand. Ang resulta ay nakasulat sa lugar ng operand.

Upang maunawaan ang papel ng mga lohikal na tagubilin sa sistema ng pagtuturo ng microprocessor, napakahalagang maunawaan ang saklaw ng kanilang aplikasyon at mga tipikal na pamamaraan para sa paggamit ng mga ito sa programming.

Posible ang paggamit ng mga lohikal na utos alokasyon indibidwal na mga bit sa operand para sa layunin ng pagtatakda, pag-reset, pag-invert o simpleng pagsuri para sa isang tiyak na halaga.

Upang ayusin ang naturang gawain gamit ang mga bits, karaniwang gumaganap ang operand_2 bilang isang maskara. Gamit ang mga bits na nakatakda sa 1 bit ng mask na ito, ang operand_1 bits na kailangan para sa isang partikular na operasyon ay tinutukoy. Ipakita natin kung anong mga lohikal na utos ang maaaring gamitin para sa layuning ito:

1) upang itakda ang ilang mga bit sa 1, gamitin ang command og operand_1, operand_2.

Sa pagtuturo na ito, ang operand_2, na nagsisilbing mask, ay dapat maglaman ng isang bits sa halip ng mga bit na iyon na dapat itakda sa 1 sa operand_1;

2) upang i-reset ang ilang mga bit sa 0, gamitin ang command at operand_1, operand_2.

Sa pagtuturong ito, ang operand_2, na nagsisilbing mask, ay dapat maglaman ng mga zero bits sa halip ng mga bit na iyon na dapat itakda sa 0 sa operand_1;

3) command hog operand_1, inilapat ang operand_2:

a) upang malaman kung aling mga bit sa operand_1 at operand ang magkaiba;

b) upang baligtarin ang estado ng tinukoy na mga bit sa operand_1.

Kapag isinagawa ang hog command, ang mga piraso ng mask na interesado sa amin (operand_2) ay dapat na isa, ang natitira ay dapat na zero;

Upang suriin ang katayuan ng tinukoy na mga bit, gamitin ang command test operand_1, operand_2 (suriin ang operand_1).

Ang mga naka-check na bit ng operand_1 sa mask (operand_2) ay dapat na may halaga ng isa. Ang operasyon ng test command ay katulad ng algorithm ng and command, ngunit hindi nito binabago ang halaga ng operand_1. Ang resulta ng utos ay itakda ang halaga ng zero flag zf:

1) kung zf = 0, kung gayon ang lohikal na pagpaparami ay nagresulta sa isang zero na resulta, i.e. isang unit bit ng mask, na hindi tumugma sa katumbas na isang bit ng operand;

2) kung zf = 1, kung gayon ang lohikal na pagpaparami ay nagresulta sa isang di-zero na resulta, i.e. kahit isa ang isang bit ng mask ay tumutugma sa katumbas na isang bit ng operand_1.

Upang mag-react sa resulta ng test command, ipinapayong gamitin ang jump command jnz label (Jump if Not Zero) - tumalon kung ang zero flag zf ay non-zero, o isang command na may kabaligtaran na aksyon - jz label (Jump kung Zero) - tumalon kung ang zero flag zf = 0.

Ang susunod na dalawang command ay naghahanap para sa unang bit ng operand na nakatakda sa 1. Maaari kang maghanap mula sa simula o dulo ng operand:

1) bsf operand_1, operand_2 (Bit Scanning Forward) – pag-scan ng mga bit pasulong. Sinusuri ng pagtuturo ang mga piraso ng operand_2 mula sa pinakamaliit na makabuluhan hanggang sa pinakamahalaga (mula sa bit 0 hanggang sa pinakamahalagang bit) na naghahanap ng unang bit na nakatakda sa 1. Kung may matagpuan, ang bilang ng bit na ito ay ipinasok sa operand_1 bilang isang halaga ng integer. Kung ang lahat ng bits ng operand_2 ay 0, kung gayon ang zero flag na zf ay nakatakda sa 1, kung hindi, ang zf flag ay na-reset sa 0;

2) bsr operand_1, operand_2 (Bit Scanning Reset) – pag-scan ng mga bit sa reverse order. Ang pagtuturo ay tumitingin (nagsa-scan) ng mga piraso ng operand_2 mula sa pinakamahalaga hanggang sa hindi gaanong makabuluhan (mula sa pinaka makabuluhang bit hanggang sa bit 0) na naghahanap para sa unang bit na nakatakda sa 1. Kung ang isa ay natagpuan, ang bilang ng bit na ito ay ipinasok sa operand_1 bilang isang halaga ng integer. Mahalaga na ang posisyon ng unang isang bit sa kaliwa ay binibilang pa rin na may kaugnayan sa bit 0. Kung ang lahat ng mga bit ng operand_2 ay katumbas ng 0, kung gayon ang zero flag na zf ay nakatakda sa 1, kung hindi, ang zf flag ay ire-reset sa 0 .

Sa pinakabagong mga modelo ng Intel microprocessors, marami pang command ang lumitaw sa pangkat ng mga lohikal na command na nagbibigay-daan sa access sa isang partikular na bit ng operand. Ang operand ay maaaring matatagpuan alinman sa memorya o sa isang pangkalahatang layunin na rehistro. Ang posisyon ng bit ay tinukoy ng offset ng bit na may kaugnayan sa hindi bababa sa makabuluhang bit ng operand. Maaaring tukuyin ang offset na halaga bilang direktang halaga o nasa isang pangkalahatang layunin na rehistro. Maaari mong gamitin ang mga resulta ng bsr at bsf command bilang offset na halaga. Ang lahat ng mga tagubilin ay nagtatalaga ng halaga ng napiling bit sa bandila ng CE

1) bt operand, bit offset (Bit Test) – suriin ang bit. Inilipat ng command ang bit value sa cf flag;

2) bts operand, bit offset (Bit Test and Set) – pagsuri at pagtatakda ng bit. Ang pagtuturo ay naglilipat ng bit value sa CF flag at pagkatapos ay itinatakda ang bit na susuriin sa 1;

3) btr operational, bit offset (Bit Test and Reset) – pagsuri at pag-reset ng bit. Inilipat ng pagtuturo ang halaga ng kaunti sa bandila ng CF at pagkatapos ay itatakda ang bit na ito sa 0;

4) btc operand, bit offset (Bit Test and Convert) – suriin at baligtarin ang bit. Ang pagtuturo ay naglilipat ng halaga ng kaunti sa cf flag at pagkatapos ay binabaligtad ang halaga ng bit na iyon.

Shift Commands

Ang mga tagubilin sa pangkat na ito ay nagbibigay din ng pagmamanipula ng mga indibidwal na piraso ng mga operand, ngunit sa ibang paraan kaysa sa mga lohikal na tagubilin na tinalakay sa itaas.

Ang lahat ng mga tagubilin sa shift ay naglilipat ng mga bit sa field ng operand sa kaliwa o kanan depende sa opcode. Ang lahat ng shift command ay may parehong istraktura - cop operand, shift_counter.

Bilang ng mga inilipat na bits - shift_counter – ay matatagpuan sa lugar ng pangalawang operand at maaaring tukuyin sa dalawang paraan:

1) statically, na kinabibilangan ng pagtukoy ng isang nakapirming halaga gamit ang isang agarang operand;

2) pabago-bago, na nangangahulugan ng pag-iimbak ng shift counter value sa cl register bago isagawa ang shift instruction.

Batay sa laki ng cl register, malinaw na ang halaga ng shift counter ay maaaring mula 0 hanggang 255. Ngunit sa katunayan, hindi ito ganap na totoo. Para sa mga layunin ng pag-optimize, tinatanggap lamang ng microprocessor ang halaga limang hindi bababa sa makabuluhang bit counter, ibig sabihin, ang halaga ay mula 0 hanggang 31.

Ang lahat ng shift command ay nagtakda ng carry flag cf.

Habang inililipat ang mga bit sa kabila ng operand, unang pinindot nila ang carry flag, na itinatakda ito na katumbas ng halaga ng susunod na bit na nagtatapos sa labas ng operand. Kung saan susunod ang bit na ito ay depende sa uri ng pagtuturo ng shift at algorithm ng programa.

Batay sa prinsipyo ng pagpapatakbo, ang mga utos ng shift ay maaaring nahahati sa dalawang uri:

1) linear shift command;

2) mga utos ng cyclic shift.

Mga utos ng linear shift

Kasama sa mga utos ng ganitong uri ang mga utos na nagsasagawa ng shift ayon sa sumusunod na algorithm:

1) ang susunod na "tinulak" na bit ay nagtatakda ng bandila ng CF;

2) ang bit na ipinakilala sa operand mula sa kabilang dulo ay may halagang 0;

3) kapag ang susunod na bit ay inilipat, ito ay napupunta sa CF flag, at ang halaga ng nakaraang shifted bit ay nawala! Ang mga linear shift command ay nahahati sa dalawang subtype:

1) lohikal na linear shift command;

2) arithmetic linear shift command.

Kasama sa mga lohikal na linear shift command ang sumusunod:

1) shl operand, shift_counter (Shift Logical Left) – lohikal na paglipat sa kaliwa. Ang mga nilalaman ng operand ay inilipat sa kaliwa ng bilang ng mga bit na tinutukoy ng halaga ng shift_count. Sa kanan (sa posisyon ng hindi bababa sa makabuluhang bit) ay ipinasok ang mga zero;

2) shr operand, shift_counter (Shift Logical Right) – lohikal na paglipat sa kanan. Ang mga nilalaman ng operand ay inilipat sa kanan sa pamamagitan ng bilang ng mga bit na tinutukoy ng halaga ng shift_count. Sa kaliwa (sa posisyon ng pinaka makabuluhang, sign bit) ay ipinasok ang mga zero.

Ipinapakita ng Figure 30 kung paano gumagana ang mga utos na ito.

kanin. 30. Scheme ng pagpapatakbo ng mga linear logical shift command


Ang mga tagubilin sa linear shift ng aritmetika ay naiiba sa mga tagubilin sa lohikal na paglilipat dahil gumagana ang mga ito sa isang espesyal na paraan sa sign bit ng operand.

1) sal operand, shift_counter (Shift Arithmetic Left) – paglilipat ng arithmetic sa kaliwa. Ang mga nilalaman ng operand ay inilipat sa kaliwa ng bilang ng mga bit na tinutukoy ng halaga ng shift_count. Sa kanan (sa posisyon ng hindi bababa sa makabuluhang bit) ay mga zero. Ang utos ng sal ay hindi nagpapanatili ng tanda, ngunit nagtatakda ng bandila na may/sa kaso ng pagbabago ng tanda isa pang maaaring iurong bit. Kung hindi, ang sal command ay ganap na katulad ng shl command;

2) sar operand, shift_counter (Shift Arithmetic Right) – paglilipat ng arithmetic sa kanan. Ang mga nilalaman ng operand ay inilipat sa kanan sa pamamagitan ng bilang ng mga bit na tinutukoy ng halaga shift_counter. Sa kaliwa, ang mga zero ay ipinasok sa operand. Pinapanatili ng sar command ang sign, ibinabalik ito pagkatapos ilipat ang bawat susunod na bit.

Ipinapakita ng Figure 31 kung paano gumagana ang mga tagubilin sa linear arithmetic shift.


kanin. 31. Scheme ng pagpapatakbo ng linear arithmetic shift commands

I-rotate ang Mga Utos

Ang mga rotate shift command ay mga utos na nag-iimbak ng mga halaga ng mga bit na inililipat. Mayroong dalawang uri ng mga utos ng pag-ikot:

1) simpleng cyclic shift command;

2) cyclic shift command sa pamamagitan ng carry flag cf.

Sa mga team simpleng paikot Kasama sa mga shift ang:

1) rol operand, shift_counter (Rotate Left) – cyclic shift sa kaliwa. Ang mga nilalaman ng operand ay inilipat sa kaliwa ng bilang ng mga bit na tinutukoy ng operand shift_counter. Ang mga left-shifted bit ay isinusulat sa parehong operand sa kanan;

2) gog operand, shift_counter (Rotate Right) – cyclic shift sa kanan. Ang mga nilalaman ng operand ay inilipat sa kanan sa pamamagitan ng bilang ng mga bit na tinutukoy ng operand shift_counter. Ang mga right-shifted bit ay isinusulat sa parehong operand sa kaliwa.

kanin. 32. Scheme ng pagpapatakbo ng mga simpleng cyclic shift command


Tulad ng makikita mula sa Figure 32, ang mga simpleng cyclic shift na tagubilin ay nagsasagawa ng isang kapaki-pakinabang na aksyon sa panahon ng kanilang operasyon, ibig sabihin: ang cyclically shifted bit ay hindi lamang itinulak sa operand mula sa kabilang dulo, ngunit sa parehong oras ang halaga nito ay nagiging halaga ng bandila ng CE

I-rotate ang Mga Utos sa pamamagitan ng carry flag CF naiiba sa simpleng cyclic shift na mga utos dahil ang bit na inililipat ay hindi agad napupunta sa operand mula sa kabilang dulo nito, ngunit unang nakasulat sa carry flag CE Tanging ang susunod na pagpapatupad ng shift instruction na ito (ipagpalagay na ito ay naisakatuparan sa isang loop) ay nagreresulta sa dati nang inilipat na bit na inilagay sa kabilang dulo ng operand(Larawan 33).

Sa cyclic shift commands sa pamamagitan ng carry flag ang mga sumusunod ay nauugnay:

1) rcl operand, shift_counter (Rotate through Carry Left) – cyclic shift pakaliwa sa pamamagitan ng carry.

Ang mga nilalaman ng operand ay inilipat sa kaliwa ng bilang ng mga bit na tinutukoy ng operand shift_counter. Ang mga inilipat na bit ay halili na nagiging halaga ng carry flag cf.

2) rcg operand, shift_counter (Rotate through Carry Right) – cyclic shift pakanan through carry.

Ang mga nilalaman ng operand ay inilipat sa kanan sa pamamagitan ng bilang ng mga bit na tinutukoy ng operand shift_counter. Ang mga inilipat na bit ay halili na nagiging halaga ng carry flag CF.

kanin. 33. Cyclic shift commands sa pamamagitan ng carry flag CF


Mula sa Figure 33 ay malinaw na kapag lumilipat sa pamamagitan ng carry flag, lumilitaw ang isang intermediate na elemento, sa tulong kung saan, sa partikular, posible na palitan ang mga cyclically shifted bits, sa partikular, mismatch bit sequences.

Sa pamamagitan ng hindi pagtutugma ng kaunting pagkakasunud-sunod pagkatapos nito, ang ibig naming sabihin ay isang aksyon na nagbibigay-daan sa amin na sa ilang paraan ay i-localize at i-extract ang mga kinakailangang seksyon ng sequence na ito at isulat ang mga ito sa ibang lokasyon.

Mga karagdagang shift command

Ang command system ng mga pinakabagong modelo ng Intel microprocessor, simula sa i80386, ay naglalaman ng mga karagdagang shift command na nagpapalawak ng mga kakayahan na tinalakay natin kanina. Ito ay mga shift command dobleng katumpakan: 1) shld operand_1, operand_2, shift_counter – double precision left shift. Ang shld command ay nagsasagawa ng kapalit sa pamamagitan ng paglilipat ng mga bits ng operand_1 sa kaliwa, pagpuno ng mga bit nito sa kanan ng mga halaga ng mga bit na inilipat mula sa operand_2 ayon sa diagram sa Fig. 34. Ang bilang ng mga bit na ililipat ay tinutukoy ng halaga shift_counter, operand_2 hindi nagbabago.


kanin. 34. Scheme ng shld command


2) shrd operand_1, operand_2, shift_counter – double precision right shift. Ang pagtuturo ay gumaganap ng kapalit sa pamamagitan ng paglilipat ng mga bit ng operand_1 sa kanan, pagpuno ng mga bit nito sa kaliwa ng mga halaga ng mga bit na inilipat mula sa operand_2 ayon sa diagram sa Figure 35. Ang bilang ng mga bit na inilipat ay tinutukoy ng halaga shift_counter, na maaaring nasa hanay na 0... 31. Ang halagang ito ay maaaring tukuyin bilang isang agarang operand o nakapaloob sa cl register. Ibig sabihin operand_2 hindi nagbabago.

kanin. 35. Scheme ng shrd command


Tulad ng nabanggit namin, ang mga shld at shrd na utos ay nagsasagawa ng mga paglilipat ng hanggang 32 bits, ngunit dahil sa mga kakaibang katangian ng pagtukoy sa mga operand at operating algorithm, ang mga utos na ito ay maaaring gamitin upang gumana sa mga field na hanggang 64 bits ang haba.

2. Control Transfer Commands

Nakilala namin ang ilan sa mga pangkat na bumubuo linear mga seksyon ng programa. Ang bawat isa sa kanila ay karaniwang nagsasagawa ng ilang mga aksyon upang mag-convert o maglipat ng data, pagkatapos kung saan ang microprocessor ay naglilipat ng kontrol sa susunod na command. Ngunit napakakaunting mga programa ay gumagana sa ganoong pare-parehong paraan. Karaniwang may mga punto sa isang programa kung saan dapat gumawa ng desisyon tungkol sa kung aling utos ang susunod na isasagawa. Ang solusyon na ito ay maaaring:

1) walang kondisyon - sa puntong ito kinakailangan na ilipat ang kontrol hindi sa susunod na utos, ngunit sa isa pa, na matatagpuan sa ilang distansya mula sa kasalukuyang utos;

2) may kondisyon - ang desisyon tungkol sa kung aling utos ang susunod na isasagawa ay ginawa batay sa pagsusuri ng ilang kundisyon o data.

Ang isang programa ay isang pagkakasunud-sunod ng mga utos at data na sumasakop sa isang tiyak na halaga ng espasyo ng RAM. Ang memory space na ito ay maaaring magkadikit o binubuo ng maraming fragment.

Alam ng microprocessor kung aling pagtuturo ng programa ang dapat na susunod na isagawa ng mga nilalaman ng isang pares ng mga rehistro cs:(e)ip:

1) cs – rehistro ng code ng segment, na naglalaman ng pisikal (base) na address ng kasalukuyang segment ng code;

2) eip/ip – instruction pointer register, na naglalaman ng value na kumakatawan sa memory offset ng susunod na instruction na isasagawa kaugnay sa simula ng kasalukuyang segment ng code.

Aling partikular na rehistro ang gagamitin ay depende sa kung ang addressing mode ay nakatakda sa use16 o use32. Kung ang paggamit 16 ay tinukoy, pagkatapos ay ang ip ay ginagamit, kung ang use32, pagkatapos ay ang eip ay ginagamit.

Kaya, ang mga tagubilin sa paglipat ng kontrol ay nagbabago sa mga nilalaman ng mga rehistro ng cs at eip/ip, bilang isang resulta kung saan pinipili ng microprocessor para sa pagpapatupad hindi ang susunod na utos ng programa sa pagkakasunud-sunod, ngunit isang utos sa ilang iba pang seksyon ng programa. Ang conveyor sa loob ng microprocessor ay na-reset.

Batay sa prinsipyo ng pagpapatakbo, ang mga utos ng microprocessor na tinitiyak ang samahan ng mga paglipat sa programa ay maaaring nahahati sa 3 grupo:

1. Mga utos para sa walang kundisyong paglipat ng kontrol:

1) walang kondisyong utos ng pagtalon;

2) utos na tumawag sa isang pamamaraan at bumalik mula sa isang pamamaraan;

3) utos na tumawag sa mga interrupts ng software at bumalik mula sa mga interrupts ng software.

2. Kondisyon na paglipat ng mga control command:

1) jump command batay sa resulta ng page comparison command;

2) mga utos ng paglipat batay sa estado ng isang tiyak na watawat;

3) mga utos upang mag-navigate sa mga nilalaman ng ecx/cx register.

3. Mga utos ng cycle control:

1) utos para sa pag-aayos ng isang cycle na may counter ecx/cx;

2) isang utos upang ayusin ang isang cycle na may isang ecx/cx counter na may posibilidad ng maagang paglabas mula sa cycle sa ilalim ng karagdagang kondisyon.

Unconditional jumps

Ang nakaraang talakayan ay nagsiwalat ng ilang detalye ng mekanismo ng paglipat. Binabago ng mga tagubilin sa jump ang eip/ip instruction pointer register at posibleng ang cs code segment register. Ang eksaktong kailangang baguhin ay depende sa:

1) sa uri ng operand sa unconditional jump command (malapit o malayo);

2) mula sa indikasyon bago ang jump address (sa jump command) modifier; sa kasong ito, ang jump address mismo ay maaaring matatagpuan nang direkta sa command (direct jump), o sa isang register o memory cell (indirect jump).

Modifier maaaring kunin ang mga sumusunod na halaga:

1) malapit sa ptr - direktang paglipat sa isang label sa loob ng kasalukuyang segment ng code. Ang eip/ip register lamang ang binago (depende sa tinukoy na uri ng code segment use16 o use32) batay sa address (label) na tinukoy sa command o isang expression gamit ang value extraction symbol - $;

2) malayo ptr - direktang paglipat sa isang label sa isa pang segment ng code. Ang jump address ay tinukoy bilang isang agarang operand o address (label) at binubuo ng isang 16-bit na tagapili at isang 16/32-bit na offset, na na-load sa cs at ip/eip registers, ayon sa pagkakabanggit;

3) word ptr - hindi direktang paglipat sa isang label sa loob ng kasalukuyang segment ng code. Ang eip/ip lamang ang binago (sa pamamagitan ng offset na halaga mula sa memorya sa address na tinukoy sa command, o mula sa rehistro). Laki ng offset na 16 o 32 bits;

4) dword ptr - hindi direktang paglipat sa isang label sa isa pang segment ng code. Ang parehong mga rehistro – cs at eip/ip – ay binago (sa pamamagitan ng isang halaga mula sa memorya - at mula lamang sa memorya, mula sa isang rehistro). Ang unang salita/dword ng address na ito ay kumakatawan sa offset at na-load sa ip/eip; ang pangalawa/ikatlong salita ay na-load sa cs. jmp unconditional jump command

Ang syntax ng unconditional jump command ay jmp [modifier] jump_address - isang unconditional jump nang hindi nag-iimbak ng impormasyon tungkol sa return point.

Ang jump_address ay alinman sa isang label na address o ang address ng memory area kung saan matatagpuan ang jump pointer.

Sa kabuuan, naglalaman ang microprocessor instruction system ng ilang jmp unconditional jump machine instruction codes.

Ang kanilang mga pagkakaiba ay tinutukoy ng distansya ng paglipat at ang paraan ng pagtukoy sa target na address. Saklaw ang paglipat ay tinutukoy ng lokasyon ng operand transition_address. Maaaring nasa kasalukuyang segment ng code ang address na ito o sa ibang segment. Sa unang kaso, ang paglipat ay tinatawag intrasegmental, o mga mahal sa buhay, sa pangalawa - intersegmental, o malayo Ipinapalagay ng isang intra-segment jump na ang mga nilalaman lamang ng eip/ip register ang binago.

Mayroong tatlong mga opsyon para sa intra-segment na paggamit ng jmp command:

1) tuwid na maikli;

2) tuwid;

3) hindi direkta.


Mga Pamamaraan

Ang wika ng pagpupulong ay may ilang mga tool na lumulutas sa problema ng pagdoble ng mga seksyon ng code ng programa. Kabilang dito ang:

1) mekanismo ng mga pamamaraan;

2) macro assembler;

3) mekanismo ng pagkagambala.

Ang pamamaraan, madalas na tinatawag subroutine - ito ang pangunahing functional unit ng decomposition (paghahati sa ilang bahagi) ng ilang gawain. Ang isang pamamaraan ay isang pangkat ng mga utos para sa paglutas ng isang partikular na subtask at may paraan ng pagkuha ng kontrol mula sa punto ng pagtawag sa isang mas mataas na antas ng gawain at pagbabalik ng kontrol sa puntong ito.

Sa pinakasimpleng kaso, ang isang programa ay maaaring binubuo ng isang pamamaraan. Sa madaling salita, ang isang pamamaraan ay maaaring tukuyin bilang isang wastong na-format na hanay ng mga utos, na, kapag inilarawan, ay maaaring tawagin, kung kinakailangan, saanman sa programa.

Upang ilarawan ang isang pagkakasunod-sunod ng mga utos bilang isang pamamaraan sa wika ng pagpupulong, dalawang direktiba ang ginagamit: PROC at ENDP.

Ang syntax para sa paglalarawan ng pamamaraan ay ang mga sumusunod (Larawan 36).


kanin. 36. Syntax para sa paglalarawan ng isang pamamaraan sa isang programa


Mula sa Figure 36 makikita na sa procedure header (PROC directive) lamang ang procedure name ang kailangan. Kabilang sa malaking bilang ng mga operand ng direktiba ng PROC, ang [distansya] ay nararapat na espesyal na banggitin. Ang katangiang ito ay maaaring tumagal ng mga halaga na malapit o malayo at nailalarawan ang posibilidad ng pagtawag ng isang pamamaraan mula sa isa pang segment ng code. Bilang default, ang attribute na [distance] ay nakatakda sa malapit.

Ang pamamaraan ay maaaring ilagay saanman sa programa, ngunit sa paraang hindi sinasadyang mahulog dito ang kontrol. Kung ang isang pamamaraan ay ipinasok lamang sa pangkalahatang command stream, pagkatapos ay malalaman ng microprocessor ang mga utos ng pamamaraan bilang bahagi ng daloy na ito at, nang naaayon, ay isasagawa ang mga utos ng pamamaraan.

Mga kondisyonal na pagtalon

Ang microprocessor ay may 18 conditional jump instructions. Nagbibigay-daan sa iyo ang mga utos na ito na suriin:

1) ang relasyon sa pagitan ng mga naka-sign na operand ("higit pa - mas kaunti");

2) ang ugnayan sa pagitan ng mga unsigned operand ("sa itaas - sa ibaba");

3) mga estado ng arithmetic flag na ZF, SF, CF, OF, PF (ngunit hindi AF).

Ang mga conditional jump command ay may parehong syntax:

jcc transition_label

Tulad ng nakikita mo, ang mnemonic code ng lahat ng mga utos ay nagsisimula sa "j" - mula sa salita tumalon(tumalbog), siya - tumutukoy sa tiyak na kundisyon na sinuri ng utos.

Tungkol sa operand transition_label, pagkatapos ay ang label na ito ay matatagpuan lamang sa loob ng kasalukuyang segment ng code ay hindi pinapayagan. Kaugnay nito, ang tanong ng modifier, na naroroon sa syntax ng mga unconditional jump command, ay nawawala. Sa mga unang modelo ng microprocessor (i8086, i80186 at i80286), ang mga tagubilin sa conditional jump ay maaari lamang gumawa ng mga maikling jump - isang distansya na -128 hanggang +127 bytes mula sa pagtuturo kasunod ng conditional jump instruction. Simula sa 80386 microprocessor na modelo, ang limitasyong ito ay inalis, ngunit, tulad ng nakikita mo, sa loob lamang ng kasalukuyang segment ng code.

Upang makapagpasya kung saan ililipat ang kontrol gamit ang isang conditional jump command, dapat munang bumuo ng isang kundisyon batay sa kung saan gagawin ang desisyon na ilipat ang kontrol.

Ang mga mapagkukunan ng naturang kondisyon ay maaaring:

1) anumang utos na nagbabago sa estado ng mga flag ng arithmetic;

2) ang paghahambing ng pahina ng utos, na naghahambing sa mga halaga ng dalawang operand;

3) ang estado ng rehistro ng ESH/CX.


cmp paghahambing na utos

Ang utos ng compare page ay may kawili-wiling prinsipyo ng pagpapatakbo. Ito ay ganap na kapareho ng subtraction command - sub operand, operand_2.

Ang command ng page, tulad ng sub command, ay nagbabawas ng mga operand at nagtatakda ng mga flag. Ang tanging bagay na hindi nito ginagawa ay isulat ang resulta ng pagbabawas sa lugar ng unang operand.

Ang syntax ng page command ay page operand_1, operand_2 (compare) – naghahambing ng dalawang operand at nagtatakda ng mga flag batay sa mga resulta ng paghahambing.

Maaaring masuri ang mga flag na itinakda ng page command gamit ang mga espesyal na conditional branch command. Bago natin tingnan ang mga ito, bigyan natin ng kaunting pansin ang mnemonics ng mga conditional jump command na ito (Talahanayan 16). Ang pag-unawa sa notasyon kapag bumubuo ng mga pangalan ng conditional jump command (ang elemento sa pangalan ng jcc command na tinukoy namin nito) ay magpapadali sa pagsasaulo ng mga ito at sa karagdagang praktikal na paggamit.

Talahanayan 16. Kahulugan ng mga pagdadaglat sa jcc command name
Talahanayan 17. Listahan ng mga conditional jump command para sa command page operand_1, operand_2

Huwag magulat sa katotohanan na ang parehong mga halaga ng bandila ay tumutugma sa maraming iba't ibang mga mnemonic code ng conditional jump command (sila ay pinaghihiwalay sa bawat isa sa pamamagitan ng isang slash sa Talahanayan 17). Ang pagkakaiba sa pangalan ay dahil sa pagnanais ng mga taga-disenyo ng microprocessor na gawing mas madali ang paggamit ng mga conditional jump na tagubilin kasama ang ilang partikular na grupo ng mga tagubilin. Samakatuwid, ang iba't ibang mga pangalan ay sumasalamin sa iba't ibang mga oryentasyon sa pagganap. Gayunpaman, ang katotohanan na ang mga utos na ito ay tumutugon sa parehong mga flag ay ginagawa silang ganap na katumbas at pantay sa programa. Samakatuwid, sa Talahanayan 17 sila ay pinagsama hindi ayon sa pangalan, ngunit sa pamamagitan ng mga halaga ng bandila (kondisyon) kung saan sila tumutugon.


Mga Tagubilin at Watawat ng Sangay na may kondisyon

Ang mnemonic notation para sa ilang conditional jump command ay sumasalamin sa pangalan ng flag kung saan sila gumagana, at may sumusunod na istraktura: ang karakter na "j" ang mauna. (Tumalon, transition), ang pangalawa ay ang pagtatalaga ng bandila o ang simbolo ng negation na "n", na sinusundan ng pangalan ng bandila. Ang istraktura ng pangkat na ito ay sumasalamin sa layunin nito. Kung walang "n" na simbolo, pagkatapos ay ang estado ng bandila ay naka-check kung ito ay katumbas ng 1, ang isang paglipat ay ginawa sa jump label. Kung ang character na "n" ay naroroon, pagkatapos ay ang estado ng bandila ay nasuri para sa pagkakapantay-pantay 0, at kung matagumpay, ang isang jump ay ginawa sa jump label.

Ang command mnemonics, pangalan ng bandila, at kundisyon ng paglipat ay ibinibigay sa Talahanayan 18. Ang mga utos na ito ay maaaring gamitin pagkatapos ng anumang mga utos na nagbabago sa mga tinukoy na flag.

Talahanayan 18. Mga conditional jump command at flag

Kung titingnan mong mabuti ang Talahanayan 17 at 18, makikita mo na marami sa mga conditional jump command sa mga ito ay katumbas, dahil pareho ang batay sa pagsusuri ng parehong mga flag.


May kundisyon na mga tagubilin sa pagtalon at ang ecx/cx register

Ang arkitektura ng microprocessor ay nagsasangkot ng partikular na paggamit ng maraming mga rehistro. Halimbawa, ang rehistro ng EAX/AX/AL ay ginagamit bilang isang nagtitipon, at ang mga rehistro ng BP at SP ay ginagamit upang gumana sa stack. Ang rehistro ng ESH/CX ay mayroon ding isang tiyak na layunin sa pagganap: ginagawa nito ang tungkulin counter sa mga loop control command at kapag nagtatrabaho sa mga string ng character. Posible na sa functional na paraan ang conditional jump command na nauugnay sa ecx/cx register ay mas wastong mauuri bilang pangkat ng mga command na ito.

Ang syntax para sa conditional branch command na ito ay:

1) jcxz jump_label (Jump kung ang ex ay Zero) - tumalon kung ang cx ay zero;

2) jecxz jump_label (Jump Equal exx Zero) – tumalon kung ang exx ay zero.

Ang mga utos na ito ay napaka-maginhawang gamitin kapag nag-aayos ng isang loop at kapag nagtatrabaho sa mga string ng mga character.

Dapat tandaan na mayroong isang limitasyon na likas sa jcxz/jecxz command. Hindi tulad ng iba pang mga conditional control transfer na mga tagubilin, ang jcxz/jecxz na pagtuturo ay maaari lamang tumugon sa mga maikling jump - sa -128 byte o +127 byte mula sa susunod na pagtuturo.

Pag-aayos ng mga siklo

Ang cycle, tulad ng alam mo, ay isang mahalagang istraktura ng algorithm, nang walang paggamit kung saan, marahil, hindi magagawa ng isang solong programa. Maaari mong ayusin ang cyclic execution ng isang partikular na seksyon ng program, halimbawa, gamit ang conditional transfer command o ang unconditional jump command jmp. Sa ganitong uri ng cycle na organisasyon, ang lahat ng operasyong nauugnay sa organisasyon nito ay manu-manong ginagawa. Ngunit, dahil sa kahalagahan ng naturang elemento ng algorithm bilang isang cycle, ipinakilala ng mga developer ng microprocessor ang isang pangkat ng tatlong command sa command system upang mapadali ang programming ng mga cycle. Ginagamit din ng mga command na ito ang ecx/cx register bilang cycle counter.

Magbigay tayo ng maikling paglalarawan ng mga utos na ito: 1) loop jump_label (Loop) – ulitin ang cycle. Ang utos ay nagbibigay-daan sa iyo upang ayusin ang mga loop na katulad ng para sa mga loop sa mataas na antas ng mga wika na may awtomatikong pagbabawas ng loop counter. Ang gawain ng pangkat ay gawin ang mga sumusunod:

b) paghahambing ng rehistro ng ESX/CX sa zero: kung (ECX/CX) = 0, ang kontrol ay ililipat sa susunod na command pagkatapos ng loop;

2) loop/loopz transition_label

Ang mga utos ng loop at loopz ay ganap na kasingkahulugan. Ang gawain ng mga utos ay upang maisagawa ang mga sumusunod na aksyon:

a) pagbaba ng rehistro ng ESH/CX;

c) pagsusuri ng estado ng zero flag ZF kung (ECX/CX) = 0 o XF = 0, ang kontrol ay ililipat sa susunod na command pagkatapos ng loop.

3) loopne/loopnz transition_label

Ang mga utos ng loopne at loopnz ay ganap na kasingkahulugan din. Ang gawain ng mga utos ay upang maisagawa ang mga sumusunod na aksyon:

a) pagbaba ng rehistro ng ESH/CX;

b) paghahambing ng rehistro ng ESX/CX sa zero;

c) pagsusuri ng estado ng ZF zero flag: kung (ECX/CX) = 0 o ZF = 1, ang kontrol ay ililipat sa susunod na command pagkatapos ng loop.

Ang mga utos ng loop/loopz at loopne/loopnz ay kabaligtaran sa kanilang prinsipyo sa pagpapatakbo. Pinapalawak nila ang pagkilos ng loop command sa pamamagitan ng karagdagang pagsusuri sa zf flag, na ginagawang posible na ayusin ang maagang paglabas mula sa loop, gamit ang flag na ito bilang indicator.

Ang kawalan ng loop, loop/loopz at loopne/loopnz na mga utos ay ang mga ito ay nagpapatupad lamang ng mga maikling jump (mula -128 hanggang +127 bytes). Upang gumana sa mahabang loop, kakailanganin mong gumamit ng conditional branch command at ang jmp command, kaya subukang makabisado ang parehong paraan ng pag-aayos ng mga loop.

Mga pangunahing kaalaman sa pagprograma ng mga MP device (Lektura)

PLANO NG LECTURE

1. Pag-uuri ng mga utos ng microprocessor

2.Mga uri ng pagtugon

3. Structure at command format ng MP KR580VM80

1. Pag-uuri ng mga utos ng microprocessor

Tulad ng nabanggit na, ang pangunahing bentahe ng MP ay programmability. Nangangahulugan ito na sa pamamagitan ng paglalapat ng mga utos sa input ng MP, posible upang matiyak ang nais na pagkakasunud-sunod ng mga operasyon, i.e. pagpapatupad ng isang tiyak na algorithm Ang algorithm ng problema na nalutas ay maaaring maging kasing kumplikado ng ninanais, ito ay kinakailangan lamang na ang algorithm na ito ay pinaghiwa-hiwalay sa mga hakbang alinsunod sa command system ng MP Samakatuwid, ang command system ay hindi mahalaga lamang mula sa punto ng view ng kung ano ang maaaring gawin ng MP, ngunit din kung paano ang algorithm ay naisakatuparan. Ang pagkakaroon o kawalan ng anumang utos o grupo ng mga utos ay maaaring makabuluhang makaapekto sa pagpili ng MP para sa isang partikular na aplikasyon.

Ang pag-uuri ng mga utos ng MP ay ipinakita sa Figure 8.

Batay sa bilang ng mga memory cell na kinakailangan upang mapaunlakan ang isang utos, ang mga utos ng isa, dalawa o tatlong salita ang haba ay nakikilala. Ang mga tagubilin na dalawa o tatlong salita ang haba ay nangangailangan ng dalawa o tatlong memory access cycle, ayon sa pagkakabanggit, upang makuha.

Sa maraming mga kaso, lalo na kapag inihahambing ang mga MP na may katulad na mga arkitektura, kapaki-pakinabang na pag-uri-uriin ang mga utos alinsunod sa mga katangian ng arkitektura ng MP.

Mula sa isang functional na punto ng view, ang mga koponan ay nahahati sa tatlong malalaking grupo: paghahatid, pamamahala at pagproseso ng data. Isaalang-alang natin nang detalyado ang mga pangunahing utos na ginamit sa MP, gamit ang pag-uuri ayon sa mga functional na katangian. Ang mga pangalan ng mga utos ay ilalarawan ng mga salitang Ruso na nagpapahiwatig ng kahulugan ng mga operasyon na ginagawa.

Mga utos sa paglilipat ng data magbigay ng simpleng paglilipat ng impormasyon nang hindi nagsasagawa ng anumang mga operasyon sa pagproseso. Ang mga utos sa pangkat na ito ay nahahati sa mga utos na nauugnay sa pag-access sa memorya, mga utos sa pagrehistro ng pag-access, at mga utos ng input/output.

Ang mga utos na nauugnay sa pag-access sa memorya ay kinabibilangan ng:

TANDAAN(WRITE), kung saan ang mga nilalaman ng rehistro ay ipinadala sa memory cell.

Ang mga utos na nauugnay sa paglilipat ng isang byte o salita ay dapat magpahiwatig ng numero ng isang partikular na rehistro, ang address ng memory cell at, kung kinakailangan, ang numero ng module ng imbakan.

Ang mga utos na nauugnay sa pag-access sa mga rehistro ay dapat magpahiwatig ng bilang ng pinagmulan ng impormasyon at ang bilang ng resulta ng rehistro ay kinabibilangan ng mga utos.

DIREKTA DOWNLOAD, kung saan ang pare-pareho na tinukoy sa command code ay nakasulat sa rehistro;

PAASA, kung saan ang mga nilalaman ng isang rehistro ay ipinapadala sa isa pa.

Kasama sa mga utos ng I/O ang:

PUMASOK, kung saan ipinapadala ang mga nilalaman ng input device sa panloob na rehistro ng MP;

KONGKLUSYON, kung saan ang mga nilalaman ng panloob na rehistro ng MP (karaniwan ay isang nagtitipon) ay ipinadala sa output device.

Kontrolin ang mga utos , madalas na tinatawag na mga utos ng paglipat, ay nagbibigay-daan sa iyo na magsagawa ng iba't ibang mga aksyon alinsunod sa halaga ng mga panlabas na signal o kundisyon na nabuo sa loob ng system Ang lahat ng mga utos ng kontrol ay nahahati sa mga unconditional at conditional na mga utos ng paglipat.

Kasama sa mga unconditional jump command ang:

WALANG KONDISYONAL NA PAGTAlon(BP), ayon sa kung saan ang mga nilalaman ng field ng address ng utos ng BP ay nakasulat sa counter ng programa, i.e. nagbibigay ng paglipat sa programa sa address na tinukoy sa command;

WALANG KONDISYONAL NA PAGLIPAT NA MAY REFUND(paglipat sa isang subroutine), ayon sa kung saan ang mga bagong nilalaman ay isinulat sa counter ng programa (ang address ng unang utos ng subroutine), ngunit hindi katulad ng utos ng BP, ang estado ng counter ng programa at ilang iba pang mga rehistro ay nai-save sa memorya . Kapag ang isang subroutine ay naisakatuparan sa huling RETURN command nito, ang mga nilalaman ng program counter at lahat ng mga rehistro ay naibalik.

Sinusuri ng mga kundisyon na tagubilin sa pagtalon ang estado ng isang register bit, flag flip-flop, o iba pang parameter. Ang resulta ng pagsusuri ay tumutukoy kung ang paglipat ay isasagawa o hindi. Karaniwan, ang paglipat ay isinasagawa kung ang resulta ng tseke ay tumutugma sa kundisyong tinukoy sa utos. Kasama sa subgroup na ito ng mga control command ang:

KONDISYONAL NA PAGTAlon(UP) sa pamamagitan ng address. signal, overflow, atbp. Kapag natugunan ang kundisyon, ang mga nilalaman ng address counter ay isusulat sa mga patlang ng command ng UE, i.e. nagbibigay ng paglipat sa programa sa address na tinukoy sa command. Kung ang kundisyon ay hindi natutugunan, ang kontrol ay ililipat sa susunod na utos ng programa;

KONDISYONAL NA TRANSITION NA MAY PAGBABALIK, na naiiba sa UNCONDITIONAL JUMP WITH RETURN command na ang paglipat sa subroutine ay nangyayari lamang kapag ang tinukoy na kundisyon ay natugunan.

Kadalasan, ang MP command system ay may kasamang ilang karagdagang auxiliary command na nagbibigay-daan sa iyong kontrolin ang estado ng mga register o trigger na nakakaapekto sa pagsasagawa ng mga conditional transition, halimbawa: SET FLAG, RESET FLAG, SET BATTERY HIGH BIT, RESET BATTERY HIGH BIT, atbp. .

Mga Utos sa Pagproseso ng Data ay nahahati sa aritmetika at lohikal. Kabilang sa mga aritmetika ang:

tiklop ang mga nilalaman ng dalawang rehistro o isang rehistro at isang memory cell;

BAWASAN mula sa mga nilalaman ng isang memory cell o mga nilalaman ng isang rehistro;

TUMAAS NG 1(INCREMENT) mga nilalaman ng memory cell o register (stack pointer, index register, accumulator);

BUMABA NG 1(DECREMENT) mga nilalaman ng isang memory cell o rehistro;

ADD WITH CARRY OUT, kung saan isinasagawa ang pagdaragdag na isinasaalang-alang ang estado ng trigger ng paglilipat. Ginagawa nitong madaling ayusin ang pagproseso ng malalaking numero;

SUBTRACT ACCOUNTING ANG LOAN;

SHIFT mga nilalaman ng isang memory cell o rehistro (karaniwan ay isang bit).

Ang subgroup ng mga lohikal na utos ay kinabibilangan ng mga utos:

AT(LOGICAL MULTIPLY), kung saan ang operasyon ng conjunction ay isinasagawa sa pagitan ng mga nilalaman ng dalawang rehistro o isang memory cell at isang rehistro;

O(LOGICAL ADDITION), kung saan isinasagawa ang isang disjunction operation sa pagitan ng mga nilalaman ng dalawang rehistro o isang memory cell at isang rehistro;

INVALIDITY, na nagsasagawa ng bitwise na paghahambing ng mga nilalaman ng dalawang rehistro o isang memory cell at isang rehistro;

INVERSION mga nilalaman ng isang memory cell o rehistro.

2.Mga uri ng pagtugon

Ang isa sa pinakamahalagang katangian ng arkitektura ng MP ay ang listahan ng mga posibleng paraan ng pag-access ng memorya o mga uri ng pagtugon. Ang mga kakayahan sa pagtugon ng MP ay makabuluhan mula sa dalawang punto ng view.

Una, ang isang malaking halaga ng memorya ay nangangailangan ng isang malaking haba ng address, dahil ang isang n-bit na address ay nagbibigay-daan sa pag-access sa memorya na may kapasidad na 2n salita. Ang mga karaniwang 8-bit na MP na salita ay ginagawang posible na direktang ma-access ang 256 na mga cell ng memorya, na malinaw na hindi sapat. Kung isasaalang-alang natin na ang pag-access sa memorya ay ang pinaka-karaniwang operasyon, kung gayon malinaw na ang kahusayan ng paggamit ng MP ay higit na tinutukoy ng mga pamamaraan ng pagtugon sa isang malaking dami ng memorya na may maliit na kapasidad ng MP.

Pangalawa, para sa kadalian ng programming, kanais-nais na magkaroon ng isang simpleng sistema para sa pagbuo ng mga address ng data kapag nagtatrabaho sa mga arrays, tables at pointer. Tingnan natin ang mga paraan upang malutas ang mga problemang ito.

Kung ang address field ng command ay limitado at hindi sapat upang direktang ma-access ang anumang memory cell, kung gayon ang memorya sa mga ganitong kaso ay nahahati sa mga pahina, kung saan ang 2n memory cell ay itinuturing na isang pahina.

Upang tumugma sa field ng address ng isang maliit na utos na may malaking kapasidad na memorya (upang malutas ang problema sa "pahina"), ginagamit ang iba't ibang uri ng pagtugon sa MP:

Direktang pag-address sa kasalukuyang page . Sa pagtugon na ito, ang counter ng programa ay nahahati sa dalawang field; Ang address field ng command ay naglalaman ng address ng cell sa page, at ang page address ay dapat itakda sa ibang paraan, halimbawa, gamit ang isang espesyal na command.

Direktang addressing gamit ang page register. Ang MP ay dapat na may programmatically accessible page register na na-load ng isang espesyal na command. Ang rehistrong ito ay nagdaragdag ng ilang piraso sa address field ng pagtuturo, na kinakailangan para sa pagtugon sa lahat ng memorya.

Direktang pagtugon gamit ang dobleng salita. Upang madagdagan ang haba ng address field ng isang command, isang karagdagang salita ang inilalaan para sa address (at kung kinakailangan, dalawa).

Pag-address na may kaugnayan sa counter ng programa. Ang field ng address ng pagtuturo ay itinuturing bilang isang naka-sign integer, na idinaragdag sa mga nilalaman ng counter ng programa upang mabuo ang address ng pagpapatupad. Ang kamag-anak na paraan ng pagtugon ay lumilikha ng isang lumulutang na pahina at ginagawang mas madaling ilipat ang mga programa sa memorya.

Pag-address na may kaugnayan sa rehistro ng index. Ang execution address ay nabuo sa pamamagitan ng pagbubuod ng mga nilalaman ng index register at ang address field ng command, na itinuturing bilang isang signed integer. Ang rehistro ng index ay puno ng mga espesyal na utos.

Hindi direktang pagtugon . Kapag ginamit ang indirect addressing, ang address field ng command ay tumutukoy sa address sa kasalukuyang page kung saan naka-imbak ang executive address. Sa kasong ito, kinakailangan ang karagdagang bit sa command field - isang tanda ng hindi direktang pagtugon. Ang executive address ay maaaring itago hindi sa isang memory cell, ngunit sa isang general-purpose register. Sa kasong ito, ang indirect addressing ay tinatawag na register addressing.

3. Structure at command format ng MP KR580VM80

Ang MP command system ng KR580VM80 series ay naglalaman ng mga command sa tatlong format: single-byte, double-byte at tatlong-byte.

Ang mga nilalaman ng unang byte ay nagpapahiwatig ng format ng command, code ng pagpapatakbo, uri ng pagtugon, at mga rehistro o mga pares ng pagpaparehistro, kung sila ay kasangkot sa operasyon Gayunpaman, imposibleng tukuyin ang mga partikular na bit na inilalaan sa unang tatlong ng ang tinukoy na mga bahagi ng utos, dahil maaari silang matatagpuan sa anumang mga piraso ng utos. Ngunit sa kabila nito, ipagpalagay namin na ang mga ito ay naka-encode bilang isang field, na tinatawag na operation code field. Ang mga variant ng mga format para sa unang byte ng command ay ipinapakita sa Figure 9.

Kung ang mga rehistro ay kasangkot sa operasyon, ang isa o dalawa sa mga ito ay maaaring tukuyin sa unang byte ng command. Sa kasong ito, ang mga medyo partikular na bit ay itinalaga sa mga numero ng rehistro sa field ng command: ang tatlong mga low-order na bit (b2 – b0) ay naka-encode sa numero ng source register na naglalaman ng operand, at ang tatlong gitna (b5 – b3) – ang bilang ng rehistro ng patutunguhan kung saan ipinapadala ang resulta ng operasyon Sa mga kasong iyon, kapag ang pareho o isa sa mga rehistrong ito ay hindi kasangkot sa pagpapatupad ng operasyon, ang mga kaukulang bit ay ginagamit para sa code ng pagpapatakbo.

Ang sumusunod na pag-encode ng rehistro ay tinatanggap:

000 – rehistro B, 100 – rehistro H,

001 – rehistro C, 101 – rehistro L,

010 - register D, 110 - memory cell,

011 – rehistro E, 111 – baterya A.

Ang Code 100 ay isang senyales ng hindi direktang memory addressing gamit ang isang 16-bit na address na matatagpuan sa H at L na mga rehistro. ang operasyon.

Ang isang bilang ng mga MP command ay nagbibigay para sa pagproseso o pagpapadala ng mga dobleng haba na mga numero. Sa mga kasong ito, ang mga pares ng mga rehistrong B at C, D at E, o H at L ay pinagsama sa 16-bit na mga rehistro na may bilang na 00, 01 at 10, ayon sa pagkakabanggit. Ang mga bilang ng mga pares ng rehistro sa mga utos ay itinalaga sa mga bits b2 at b1 (pinagmulan na rehistro), b5 at b4 (rehistro ng patutunguhan), at ang mga bit na b0 at b3 ay ginagamit upang ipahiwatig ang code ng pagpapatakbo.

Kasama sa mga double-byte na command sa MP ang mga command na may direktang addressing at input/output na mga command Alinsunod dito, ang pangalawang byte ng command ng pangkat na ito ay naglalaman ng 8-bit operand o isang 8-bit na address ng isang input o output device.

Sa tatlong-byte na mga tagubilin, ang pangalawa at pangatlong byte ay naglalaman ng 16-bit na mga address (sa direktang pag-address ng mga tagubilin) ​​o 16-bit na mga operand (sa mga tagubilin para sa pag-load ng mga pares ng rehistro at stack pointer).

Matapos maisakatuparan ang bawat operasyon ng ALU, limang mga palatandaan ang nabuo, ang mga halaga nito ay maaaring maka-impluwensya sa pagpapatupad ng kasunod na pagproseso ng impormasyon at mga utos sa paglilipat ng kontrol sa kondisyon, gayunpaman, dapat tandaan na ang iba't ibang mga utos ay may iba't ibang epekto sa mga indibidwal na palatandaan.

Para sa kaginhawaan ng pag-save at pagpapanumbalik ng estado ng MP sa panahon ng mga pagkaantala at paglipat sa mga subroutine, ang lahat ng mga tinukoy na katangian ay naka-imbak sa isang espesyal na rehistro - ang mga katangian na rehistro. Ang lokasyon ng mga palatandaan sa mga bit ng rehistro ay ipinapakita sa talahanayan.

kung saan ang S ay ang katangiang "sign" (kumukuha ng halaga ng pinakamahalagang bit

resulta);

Z - tanda ng zero na resulta;

Ang AC ay tanda ng auxiliary transfer (kung may transfer

sa pagitan ng mga byte tetrad, pagkatapos ay AC=1, kung hindi man AC=0;

P – isang tanda ng pagkakapareho ng resulta (kung ang bilang ng mga yunit sa byte

pantay ang resulta, pagkatapos ay P=1, kung hindi man P=0);

C – isang tanda ng paglipat o pautang (kung, kapag nagsasagawa ng mga utos,

Kapag nagkaroon ng paglipat mula sa isang senior rank o isang loan sa isang senior-

Ang pinakamataas na digit ay C=1, kung hindi man C=0).

Tandaan: Para sa lohikal na multiplication command, ang auxiliary carry sign na AC ay tumatagal ng halaga ng ikaapat na bit ng resulta.

Ang kumpletong command system ng MP series na KR580VM80 ay ibinibigay sa appendix ng textbook na "Microprocessors at microprocessor system". Doon, para sa bawat utos, ipinahiwatig kung paano, pagkatapos ng pagpapatupad nito, ang halaga ng bawat katangian ay nagbabago: ito ay itinakda alinsunod sa resulta ng operasyon (+), hindi nagbabago (–), ay na-reset sa zero (0 ) o itakda sa isa (1).

Sa pangkalahatan, ang utos ay dapat maglaman ng sumusunod na impormasyon:

– operation code na nagpapahiwatig ng operasyon na dapat gawin ng MP;

–mga address ng dalawang operand (addends, subtrahends, atbp.). Kung ang alinman sa mga operand ay pare-pareho, sa halip na ang address nito, ang halaga ng operand mismo ay maaaring tukuyin sa utos. Gayunpaman, ang sitwasyong ito ay dapat na maipakita sa code ng pagpapatakbo upang magamit ng MP ang naaangkop na bahagi ng utos para sa layunin nito;

–address ng memory cell kung saan dapat ilagay ang resulta ng operasyon;

–address ng susunod na utos.

Yung. ang command ay karaniwang apat na address, gayunpaman, ang command structure na ito ay humahantong sa isang mas mahabang format ng command, na, naman, ay nauugnay sa isang mas kumplikadong proseso ng pagproseso at istraktura ng processor. Samakatuwid, sa teknolohiya ng MP, ang mga walang address at unicast na mga utos ay pinakalaganap, na ginagawang posible na bumuo ng isang simpleng processor Gayunpaman, kapag nagsasagawa ng mga kumplikadong operasyon, ginagamit ang iba't ibang mga format ng command.

Ang 580 series MP instruction system ay may single-byte, double-byte at three-byte na mga tagubilin.

Ang impormasyon tungkol sa kung paano ang utos na tutugunan ay nakapaloob sa opcode ng unang byte ng utos.

Upang mapabilis ang mga kalkulasyon, ang ilang mga operand ay naka-imbak sa RON block. Ang mga tagubilin na gumagana sa mga operand na ito ay gumagamit ng mga pinaikling address code (pagrehistro ng address).

Ginagawang posible ng mga utos na ito na alisin ang medyo mahabang cycle ng pag-access sa RAM at sa gayon ay makabuluhang taasan ang bilis ng mga operasyon. Dahil sa limitadong kapasidad ng RON at kapag nagtatrabaho sa isang malaking hanay ng data, ang iba pang mga paraan ng pagtugon ay ginagamit na nagbibigay-daan sa pag-access sa mga operand na matatagpuan sa memorya na panlabas sa MP. Ang pinakakaraniwan ay ang pagrehistro ng hindi direktang pagtugon, na gumagamit ng isang pares ng rehistro ng HL.

Sa pangkat ng mga control transfer command, mayroong apat na uri ng command: unconditional branch, conditional branch, loops at interrupts .

Mga walang kundisyong utos sa pagtalon. May kasamang tatlong mnemonic code: JMP (unconditional jump), CALL (subroutine call) at RET (return from subroutine).

Ang utos ng JMP ay nagpapahintulot sa iyo na tumalon sa anumang punto sa programa, na matatagpuan pareho sa kasalukuyang segment ng programa at sa isa pang segment. Kapag tumatalon sa loob ng kasalukuyang segment ng programa, ginagamit ang unang tatlong format ng pagtuturo ng JMP.

Ang unang format ay nagbibigay ng paglipat sa isang di-makatwirang punto sa programa sa loob ng kasalukuyang segment ng programa, kung saan ang isang 16-bit na offset ay idinagdag sa nilalaman ng IP sa complement code ng dalawa, ang pinakamahalagang bahagi nito ay nilagdaan. Ang pangalawa, pinaikling format ay nagpapahintulot sa iyo na tumalon sa isang punto sa programa na hindi hihigit sa -128-f-127 na mga address mula sa pagtuturo ng JMP. Sa wakas, nilo-load ng ikatlong format ang instruction pointer na may 16-bit na numero, na matatagpuan sa executive address na EA, na tinutukoy ng postbyte. Ang paglipat na ito ay tinatawag na hindi direkta dahil hindi direktang pagtugon ang ginagamit.

Upang ipatupad ang isang walang kundisyong pagtalon sa isang punto ng programa na matatagpuan sa labas ng kasalukuyang segment ng programa kapag kinakailangan ang reload ng rehistro ng segment ng CS, ginagamit ang pang-apat at ikalimang format ng pagtuturo ng JMP.

Ang ikaapat na format ay tumutukoy sa isang direktang intersegment na transition, kung saan ang pangalawa at pangatlong byte ng format ay nagpapahiwatig ng kaugnay na address ng transition point, at ang ikaapat at ikalimang byte ay nagpapahiwatig ng bagong CS value. Ang ikalimang format, gamit ang isang postbyte, ay nagpapahintulot sa iyo na matukoy ang executive address na EA, kung saan matatagpuan ang kamag-anak na address ng transition point (sa memory byte na may mga address na EA, EA+1), at ang bagong CS value (sa memory bytes EA+2, EA+3).

Ang CALL command ay nagpapahintulot sa iyo na tumawag sa isang subroutine na matatagpuan alinman sa kasalukuyang segment ng programa o sa isa pang lugar ng memorya. Ito ay may parehong mga format tulad ng JMP command, maliban kung ito ay mas maikli. Hindi tulad ng JMP command ng isang katulad na format, ang CALL command, bago baguhin ang IP o IP at CS na mga halaga, ay awtomatikong nagsusulat ng kasalukuyang mga halaga ng mga rehistrong ito sa stack, na nagsisiguro na ang return point mula sa subroutine ay naaalala.

Upang bumalik mula sa isang subroutine, gamitin ang RET command, na naglilipat ng kontrol sa return address na itinulak sa stack kapag ipinatupad ang nakaraang CALL command. Kapag bumabalik mula sa mga subroutine na matatagpuan sa kasalukuyang segment ng programa, ang unang dalawang format ng pagtuturo ng RET ay ginagamit, at ang pangalawang format ay naiiba sa una dahil ang isang pare-parehong nakasulat sa ika-2 at ika-3 na byte ng pagtuturo ay idinagdag sa mga nilalaman ng ang stack pointer. Nagbibigay-daan ito, kasabay ng pagbabalik mula sa subroutine, na i-reset ang mga parameter na isinulat sa stack sa panahon ng pagpapatupad ng subroutine na ito at hindi ginamit sa hinaharap.

Para sa intersegment return, ginagamit ang pangatlo at ikaapat na RET format, na nagbibigay ng pagbawi ng mga nilalaman ng parehong instruction pointer at ng segment ng programa.

Mga kondisyong utos ng pagtalon. Ilipat ang kontrol depende sa mga resulta ng mga nakaraang operasyon. May tatlong uri ng conditional jumps na ginagamit upang magtatag ng mga ugnayan sa pagitan ng mga naka-sign na numero, unsigned na numero, at arbitrary na numero. Sa unang dalawang uri, ang iba't ibang command mnemonic code ay pinili para sa parehong mga ugnayan sa pagitan ng mga numero, dahil ang iba't ibang mga halaga ng bandila ay tumutugma sa parehong mga relasyon sa pagitan ng mga naka-sign at hindi naka-sign na mga numero.

Sa mga mnemonic code ng conditional jump command, kapag inihahambing ang mga nilagdaang numero, ang titik ay ginagamit upang ipahiwatig ang kondisyon na "higit sa" G (Mas malaki- higit pa), at upang italaga - "mas kaunting" titik L (Mas mababa- mas kaunti). Para sa mga katulad na kundisyon, kapag naghahambing ng mga unsigned na numero, ang mga titik ay ginagamit ayon sa pagkakabanggit A (sa itaas- sa itaas) at sa ibaba- sa ilalim). Ang kondisyon ng pagkakapantay-pantay ay tinutukoy ng liham E (Pantay- ay pantay-pantay), at kabiguan na matupad ang ilang kundisyon - sa pamamagitan ng liham N(Hindi- Hindi). Dapat tandaan na pinapayagan na gumamit ng dalawang magkaibang mnemonic code para sa bawat command; halimbawa, ang mga mnemonic code na JL at JNGF ay katumbas, dahil ang mga kundisyon na "mas mababa sa" at "hindi mas malaki kaysa sa o katumbas ng" ay magkapareho.

Ang isang kumpletong listahan ng mga command mnemonic code, mga kondisyon na sinusuri, pati na rin ang kaukulang Boolean na mga kumbinasyon ng mga flag at ang kanilang mga halaga ay ibinibigay sa Talahanayan. 1.4.

Talahanayan 1.4

Command mnemonic code Kundisyon Kahulugan ng mga watawat
Para sa mga pinirmahang numero
JL/JNGE Mas kaunti/hindi hihigit sa o katumbas ng SF + NG = l
JNL/JGE Hindi bababa sa/mas malaki kaysa o katumbas ng SF + NG = 0
JG/JNLE Higit sa/hindi bababa sa o katumbas ng (SF + OF) V ZF = 0
JNG/JLE Hindi mas malaki sa/mas mababa sa o katumbas ng Para sa mga hindi napirmahang numero (SF + NG) V ZF = l
JB/JNAE Mas kaunti/hindi hihigit sa o katumbas ng CF=1
JNB/JAE Hindi bababa sa/mas malaki kaysa o katumbas ng CF=0
JA/JNBE Higit pa CF V ZF = 0
JNA/JBE Wala na Para sa ibang data CF V ZF = 1
JE/JZ Katumbas/zero ZF = 1
JNE/JNZ Hindi katumbas/zero ZF = 0
JS Sa pamamagitan ng minus SF = 1
JNS Sa plus side SF = 0
JO Pag-apaw NG = l
JNO Sa kawalan ng overflow NG = 0
JP/JPE Sa pamamagitan ng pantay na pagkakapantay-pantay PF = 1
JNP/JPO Sa pamamagitan ng kakaibang parity PF = 0

Ang lahat ng conditional jump instructions ay may parehong two-byte na format, ang unang byte ay ang operation code (OPC), at ang pangalawa ay isang 8-bit offset, na itinuturing bilang isang sign na numero at samakatuwid ay nagbibigay-daan sa mga pagbabago sa address sa hanay. mula -128 hanggang + 127. Kung kinakailangan ang isang mas malayong transition ("malayo") kapag natugunan ang kundisyon, isang karagdagang unconditional transition command ang gagamitin.

Ang oras ng pagpapatupad ng bawat isa sa mga conditional jump instructions ay ipinahiwatig para sa dalawang kaso: 1) ang kondisyon ay nasiyahan at ang kontrol ay aktwal na inilipat alinsunod sa offset, 2) ang kondisyon ay hindi nasiyahan, kaya ang kontrol ay inilipat sa susunod na pagtuturo.

Mga koponan para sa pag-aayos ng mga cycle. Ipinakilala sa CPU para sa kaginhawahan ng pagsasagawa ng mga computational cycle. Kabilang dito ang mga sumusunod na mnemonic code: LOOP (loop hanggang (CX) ay hindi katumbas ng 0), LOOPNZ/LOOPNE (loop hanggang zero/not equal to), LOOPZ/LOOPE (loop hanggang zero/equal to) at JCXZ (jump on zero sa SH). Ang bawat isa sa mga command na ito ay may dalawang-byte na format, ang pangalawang byte ay tumutukoy sa 8-bit na offset na ginamit upang ayusin ang pagtalon. Ang offset na ito ay itinuturing bilang isang nilagdaang numero at nilagdaan-pinalawak sa 16 bits bago kalkulahin ang jump address.

Gamit ang mga loop command kasama ang mga command para sa pagmamanipula ng mga elemento ng string, maaari kang lumikha ng medyo kumplikadong mga string conversion program. Isaalang-alang natin ang isang halimbawa ng pagbubuo ng isang programa upang i-convert ang isang string ng data na nakasulat sa hexadecimal number system sa ilang code kung saan ang talahanayan ng conversion ay matatagpuan sa memorya mula sa panimulang address na tinukoy sa BX, kung kinakailangan upang magamit ang utos ng conversion ng talahanayan para sa XLAT mga code. Ipagpalagay pa natin na ang source string ay naglalaman ng 80 elemento at matatagpuan sa memorya mula sa kamag-anak na panimulang address na 100, at ang string ng resulta ay dapat ilagay mula sa kamag-anak na address na 200. Ang program na nagko-convert ng source string sa resultang string, na may halaga ng flag ng direksyon na DF=0, ay magkakaroon ng form :

MOVSI ,100
MOV DI ,200
MOV CX, 80

Ang XLAT table conversion command na inilarawan sa 1.2 ay ginagamit dito.

Makagambala sa mga utos. May kasamang tatlong mnemonics: INT (interrupt), INTO (interrupt on overflow), at IRET (interrupt return).

Magputol ng utos sa INT sa v=1 ay may dalawang-byte na format, ang pangalawang byte na naglalaman ng 8-bit na numero na tumutukoy sa uri (uri) o antas ng pagkagambala. Sa pamamagitan ng INT command uri Ang processor ay nagpapatuloy upang isagawa ang interrupt service program ng tinukoy na antas, at ang mga aksyon na kinakailangan upang matiyak na ang pagbabalik sa interrupt point ay awtomatikong isinasagawa. Ang mga pagkilos na ito ay ang mga sumusunod: ang mga nilalaman ng rehistro ng F flag ay isinulat sa stack (PUSHF), ang mga flag ng IF at TF ay na-reset, ang kasalukuyang mga halaga ng rehistro ng CS at ang pointer ng pagtuturo ng IP ay nakasulat sa stack.

Upang matukoy ang panimulang address ng programa ng serbisyo ayon sa halaga uri Ginagamit ang interrupt level table. Para sa bawat isa sa 256 na antas ng interrupt sa talahanayang ito, apat na byte ang inilalaan: tinutukoy ng unang dalawang byte ang halaga ng pointer ng pagtuturo ng IP, ang pangalawa - ang halaga ng rehistro ng segment ng CS. Tinutukoy ng apat na byte na ito ang mga panimulang address ng mga programa ng serbisyo (mga pares ng CS, mga halaga ng IP), na dapat munang isulat sa mga cell ng memorya sa ganap na mga address na 0-3FFH. Ang address ng talahanayan na naaayon sa tinukoy sa utos ng INT uri Ang antas ng interrupt ay tinutukoy sa CPU bilang mga sumusunod. Matapos maimbak ang kasalukuyang mga halaga ng CS at GR sa stack, isinasagawa ang paglo-load: CS = uri x 4 + 2 at IP = uri x 4. Ang mga bagong halaga ng CS at IP ay kinuha mula sa mga cell ng address ayon sa pagkakabanggit uri x 4 + 2 At uri x 4, tukuyin ang panimulang address ng kinakailangang programa sa pagpapanatili.

Ang INT interrupt command na tinalakay sa itaas kapag ang field value ay v = 0 ay may isang single-byte na format, ibig sabihin, hindi ito nangangailangan ng espesyal na indikasyon ng antas ng pagkagambala. Ang utos na ito ay awtomatikong nakikita ng processor bilang isang antas 3 na interrupt. (uri=3) at karaniwang ginagamit sa mga programa bilang checkpoint.

Ang INTO overflow interrupt command ay nagdudulot ng paglipat sa pagseserbisyo sa ikaapat na antas ng interrupt (uri = 4) sa kaso kapag ang halaga ng overflow flag NG = 1. Karaniwang ginagamit ang INTO command pagkatapos ng mga sign na arithmetic command. Karaniwan, ang unang ilang antas ng interrupt (hanggang 32) ay nakalaan para sa pagproseso ng ilang partikular na sitwasyon, gaya ng pagtatangkang hatiin sa zero, overflow, at iba pa.

Ang isang kakaibang katangian ng pagpoproseso ng mga interrupts ng mga nakareserbang antas ay ang processor ay nagpapatuloy sa pagseserbisyo sa kanila anuman ang halaga ng interrupt enable flag IF.

Ang one-byte na pagtuturo ng IRET ay inilalagay sa dulo ng bawat interrupt service routine at nagbibigay ng interrupt return. Gamit ang command na ito, kinukuha ng processor ang halaga ng IP instruction pointer at ang CS program segment mula sa stack, at ibinabalik din ang mga nakaraang nilalaman ng F flag register (tulad ng POPF command). Kung kinakailangan, ang mga nilalaman ng natitirang mga rehistro ng CPU na naaayon sa nagambalang programa ay maaaring maiimbak sa stack kapag lumipat sa programa ng serbisyo at pagkatapos ay maibalik kapag bumalik mula dito gamit ang mga tagubilin sa pag-access sa stack.

Sa pamamagitan ng hindi direktang address

PCHL – ang jump address ay nakaimbak sa HL register pair. Kapag ito ay naisakatuparan (HL) → PC.

Mga kondisyong utos ng pagtalon

Jcon @, kung saan ang con ay isang condition mnemonic mula sa salitang Ingles na condition.

Nauna nang nabanggit na ang estado ng mga bit (flag) ng RgP (F) ay ginagamit bilang isang kondisyon ng paglipat. Ang mga mnemonic na naaayon sa mga estado na ito ay ipinakita sa Fig. 6.18.

Halimbawa: JC 8BFE – kapag ang C=1 ay pumunta sa address 8BFE, kapag C=0 ang susunod na command sa address ay naisakatuparan.

Mga utos para sa pagtawag sa PP at pagbabalik

Nauna nang nabanggit na ang return address ay awtomatikong naka-imbak sa stack, i.e. (PC) ® stack.

Mga utos na walang kondisyon

TUMAWAG @ – subroutine na tawag;

RET – bumalik mula sa subroutine.

Mga Kondisyon na Utos

Ccon @ – subroutine na tawag;

Rcon – bumalik mula sa subroutine.

Ang pagkilos ng mga utos ay katulad ng pagkilos ng mga conditional jump command, i.e. kung totoo ang kundisyon, pagkatapos ay tumawag o bumalik. Kung hindi, ang mga sumusunod na utos ay isinasagawa.

Iba pang mga control command

RST n, kung saan n = 0,1,...,7 – i-restart ayon sa interrupt vector n.

Kapag naisakatuparan ang utos na ito, ililipat ang kontrol sa subroutine na nagseserbisyo sa interrupt na ito. Sa panahon ng pagpapatupad ng pagtuturo ng RST, ang mga nilalaman ng PC program counter ay naka-imbak sa stack, at ang address ng kaukulang interrupt vector ay nakasulat sa PC.

Ang address na ito ay nakatakda bilang sumusunod. Ang RST command ay may istraktura 11NN N111, i.e. isang byte. Ang tatlong-bit na kumbinasyon ng NNN ay tinukoy ng halaga n (n = 0...7). Ang halagang 0000 0000 00NN N000 ay ipinasok sa PC command counter, na nagsisilbing address ng kaukulang interrupt vector.

Kaya, sa pamamagitan ng pagtatakda ng isang tiyak na halaga ng n, maaari kang bumuo ng address ng isa sa 8 interrupt vectors. Ang mga address na ito ay matatagpuan sa zone mula 0000H hanggang 0038H ng address space at dumaan sa 8 bytes, i.e. Ang unang 64 na memory cell ay nakalaan para sa kanila (bawat isa sa 8 vectors ay inilalaan ng 8 byte). Sa mga zone na ito (8 bytes bawat isa) ay nakasulat lamang ang mga utos para sa paglukso sa kaukulang mga subroutine (mga handler), na matatagpuan sa ibang mga lugar ng memorya.

Ang mga nakakaabala na subroutine (tulad ng mga normal na subroutine) ay dapat magtapos sa RET command. Sa panahon ng pagpapatupad ng utos na ito, ang address ng pangunahing utos ng programa bago naganap ang pagkagambala ay pinili mula sa stack at inilipat sa address register PA, at ang halaga na nadagdagan ng 1 ay ipinasok sa counter ng programa.

EI – paganahin ang interrupt. Ang utos na ito ay inilalagay sa simula ng seksyon ng programa kung saan pinagana ang pagkagambala. Sa command na ito, ang interrupt enable trigger sa MP control unit ay nakatakda sa state 1.

DI – interrupt disable. Ang command na ito ay inilalagay sa dulo ng seksyon ng programa kung saan pinagana ang interrupt at ni-reset ang trigger sa estado na 0.

Ang NOP ay isang "walang laman" na utos. Nilaktawan ang 4 na hakbang. PC lang ang nagbabago.

HLT - huminto. Nagiging sanhi ng paghinto ng pagpapatupad ng programa at pumasok sa huminto na estado. Ang MP ay hindi nakakonekta sa panlabas na address at data bus (ibig sabihin, ang kanilang mga buffer ay napupunta sa estado Z). Ang WAIT (naghihintay) na output ay nakatakda sa antas 1. Ang estadong ito ay maaaring maantala ng mga senyales ng pagsisimula ng MP o sa pamamagitan ng paglalagay nito sa estado ng pagkagambala.

MGA TANONG SA PANSARILING PAGSUSULIT

1. Anong mga kagamitan ang kailangan upang lumikha ng isang simpleng microcomputer?

2. Maglista ng 5 opsyon para sa mga istruktura ng microcomputer.

3. Paggamit ng intermediate interface.

4. Ano ang kasama sa konsepto ng "PU controller"?

5. Ilista ang mga katangian ng processor ng I8080.

6. Mga rehistro ng data. Ang kanilang layunin.

7. Lagdaan ang mga rehistro. Anong mga katangian ang nakaimbak sa mga rehistrong ito?

8. Ilarawan ang prinsipyo ng bidirectional data exchange sa pagitan ng panloob at panlabas na SD.

9. Anong mga rehistro ang maaaring gamitin ng isang programmer?

10. Magbigay ng block diagram ng isang microcomputer batay sa MP KR580VM80.

11. Anong mga cycle ang binubuo ng isang ikot ng makina?

12. Ilista ang mga format ng data ng MP KR580VM80.

13. Ilista ang mga format ng command ng MP KR580VM80.

14. Anong mga paraan ng pagtugon ang ginagamit sa MP KR580VM80?

15. Anong mga grupo ang maaaring hatiin ang mga koponan ng MP KR580VM80?

16. Mga single-byte na paglilipat. Magbigay ng mga halimbawa ng mga utos mula sa pangkat na ito.

17. Double-byte na paglilipat. Magbigay ng mga halimbawa ng mga utos mula sa pangkat na ito.

18. Anong mga pagpapatakbo ng baterya ang alam mo?

19. Mga operasyon sa RON at memorya. Anong mga operasyon ang kasama nila?

20. Ilista ang mga control command.

KONTROL ANG MGA GAWAIN

1. Ang mga sagutang papel ay dapat nakasaad ang numero ng grupo, apelyido ng mag-aaral at ang numero ng kanyang opsyon.

2. Ang mga numero ng tanong ay pinipili ng mag-aaral alinsunod sa kanyang huling dalawang numero sa grade book. Sa Talahanayan 6.1, ang n-1 ay ang penultimate digit ng numero, at ang n ay ang huling digit. Ang mga cell ng talahanayan ay naglalaman ng mga bilang ng mga tanong kung saan dapat bigyan ng nakasulat na sagot.

Mga numero ng tanong Talahanayan 6.1

a n a n-1
1,5,9, 13,16 2,6,10,14,17 3,7,11,15,18 4,8,12,13,19 1,9,11,14,20 2,10,12,15,18 3,5,8, 13,17 4,6,7, 14,19 1,8,10,13,17 2,5,7, 14,18
3,6,8, 15,19 4,7,9, 13,16 1,5,12,14,20 2,6,11,15,16 3,7,10,13,17 4,8,9, 14,18 1,7,12,13,18 2,8,10,14,19 3,5,11,15,20 4,6,9, 13,17
2,7,9, 13,20 1,8,11,15,19 4,5,10,15,17 3,6,12,14,16 1,5,9, 13,16 2,6,10,14,17 3,7,11,15,18 4,8,12,13,19 1,9,11,14,20 2,10,12,15,18
3,5,8, 13,17 4,6,7, 14,19 1,8,10,13,17 2,5,7, 14,18 3,6,8, 15,19 4,7,9, 13,16 1,5,12,14,20 2,6,11,15,16 3,7,10,13,17 4,8,9, 14,18
1,7,12,13,18 2,8,10,14,19 3,5,11,15,20 4,6,9, 13,17 2,7,9, 13,20 1,8,11,15,19 4,5,10,15,17 3,6,12,14,16 1,5,9, 13,16 2,6,10,14,17
3,7,11,15,18 4,8,12,13,19 1,9,11,14,20 2,10,12,15,18 3,5,8, 13,17 4,6,7, 14,19 1,8,10,13,17 2,5,7, 14,18 3,6,8, 15,19 4,7,9, 13,16
1,5,12,14,20 2,6,11,15,16 3,7,10,13,17 4,8,9, 14,18 1,7,12,13,18 2,8,10,14,19 3,5,11,15,20 4,6,9, 13,17 2,7,9, 13,20 1,8,11,15,19
4,5,10,15,17 3,6,12,14,16 1,5,9, 13,16 2,6,10,14,17 3,7,11,15,18 4,8,12,13,19 1,9,11,14,20 2,10,12,15,18 3,5,8, 13,17 4,6,7, 14,19
1,8,10,13,17 2,5,7, 14,18 3,6,8, 15,19 4,7,9, 13,16 1,5,12,14,20 2,6,11,15,16 3,7,10,13,17 4,8,9, 14,18 1,7,12,13,18 2,8,10,14,19
3,5,11,15,20 4,6,9, 13,17 2,7,9, 13,20 1,8,11,15,19 4,5,10,15,17 3,6,12,14,16 1,5,9, 13,16 2,6,10,14,17 3,7,11,15,18 4,8,12,13,19

Ang unconditional transition operation (BP) ay tumutukoy sa mga operasyon ng unconditional transfer of control at binubuo ng mga sumusunod. Sa simula ng operasyon, ang mga nilalaman ng CC, na nagpapahiwatig ng utos na sumusunod sa BP (return address), ay ipinadala sa P1 AU kung ang programa ay nagbibigay ng pagbabalik; ito ay nagpapahintulot sa iyo na i-save ang return address sa pamamagitan ng karagdagang paglilipat ng mga nilalaman ng P1 (halimbawa, sa pamamagitan ng 3G operation) sa memorya. Upang gawin ito, ang mga unang utos ng seksyon ng programa kung saan ginawa ang paglipat ay dapat maglaman ng kaukulang operasyon. Sa susunod na yugto ng operasyon, ang mga nilalaman ng 1-14 bits, na siyang transition address, ay binabasa mula sa RAM o ROM cell na may address na tinukoy sa command ng BP sa SchK. Sa address na ito, ang isang kahilingan ay ginawa sa ROM para sa utos kung saan ginawa ang paglipat.

Pagpapatakbo ng shift

Sa shift format (FSD), ang mga operasyong "Arithmetic shift pakanan (kaliwa)" at "Logical shift pakanan (kaliwa)" ay naka-encode. Kapag naisakatuparan ang mga ito, isinasagawa ang mga aksyon sa numerong matatagpuan sa AC. Ang mga katangian sa command ay tinukoy: ang direksyon ng shift (5 r), ang mga uri ng shift (8.9 r) at ang kanilang numero (1-4 r). Sa panahon ng operasyon, ang mga piraso ng rehistro ng P2 ay inilipat, ang resulta ay naitala sa mga rehistro ng P2 at РСм, at ang paglipat sa kanan ay isinasagawa ng 3 bits sa parehong oras, ang paglipat sa kaliwa ay 1 bit. Ang halaga ng 5th bit na katumbas ng "1" ay tumutukoy sa paglipat sa kaliwa, katumbas ng "0" - sa kanan.

Ang mga operasyon ay paikot. Ang bilang ng mga shift cycle ay binibilang ng cycle counter (CC). Bago isagawa ang cyclic na bahagi ng operasyon, ang mga nilalaman ng 1-5 bits ng command na naglalaman ng isang pare-pareho at isang shift sign ay ipinadala sa gitna. Susunod, ang mga nilalaman ng P2 ay ipinadala sa RSM. Ang shift mismo ay isinasagawa dahil sa "pahilig" na pagkopya ng mga nilalaman ng mga rehistrong P2 at Pcm sa P2' at Pcm', ayon sa pagkakabanggit. Pagkatapos ang resulta ng paglilipat mula sa PCm' at P2' hanggang sa SM1 at SM2 ay muling isusulat sa P2 at PSM. Ang pagkumpleto ng operasyon ay ipinahiwatig ng halaga ng SchT =0.

Depende sa uri ng shift (L o A), alinman sa lahat ng 16 bits (L) o 15 bits lamang (mantissa) na walang sign (A) ay inilipat. Kapag ang A ay lumipat sa kanan, ang nabakanteng mga high-order na bit ay mapupuno ng isang senyales, at kapag lumilipat sa kaliwa, ang nabakanteng mga low-order na bit ay mapupuno ng mga zero. Sa panahon ng isang lohikal na paglipat sa kanan o kaliwa, ang mga bakanteng piraso ay puno ng mga zero.

Maaari mo ring baguhin ang shift constant sa pamamagitan ng program.

32 Interaksyon ng mga node at elemento ng block diagram ng CB processor kapag nagsasagawa ng mga conditional jump operation.

Mga operasyong may kondisyong tumalon



Ang pagpapatupad ng operasyon ay nagsisimula sa pagsuri sa pagiging posible ng kondisyon ng paglipat sa pamamagitan ng paghahambing ng halaga ng katangian ng resulta ng nakaraang operasyon sa code na "mask" sa utos. Kung ang kondisyon ay natutugunan, pagkatapos ay ang paglipat sa pagpapatupad ng utos ay nangyayari, ang address kung saan ay nasa address-operand na bahagi ng format ng PFU. Kung ang kundisyon ng paglipat ay hindi natutugunan, pagkatapos ay ang utos na sumusunod sa utos na "Conditional jump" sa programa ay isinasagawa.

Ang command na "Conditional Jump" (JJ) ay sumasakop sa dalawang katabing ROM cell. Ang unang cell ay naglalaman ng command, ang pangalawang cell ay naglalaman ng jump address. Ang isang conditional jump ay tinutukoy ng isang kumbinasyon sa 7-9 bits ng command, ang kondisyon para sa paglalagay ng return address ay tinutukoy ng 6th bit.

Kapag natugunan ang kundisyon, ang transition address ay ipinasok sa program counter, samakatuwid ang code ng susunod na command ay mababasa mula sa cell na may ganitong address. Ang return address ay ipinasok sa P1 kung ang ika-6 na bit ay katumbas ng 0 at sa Pcm kung ang halaga ng bit na ito ay katumbas ng isa.

Kung hindi natugunan ang kundisyon ng paglipat, pipiliin ang susunod na pagtuturo mula sa cell na may address code i+2. Sa kasong ito, ang tinukoy na code (return address) ay ipinasok sa P1 anuman ang halaga ng ika-6 na bit ng command. Ang huli ay tinutukoy ng operating algorithm ng SV processor kapag nag-decipher ng UE operation code.

Ang pagpasok ng return address sa PCM ay dahil sa ang katunayan na ang output sa code bus mula sa AC ay mayroon lamang tinukoy na rehistro.

Ang isang kakaibang katangian ng pagpapatupad ng operasyon ng NC ay kung mayroong code 111 o 000 sa mga "mask" na mga bit ng utos, ang kondisyong paglipat ay bumababa sa isang walang kondisyon o isang operasyon ng pagpapadala sa mga base register, ayon sa pagkakabanggit. Sa mga kasong ito, ang mga jump address o ang nagpapadalang address sa mga base register ay ang mga nilalaman ng address-operand na bahagi ng pagtuturo (AOC).

Kapag nagsasagawa ng operasyon ng pagpapadala sa BR, ang mga nilalaman ng AOC ay ipinapadala sa isa o ilang mga BR nang sabay-sabay, depende sa mga nilalaman ng 15-17 bits ng command. Ang return address sa kasong ito ay hindi ipinadala sa P1 at RSM.



Ang pagsasagawa ng operasyon ng NC bilang operasyon ng TCU ay maaaring gamitin sa mga interrupts upang lumipat sa mga nakakaabala na programa. Upang gawin ito, sa ika-5 bit ng command, ang katangian ng isang programmed transition (PNT) ay nakatakda. Sa kasong ito, binabasa ang command sa processor mula sa ROM sa pamamagitan ng interrupt signal (ISR). Sa kasong ito, ang ROM access address (interrupt address) ay nabuo ng processor interrupt circuit.

Ang isang kakaiba ng operasyon sa kasong ito ay ang return address para sa mga interrupts ay hindi ang address ng command na sumusunod sa command sa FUP format, ngunit ang address ng command bago naganap ang interrupt. Ang signal ng NPP ay pinoproseso bilang mga sumusunod. Batay sa signal na ito, ang interrupt circuit ng processor ay bumubuo ng interrupt address (APr), katumbas ng address ng unang cell ng jump instruction sa FUP(i) na format. Ang address na ito ay inililipat sa memorya sa pamamagitan ng switch at ang rehistro ng ROM address. Ang mga interrupt na address ay pinili sa paraang ang address ng unang cell ng command (i) ay pantay, at ang address ng pangalawang cell (i+1) ay kakaiba. Ang pangalawang address ay nakuha sa pamamagitan ng pagbabago (sa hardware) ang hindi bababa sa makabuluhang digit nang walang paglahok ng CC mula sa zero hanggang isa. Sa proseso ng pagbabasa ng isang command mula sa ROM at pagpapatupad nito, ang mga nilalaman ng SchK (K+1) ay naka-imbak sa rehistro ng P1 ng AC, at ang mga nilalaman ng pangalawang cell ng command (i+1), na ang address ng paglipat sa command na may address j, ay ipinasok sa SchK. Ang isang kahilingan ay ginawa sa ROM tungkol sa mga bagong nilalaman ng CC. Kaya, ang address ng susunod na pagtuturo sa oras ng pagkaantala (K+1) ay nakaimbak sa rehistrong P1. Matapos maproseso ang pagkagambala, ang address na ito ay ginagamit upang bumalik sa nagambalang programa.

33 Pakikipag-ugnayan ng mga node at elemento ng block diagram ng SV processor kapag nagsasagawa ng mga operasyon ng processor at system control.