🎧 New: AI-Generated Podcasts Turn your study notes into engaging audio conversations. Learn more

05__AOK__Ligjërata 5__Emulatori emu8086. Shembuj të instruksioneve përmes programeve elementarë -- MSc. Valdrin Haxhiu.pdf

Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...

Full Transcript

Kolegji UBT Arkitektura dhe organizimi i kompjuterëve Ligjërata 5 Emulatori emu8086 Shembuj të instruksioneve përmes programeve elementarë MSc. Valdrin Haxhiu MSc. Valdrin Haxhiu 5.1 Procesori intel 8086 Në Tabela 1 janë paraqitur disa nga karakteristikat e procesorit intel 8086. Tabela 1 – Disa nga...

Kolegji UBT Arkitektura dhe organizimi i kompjuterëve Ligjërata 5 Emulatori emu8086 Shembuj të instruksioneve përmes programeve elementarë MSc. Valdrin Haxhiu MSc. Valdrin Haxhiu 5.1 Procesori intel 8086 Në Tabela 1 janë paraqitur disa nga karakteristikat e procesorit intel 8086. Tabela 1 – Disa nga karakteristikat e procesorit intel 8086 Gjatësia e regjistrave Gjerësia e data bus Gjerësia e address bus 16 bit 16 bit 20 bit Kapaciteti i memories DRAM që mund të adresojë 20 2 B = 1 MB 5.1.1 Regjistrat e përgjithshëm (general registers) Në Figura 1 janë paraqitur regjistrat e përgjithshëm të procesorit intel 8086. Figura 1 – Regjistrat e përgjithshëm të procesorit intel 8086 Regjistrat me qëllim të përgjithshëm ndahen në dy nëngrupe të përbërë prej 4 regjistrave: regjistrat e të dhënave (që njihen edhe si grupi i regjistrave H dhe L për “high” dhe “low”, L për bajtin e poshtëm dhe H për bajtin e sipërm) dhe regjistrat pointer dhe index (të njohur edhe si grupi P dhe I). Regjistrat e të dhënave janë: regjistri AX (accumulator), regjistri BX (base), regjistri CX (counter) dhe regjistri DX (data). Regjistrat janë 16 bitësh, por ekziston mundësia që këta 4 regjistra të trajtohen si të ndarë në dy regjistra 8 bitësh. Për shembull: regjistri AX, mund të trajtohet si regjistër i ndarë në dy regjistra 8 bitësh, bajti i poshtëm (low) AL dhe bajti i sipërm (high) AH. Regjistrat tjerë mund të përdoren vetëm si regjistra 16 bitësh (nuk mund të trajtohen si të ndarë në dy pjesë). 1 MSc. Valdrin Haxhiu Regjistrat e të dhënave mund të përdoren në shumicën e operacioneve aritmetike dhe logjike. Disa prej regjistrave për të dhëna, me anë të instruksioneve mund të përdoren në mënyrë implicite (pa e shkruar emrin e regjistrit në shprehje). Në Tabela 2 janë paraqitur regjistrat (përfshirë edhe regjistrat e grupeve P dhe I) që mund të përdoren në mënyrë implicite gjatë operacioneve të ndryshme. Tabela 2 – Regjistrat që mund të përdoren në mënyrë implicite Regjistri AX AL AH BX CX CL DX SP SI DI Operacionet shumëzim i fjalëve (word multiply), pjesëtim i fjalëve (word divide), hyrje/dalje me fjalë (word I/O) shumëzim i bajtëve (byte multiply), pjesëtim i bajtëve (byte divide), hyrje/dalje me bajtë (byte I/O), përkthim i adresave (translate), aritmetikë decimale shumëzim i bajtëve (byte multiply), pjesëtim i bajtëve (byte divide) përkthim i adresave operacionet me përmbajtje string, unazat (loops) shift dhe rotate me variabla shumëzim i fjalëve, pjesëtim i fjalëve, hyrje/dalje indirekte operacionet me stek (stack) operacionet me përmbajtje string operacionet me përmbajtje string 5.1.2 Regjistrat për segmente (segment registers) Memoria DRAM me kapacitet 1 MB të cilën mund të adresojë procesori intel 8086 ndahet në segmente (pjesë) të cilët mund të kenë madhësinë deri në 64 KB. Regjistrat për segmente janë paraqitur në Figura 2. Figura 2 – Regjistrat për segmente Procesori ka qasje direkte deri në 4 segmente në një moment të caktuar. Adresat bazë (adresat e fillimit të segmenteve në memorien DRAM) vendosen në regjistrat e segmenteve. Në regjistrin CS (code segment) vendoset adresa e fillimit të segmentit aktual të kodit (segmenti që përmban kodin e programit në memorien DRAM). Në regjistrin SS (stack segment) vendoset 2 MSc. Valdrin Haxhiu adresa e segmentit aktual të stekut (operacionet me stek kryhen në vendet brenda këtij segmenti). Në regjistrin DS vendoset adresa e fillimit të segmentit aktual për të dhëna (ky segment zakonisht përmban variablat e programit). Regjistri ES (extra segment) përmban adresën e fillimit të segmentit aktual shtesë (extra) i cili poashtu përdoret për të dhëna. 5.1.3 Regjistri IP (instruction pointer) Regjistri IP (apo PC – program counter) është poashtu regjistër 16 bitësh. Vlera e regjistrit IP ndërrohet prej njësisë kontrolluese të CPU-së (te procesori intel 8086 njihet si bus interface unit - BIU). Regjistri IP përmban vlerën e offset-it (distanca në bajtë) të instruksionit të radhës që është disa bajtë larg fillimit të segmentit aktual të kodit. Ky regjistër përmban adresën e instruksionit të ardhshëm që merret për ekzekutim. Regjistri IP nuk është i qasshëm drejtpërdrejtë nga programuesi (nuk është programmer visible) në kuptimin që nuk mund të vendoset në mënyrë eksplicite (direkte) një adresë (offset) brenda regjistrit. Sigurisht, vlera e regjistrit IP, ndërrohet gjatë ekzekutimit të njëpasnjëshëm të instruksioneve ose gjatë degëzimeve në program. 5.2 Emulatori emu8086 Më qëllim që të emulohet puna për ekzekutimin e programeve të shkruara përmes gjuhës programuese assembly, mund të përdoret emulatori emu8086. Përmes emulimit, nuk kemi nevojë që të kemi fizikisht procesorin intel 8086, pasi emulatori na mundëson që me anë të softuerit të emulatorit të shohim se si procesori i lexon instruksionet nga memoria DRAM (me kapacitet vetëm 1 MB), si i ekzekuton ato dhe çfarë vlera marrin regjistrat e caktuar të procesorit gjatë punës së tij. Pasi të hapim softuerin emu8086, klikojmë në menynë file → new → com template dhe fitojmë pamjen si në Figura 3. Figura 3 – Pamja e editorit të kodit pas hapjes së fajllit të ri për kod 3 MSc. Valdrin Haxhiu Në rreshtin 05 në Figura 3 është paraqitur direktiva org 100h e cila e udhëzon kompajlerin (asemblerin) që në regjistrin IP të vendosë adresën (offset-in) 0100h (heksadecimal). Në rreshtin 09 në Figura 3 është paraqitur instruksioni ret (return) me anën e të cilit mundësohet ndalja e ekzekutimit të programit në procesor. Ndërmjet direktivës org 100h dhe instruksionit ret shkruhen rreshtat me kod burimor (source code) si pjesë të programit me anën e të cilit kryhet ndonjë punë e caktuar. Shembull 1: Shkruani programin i cili ruan në regjistrin ax (accumulator) vlerën 12, pastaj në bajtin e poshtëm (low byte) al (të regjistrit ax) ruan vlerën 7 dhe në bajtin e sipërm (high byte) ah (të regjistrit ax) ruan vlerën 2. Zgjidhje: Programi është paraqitur në Figura 4. Rreshtat që fillojnë me ; paraqesin komente. Figura 4 – Programi i shembullit 1 Që të shohim gjendjen e regjistrave dhe ekzekutimin e këtij programi, shtypim butonin emulate dhe fitohet pamja si në Figura 5. Në Figura 5 kemi paraqitur disa shpjegime për pjesët e dritares së emulatorit. Instruksioni mov ax, 12 si i kompajluar (asembluar) është vendosur në memorien DRAM me fillim në adresën 07100h (deri te adresa 07102h) të segmentit (regjistri i segmentit të kodit ka vlerën 0700h) aktual që përmban kodin e programit dhe shihet në pjesën e paraqitur më poshtë: 4 MSc. Valdrin Haxhiu Figura 5 – Pamja e emulatorit Për ekzekutimin e instruksionit në rreshtin 08, regjistri IP ka vlerën 0100h (që është vendosur përmes direktivës org 100h). Në dritaren e emulatorit shtypim butonin single step ose run. Përmes opcionit single step, mund të ekzekutojmë instruksionet e kodit një pas një. Pas ekzekutimit të instruksionit në rreshtin 08, gjendja e regjistrit AX duket si më poshtë (vlera 12 në formë heksadecimale është C): Për leximin e instruksionit të radhës në memorien DRAM, regjistri IP merrë vlerën e re 0103h dhe në adresën 07103h (deri te adresa 07104h) gjendet instruksioni mov al, 7 i kompajluar. Pas ekzekutimit të instruksionit në rreshtin 11, gjendja e regjistrit al duket si më poshtë: Instruksioni i radhës, përkatësisht instruksioni në rreshtin 14, në memorien DRAM gjendet me fillim në adresën 07105h (deri te adresa 07106h). Për leximin e këtij instruksioni, regjistri IP merrë vlerën 0105h. Pas ekzekutimit të instruksionit në rreshtin 14, gjendja e regjistrit ah duket si më poshtë: Në fund, instruksioni ret gjendet në adresën 07107h dhe pas ekzekutimit të këtij instruksioni, ndërpritet ekzekutimi i programit. 5 MSc. Valdrin Haxhiu Shembull 2: Shkruani programin për llogaritjen e vlerës së shprehjes: Y = (A + B) ∙ C nëse: A = 2, B = 3 dhe C = 1. Përdorni vetëm regjistrat ax dhe bx. Zgjidhje: 6 MSc. Valdrin Haxhiu Shembull 3: Shkruani programin për llogaritjen e vlerës së shprehjes: Z= (A + B) ∙ C ∙ D E nëse: A = 2, B = 3, C = 1, D = 3 dhe E = 1. Përdorni vetëm regjistrat al dhe bl. Zgjidhje: 7

Use Quizgecko on...
Browser
Browser