Praktikumide juhendmaterjal

Similar documents
8085 INSTRUCTION SET INSTRUCTION DETAILS


(2) Explain the addressing mode of OR What do you mean by addressing mode? Explain diff. addressing mode for 8085 with examples.

INSTRUCTION SET OF 8085

Introduction to Assembly Language Programming (Instruction Set) 1/18/2011 1

MAHALAKSHMI ENGINEERING COLLEGE TIRUCHIRAPALLI

SAMPLE STUDY MATERIAL

EE309: Computer Organization, Architecture and MicroProcessors. sumantra/courses/up/up.html GND HIGH ORDER ADDRESS BUS

The 8085 Instruction Set

م.م. ماجد عيدان. Introduction to microprocessor and microcomputer

UNIT I. Differences between: Microcomputer, Microprocessor and Microcontroller

Unit 1 8 BIT MICROPROCESSOR ARCHITECTURE

Delhi Noida Bhopal Hyderabad Jaipur Lucknow Indore Pune Bhubaneswar Kolkata Patna Web: Ph:

Its Assembly language programming

MSMF GATE CENTRE. Sub: MICROPROCESSORS. Time: 50min Date: Marks:33

Assembly Language Programming of 8085

COPYRIGHT IS NOT RESERVED BY AUTHORS. AUTHORS ARE NOT RESPONSIBLE FOR ANY LEGAL ISSUES ARISING OUT OF ANY COPYRIGHT DEMANDS

Assembly Language Programming of 8085

LABORATORY MANUAL. PROGRAMME: B.Tech SEMESTER /YEAR: 3rd year 5th Semester SUBJECT CODE: CS592 SUBJECT NAME: Microprocessor & Microcontroller Lab

Delhi Noida Bhopal Hyderabad Jaipur Lucknow Indore Pune Bhubaneswar Kolkata Patna Web: Ph:

ELECTRICAL ENGINEERING

G. Pullaiah College of Engineering and Technology: Kurnool Department Of Electronics and Communication Engineering

LIST OF PROGRAMS. Prg. Name of the Program. 1 Study of Pin Diagram of Study of Architecture of Study of 8085 Kit.

Subject Code: Model Answer Page No: /25

GATE Exercises on Microprocessors

CHETTINAD COLLEGE OF ENGINEERING AND TECHNOLOGY

Practical Course File For

Mälu interfeisid Arvutikomponendid Ergo Nõmmiste

MAHALAKSHMI ENGINEERING COLLEGE TIRUCHIRAPALLI UNIT I THE 8085 & 8086 MICROPROCESSORS. PART A (2 Marks)

UNIT 1 REFERENCE 1 PREPARED BY S.RAVINDRAKUMAR, LECT/ECE, CHETTINAD COLLEGE OF ENGG AND TECH, KARUR

MAHARASHTRA STATE BOARD OF TECHNICAL EDUCATION (Autonomous) (ISO/IEC Certified) MODEL ANSWER

EKT222 Miroprocessor Systems Lab 5

SIR.C.R.R.COLLEGE OF ENGINEERING DEPT. OF ELECTRONICS AND INSTRUMENTATION ENGG. EIE-328: MICROPROCESSOR LABORATORY 3/4 B.E. EIE: SECOND SEMESTER

EXAMPLE PROGRAMS 8085

Assembly language Programming

ROEVER ENGINEERING COLLEGE

PERIPHERAL INTERFACING Rev. 1.0

The due date for submitting this assignment has passed. 1) How many times will the following loop be executed? Depends on the initial value of A

Delhi Noida Bhopal Hyderabad Jaipur Lucknow Indore Pune Bhubaneswar Kolkata Patna Web: Ph:

8085 Microprocessor Programs

EC2304-MICROPROCESSOR AND MICROCONROLLERS 2 marks questions and answers UNIT-I

EXPERIMENT NO. 1 THE MKT 8085 MICROPROCESSOR TRAINER

Micro Processor & Micro Controllers

MICROPROCESSOR AND MICROCONTROLLER

Architecture & Instruction set of 8085 Microprocessor and 8051 Micro Controller

PROGRAMMING BOOK FOR MTK85SE, 8085 MICROPROCESSOR TRAINING KIT

DE60/DC68 MICROPROCESSORS & MICROCONTROLLERS JUN 2015

2003 LXI H, 42F2H ; this instruction store 42F2 in to the HL pair POP H ; store data from top of the stack to HL pair

INSTITUTE OF ENGINEERING AND MANAGEMENT, KOLKATA Microprocessor

1. What is microprocessor? It is a program controlled semi conductor device (IC), which fetches, decodes and execute instructions.

Vidyalankar T.E. Sem. V [EXTC] Microprocessors and Microcontrollers I Prelim Question Paper Solution V SS (GND)

INDEX. 1 Study of intel 8085 micropeocessor kit. 2 Program to find addition of two 8 bit no. 3 Program to find subtraction of two 8 bit no.

Instruction set of 8085

PERIPHERAL INTERFACING Rev. 1.0

Control Unit: The control unit provides the necessary timing and control Microprocessor resembles a CPU exactly.

1 = Enable SOD 0 = Disable SOD. Serial Output Data. Fig.12.9 SIM Instruction Format

The advantages of registers over memory locations are as follows:

UNIT 18 PROGRAMMING MICROPROCESSORS

Matrix Multiplication in 8085

CS2259-MICROPROCESSOR AND MICROCONTROLLER LABORATORY MANUAL

XII HSC - BOARD - MARCH

S.R.M. INSTITUTE OF SCIENCE & TECHNOLOGY SCHOOL OF ELECTRONICS & COMMUNICATION ENGINEERING

SIR C.R.REDDY COLLEGE OF ENGINEERING ELURU DIGITAL ELECTRONICS & MICROPROCESSOR LAB MANUAL 2/4 CSE: II- SEMESTER

SN8F5000 Family Instruction Set

Microprocessor Architecture

CS521 CSE IITG 11/23/2012

1. Internal Architecture of 8085 Microprocessor

MICROPROCESSOR BASICS AND RELATED TERMS

Machine Cycle- 2 or (Machine Cycle-1 of next instruction):

1. INTRODUCTION TO MICROPROCESSOR AND MICROCOMPUTER ARCHITECTURE:

Programming of 8085 microprocessor and 8051 micro controller Study material

DE60/DC68 MICROPROCESSORS & MICROCONTROLLERS JUNE 2013

Computer Organization

(2½ Hours) [Total Marks: 75]

1. Internal Architecture of 8085 Microprocessor

Microprocessor Micro Syllabus BSc. CSIT, IOST, TU. Microprocessor

Lecture-19 MICROPROCESSOR INSTRUCTIONN SET: Each subsystem in a microprocessor based system the memory, the microprocessor and the input and output

CIS-331 Exam 2 Fall 2015 Total of 105 Points Version 1

The functional block diagram of 8085A is shown in fig.4.1.

1. What is Microprocessor? Give the power supply & clock frequency of 8085?

Microcontroller Intel [Instruction Set]

Microprocessors 1. The 8051 Instruction Set. Microprocessors 1 1. Msc. Ivan A. Escobar Broitman

Programming Book Microcontroller Kit. Rev 3.0 January, Wichit Sirichote

1 MALP ( ) Unit-1. (1) Draw and explain the internal architecture of 8085.

Chapter 1: Basics of Microprocessor [08 M]

CHAPTER 5 : Introduction to Intel 8085 Microprocessor Hardware BENG 2223 MICROPROCESSOR TECHNOLOGY

CIS-331 Fall 2014 Exam 1 Name: Total of 109 Points Version 1

NAS, IP-SAN, CAS. Loeng 4

CIS-331 Exam 2 Spring 2016 Total of 110 Points Version 1

8051 Overview and Instruction Set

CIS-331 Fall 2013 Exam 1 Name: Total of 120 Points Version 1

Lecture Note On Microprocessor and Microcontroller Theory and Applications

Interrupt is a process where an external device can get the attention of the microprocessor. Interrupts can be classified into two types:

Valliammai Engineering College

CIS-331 Spring 2016 Exam 1 Name: Total of 109 Points Version 1

8/26/2010. Introduction to 8085 BLOCK DIAGRAM OF INTEL Introduction to Introduction to Three Units of 8085

QUESTION BANK. EE 6502 / Microprocessor and Microcontroller. Unit I Processor. PART-A (2-Marks)

Puudub protseduur. Protseduuri nimi võib olla valesti kirjutatud. Protseduuri (või funktsiooni) poole pöördumisel on vähem argumente kui vaja.

12-Dec-11. Gursharan Singh Maninder Kaur. Introduction to 8085 BLOCK DIAGRAM OF INTEL Introduction to Introduction to 8085

CIS-331 Exam 2 Fall 2014 Total of 105 Points. Version 1

Transcription:

Arvo Toomsalu, 2017 TALLINNA TEHNIKAÜLIKOOL Arvutisüsteemide instituut Praktikumide juhendmaterjal IAY0520 Arvo Toomsalu 1

P1. Mikroprotsessor Intel 8085 (1976) Inteli käsustikupõhise arhitektuuriga mikroprotsessor 8085 sobib lihtsate skalaarsete Princetoni arhitektuurile põhinevate mikroprotsessorsüsteemide loomiseks. Mikroprotsessori tehnilisi näitajaid Tehnoloogia 3-mikroniline HCMOS tehnoloogia (6500 transistori); Protsessorisõna pikkus 8 kahendjärku; Protsessori taktsagedus 3 MHz, 5 MHz, 6 MHz; Protsessori käsutsükli kestus 1,3 µs, 0,8 µs, 0,67 µs; Protsessori toitepinge - +5V; Protsessori keskmine energiatarve 1,5W; Protsessorkiibi sisend-väljundviikude arv 40; Multiplekseeritav (ühitatud) aadressi (16-järguline) ja andmesiin (8-järguline); Otseadresseeritav mäluruum 2 16 aadressi (64K aadressi); Protsessorkiibis sisaldub taktigeneraator (vajalik on ainult kas väline kvartsresonaator, LC- või RC-lülitus); Katkestused 4 vektorkatkestust (RST 7.5, RST 6.5, RST 5.5, TRAP ja protsessoriga 8080 ühilduv maskitav katkestus INTR; Füüsilised pordid jadaport; Loogilised pordid 256 porti (juhitakse käskudega In ja Out); Registrid 12 adresseeritavat 8-järgulist registrit: Ühilduvus täielik programne ühilduvus mikroprotsessori 8080 käsustikuga. 2

Mikroprotsessori Intel 8085 struktuurskeem 3

Mikroprotsessorkiibi 8085 viikude ja neil olevate signaalide paigutus Mikroprotsessorkiipide 8085 taktsagedused 8085A, 8085AH 3 MHz 8085AH-2 5 MHz 8085AH-1 6 MHz Keraamilises korpuses mikroprotsessorkiip 8085 4

Mikroprotsessori 8085 talitluse ajastamine Protsessori käsutsükkel //instruction cycle// hõlmab käsuvõttu ja käsu töötlust. Iga käsutsükkel koosneb ühest või enamast masinatsüklist //machine cycle//. Masinatsükkel käivitub iga kord kui protsessor alustab kas käsuvõttu, mälupöördust, sisend-väljundoperatsiooni, reageerib katkestusnõudlusele või tema sisemine 8-bitine andmesiin on jõudeolekus. Masinatsükkel sisaldab tüüpiliselt kolme takti //state// (T 1, T 2, T 3 ), välja arvatud käsuvõtuga seotud masinatsükkel, mis tavaliselt sisaldab neli (T 1, T 2, T 3, T 4 ), kusjuures takti (T4) ajal toimub käsuregistrisse (IR) sisestatud käsu käsukoodi dekodeerimine või mõnede käskude korral kuus takti (T 1, T 2, T 3, T 4, T 5, T 6 ). Takt on protsessori tegevuses väikseim ühik, mis on määratletud kui ajavahemik kahe teineteisele järgneva taktsignaali esifrondi vahel. Mikroprotsessori 8085 masinatsüklid (M i ) ja oleku- ja juhtsignaalide kodeerimine OF käsukoodi võtt; MR lugemine mälust; MW- salvestus mällu; IOR S/Vseadmest info lugemine; IOW S/V-seadmesse info salvestamine; INA katkestuse tuvastus; BI siini jõudeolek; IO/ M, S1, S2 juhtsignaalid, mis näitavad protsessori olekut; RD juhtsignaal, mis näitab lugemisoperatsiooni toimumist; WR juhtsignaal, mis näitab salvestusoperatsiooni toimumist; INTA juhtsignaal, mis näitab, et katkestusnõudlus on protsessoris vastu võetud; TS siini kõrgeimpetantsiline //three-sate// olek (Z-olek). 5

Mikroprotsessori 8085 ajaline talitlus käskude täitmisel Masinatsükkel M1 Masinatsükkel M2 Masinatsükkel M3 Käsuvõtt Lugemine Salvestus Käsuvõtt mälust mälust S/V-porti CLK taktsignaal; A 8 -A 15 mälu aadressisõna kõrgemad (vanemad) 8 järku, mis väljastatakse läbi ühesuunalise aadressipuhvi; AD 0-7 multipleksitava aadressisõna (aadressi madalamad (nooremad) kaheksa järku A 0 A 7 ) või andmesõna (D 0 -D 7 ), mis läbivad kahesuunalise andme/aadressipuhvri; ALE juhtsignaal, mis lubab väljastatud aadressisõna salvestamist kiibivälises aadressiregistris; RD lugemissignaal; WR salvestussignaal; IO/ M juhtsignaal, mis määrab kindlaks, kas operatsioon toimub sisend-väljundkanalis (signaali kõrge nivoo) või mäluga (signaali madal nivoo). Signaali kasutatakse koos kas signaaliga RD või signaaliga WR; M 1, M 2, M 3 masinatsüklid M 1, M 2 ja M 3 ; PC H, PC L Käsuloenduri olek, vastavalt käsuloenduri kõrgemad 8 järku (PC H ) ja käsuloenduri madalamad 8 järku (PC L ). Pärast protsessori lähtestust (signaali RESET abil) salvestatakse käsuloendurisse kood PC:= 0000h, st andme-, aadressi- ja juhtsiini liinid on kõrgeimpetantsilises olekus (TS) ja protsessori sisemiste registrite (sh lipuregister) olekud ei ole määratud (olek X ). 6

Mikroprotsessori 8085 programmistimudel Mikroprotsessoris saab programselt moodustada 16-bitiseid registripaare BC, DE ja HL, mida kasutatakse 16-bitiste andmete säilitamiseks. Protsessori suhtlusel mäludega salvestatakse registripaari HL pöördutava mälupesa 16-bitine aadressikood. Programmistimudelis ei kajastu kasutajale programselt mitte juhitav-jälgitavad registrid: Temp, W, Z 8-bitised variregistrid. Registrites W ja Z säilitatakse mõningate operatsioonide (käsud XCHG, XTHL, CALL) täitmisel andmeid; IR 8-bitine käsuregister; Soovitatav kirjandus 1. Ajay Wadhwa. Microprocessor 8085. Architecture, Programming and Interfacing. PHI Learning Private Ltd., New Dehli, 2010. 2. K. U. Kumar, B. S. Umashan. The 8085 Microprocessor, Architecture, Programming and Interfacing: Dorling Kindersley Pvt. Ltd., 2008. 3. N. K. Srinath. 8085 Microprocessor: Programming and Interfacing. Prentice-Hall of India Private Ltd., 2005. 4. Ramesh S. Gaonkar. Microprocessor Architecture, Programming, and Applications with the 8085. Fifth Ed. Prentice Hall, 2002. Võrgumaterjale 1. 8080/8085 Assembly Language Programming-1977. http://www.raidenii.net/files/datasheets/cpu/8080_8085.pdf 2. Tutorial on Introduction to 8085 Architecture and Programming. http://www.phy.davidson.edu/fachome/dmb/py310/8085.pdf 7

Lisa Mõisteid Akumulaator arvuti aritmeetika-loogikaseadme eriregister kuhu tavaliselt talletatakse täidetava tehte üks operandidest, mis seejärel asendatakse tehte tulemiga. Aritmeetika-loogikaseade ( ~üksus, ALS) protsessoris aritmeetilisi ja loogikalisi operatsioone sooritav seade. Käsuloendur protsessoris täidetava või täidetavale käsule järgneva käsu aadressi sisaldav eriregister. Käsuregister protsessori eriregister, mis sisaldab täitmisel olevat käsku. Käsuregister on otseselt ühendatud lülitustega, mis interpreteerivad käsku. Lipuregister protsessori eriotstarbeline register, mille kahendjärgud (bitid) seatakse vastavalt etteantud tingimustele, mis võivad täituda käskude täitmise ajal. Pinuviit protsessori eriregister, mis sisaldab pinutipus sisalduva andmeelemendi aadressi. Protsessor arvuti funktsionaalüksus, mis interpreteerib ja täidab käske. Protsessor koosneb vähemalt juhtseadmest ja aritmeetika-loogikaseadmest. Port välisseadmete liitmik protsessori siinil. Puhver (puhvermälu) eriotstarbeline mäluseade või mäluala, mis võimaldab andmete ajutise salvestuse abil vahetada andmeid kahe erineva edastusparameetritega funktsionaalüksuse (seadme) vahel. Tüüpiliselt kasutatakse registripõhiseid puhvreid (nt andmepuhver, aadressipuhver) andmevahetusel põhimälu ja protsessori või protsessori ja välisseadmete vahel. Põhimälu (sisemälu) arvuti mälusüsteemi osa, millesse tuleb laadida käsud ja andmed enne nende järgnevat täitmist (töötlust). Registrikogum (registermälu) üldjuhul ühtse struktuuriga registrite kogum protsessoris. Siin lülitus ja liidestus (juhtmestik), mis ühendab arvuti erinevaid komponente (sõlmi, funktsionaalseid üksusi), tagades nendevahelise infovahetuse. Virtuaalne välisseade välisseade, mille poole saab pöörduda, kuid mida füüsiliselt ei ole olemas. Näiteks võib rakendusprogramm pöörduda läbi jadapordi printeri poole, mida aga tegelikult pole pordiga ühendatud. Printeri talitlust imiteerib jadaporti ühendatud teine arvuti. Välissalvesti mäluseade, millele on protsessoril juurdepääs ainult sisend-väljundkanalite kaudu. Üldregister registrikogumi tavaliselt ilmutatult adresseeritav register, mida saab kasutada mitmesuguseks otstarbeks. 8

P2. Mikroprotsessori 8085 käsustik I Programmi jõudlus See kuidas programmid on koostatud, mõjutab otseselt arvutisüsteemi jõudlust: 1 Jõudlus =. Töötlusaeg Programmi koostamisel tuleb tagada, et see oleks kiire ja talitleks korrektselt kõikides rakendustingimustes. Efektiivselt töötava programmi koostamisel on oluline, et: oleksid valitud õiged algoritmid ja andmestruktuurid, programmi lähtekood peab olema selline, et kompilaator suudaks seda transleerida efektiivseks objektkoodiks. Tavaliselt iseloomustatakse programme kahe üldise näitajaga koodi mahukus (programmiridade arv ehk LOC //lines of program//) ja koodi keerukus. Kui lähtekood on assembleris, siis sellise koodi mahukust lihtne mõõta, sest selles vastab üks programmirida ühele käsule. Programmi jõudluse maksimeerimiseks, peavad nii programmist kui ka kompilaator arvesse võtma konkreetse arvuti iseärasusi, eeskätt seda, kuidas arvutis toimub käskude töötlemine ja täidetavate operatsioonide ajalisi parameetrid. Programmi jõudlus sõltub selle koostamisel kasutatud algoritmist, programmeerimiskeelest, translaatorist ja arvuti arhitektuursest lahendusest. Jõudluse komponent Mida jõudluse komponent mõjutab Algoritm Programmeerimiskeel Kompilaator Käsustiku arhitektuur (ISA) Käskude arvu programmis Kaudselt keskmist taktide arvu ühe käsu kohta ehk CPI-d Käskude arvu programmis CPI-d Käskude arvu programmis CPI-d Käskude arvu programmis CPI-d Taktsagedust 9

Mikroprotsessoris saab kasutada järgmiseid andmeformaate: 1. ASCII - koodi 8-bitised tärgid; 2. BCD ehk kahend-kümnendkoodi 4-bitised numbrid (0 kuni 9); 3. Märgita 8-bitised täisarvud (00h kuni ffh); 4. Märgiga 8-bitised täisarvud Märgiga arvude korral kasutatakse andmesõna kõrgeimat kaheksandat järku (D7) märgijärguna. Ülejäänud andmesõna järgud (D6 kuni D0) esindavad andmebitte. Positiivsete arvude korral omistatakse järgule D7 kahendväärtuse 0, st positiivseid arve kujutatakse vahemikus 00h kuni 7fh, negatiivsete arvude korral aga D7:=1, st negatiivseid arve kujutatakse vahemikus 80h kuni ffh. Negatiivseid arve esitatakse protsessoris täiendkoodis. 10

Protsessori 8085 käsuklassid Käsud andmete teisalduseks Käsud aritmeetiliste operatsioonide läbiviimiseks Loogiliste operatsioonide käsud Juhtimis-, pinu- ja sisend-väljundoperatsioonide käsud Adresseerimise viisid Mikroprotsessoris 8085 rakendatakse nelja adresseerimisviisi: Vahetu adresseerimine (operand) //immediate// Käsus sisaldub operandi väärtus. ADI data (A) (A)+(byte2) [C6; byte2 (operand)] Otsene adresseerimine (otseaadress) //direct// Käsu 2. (aadressi noorem (madalam) bait) ja 3. baidis (aadressi vanem (kõrgem) bait) sisaldub mälupesa aadress, kus operandi väärtus paikneb. LHLD addr (L) ((byte3)(byte2) [2A; byte2 (operandi aadressi nooremad järgud); byte3 (operandi aadressi vanemad järgud)] (H) ((byte3)(byte2)+1) Fikseeritud adresseerimine (registeraadress) //register// Käsk määrab registri või registripaari, kus operandi väärtus asub. ADD r (A) (A)+(r) [80; (operand asub registris r=b)] Kaudne adresseerimine (register-kaudadresseerimine) //register indirect// Käsus näidatakse registripaar, kuhu on salvestatud mälupesa aadress, milles paikneb operand. Mälupesa adresseerimine toimub nagu see on näidatud kolmebaidise käsu üldvormingus. Näiteks registripaari HL korral on mälupesa aadressi vanem aadressibait registris H ja noorem bait registris L. ADD M (A) (A)+((H)(L)) [86; (mälupesa aadress, kus paikneb operand, sisaldub registripaaris HL] 11

Lipuregister Lipuregister sisaldab viite ühebitist lippu S, Z, AC, P ja CY. S märk //sign// Kui operatsiooni tulemi vanima järgu väärtus on 1 (D7:=1), siis S:=1, vastasel korral S:=0. Märgi lippu kasutatakse opereerimisel märgiga arvudega. Märgita arvude korral lippu S ei kasutata. Z null //zero// Kui operatsiooni tulemi väärtus on 0, siis Z:=1, vastasel korral Z:=0. AC - abiülekanne //auxiliary carry// Kui käsu täitmisel esineb ülekanne operandi (tulemi) 3-st järgust 4-sse järku (D3 D4), siis AC:=1, vastasel korral AC:=0. P paarsus //parity// Kui operatsiooni tulemi väärtus mod2 on võrdne 0-ga, siis P:=1, vastasel korral P:=0. CY ülekanne //carry// Kui operatsiooni tulemusena tekib tulemi vanimast järgust (D7) ülekanne (liitmise operatsioon) või vanimas järgus tekib laenu //borrow// vajadus (lahutamise operatsioon), siis CY:=1, vastasel korral CY:=0. Lippude kodeering tingimuslikes siirdekäskudes Tingimus Kahendkood CCC NZ mitte null (Z: = 0) 000 Z null (Z:= 1) 001 NC ülekanne puudub (CY:=0) 010 C ülekanne (CY:=1) 011 PO paaritu (P:=0) 100 PE paaris (P:=1) 101 P pluss (S:=0) 110 M miinus (S:=1) 111 12

Mikroprotsessori 8085 käskude kirjeldused Käsustiku kirjelduses kasutatud tähistused PC käsuloendur SP pinuviit acc akumulaatorregister addr 16-bitine aadressisõna data 8-bitine operand data 16 16-bitine andmesõna port 8-bitine pordi aadress byte 2 käsu teine bait byte 3 käsu kolmas bait r, r1, r2 register (A, B, C, D, E; H või L) rl register, mis sisaldab 16-bitise andmesõna madalamaid järke rh register, mis sisaldab 16-bitise andmesõna kõrgemaid järke r m andmebiti järk (number) registris Z nulli lipp S märgi lipp P paarsuse lipp CY ülekande lipp AC abiülekande lipp n restardi (algkäivituse) number (n = 0,..., 7) NNN restardi numbri kahendkood (NNN = 000,..., 111) - inversioon & - konjunktsioon v disjunktsioon + - liitmine - - lahutamine Registrite (r) koodid DDD sihtregister; SSS allikregister DDD või SSS kahendkood Register 111 A 000 B 001 C 010 D 011 E 100 H 101 L 13

Registripaaride (rp) koodid Registripaaris osundab esimese registri mnemooniline tähis vanemaid andmejärke sisaldavat registrit (registrid B, D, H) ja teise registri mnemooniline tähis osundab nooremaid andmejärke sisaldavale registrile (registrid C, E, L). B-C madalamad (nooremad) andmejärgud kõrgemad (vanemad) andmejärgud rp kahendkood Registripaar 00 BC 01 DE 10 HL 11 SP ehk PSW Programmi olekusõna //PSW Program Status Word// 15 A 7 0 0 F 7 0 Programmi olekusõna esitatakse registripaarina, mille kõrgemad kaheksa bitti sisaldavad akumulaatoris (A) sisalduva koodi ja madalamad kaheksa bitti esitavad lipuregistri (F) lippude olekuid. Programmi olekusõna juhitakse käskudega POP PSW ja PUSH PSW. Käskude kirjeldustes on käsukoodid esitatud kuueteistkümnendkoodis. 14

Andmeedastuse käsud MOV r1, r2 Edastus registrist (Move Register) (r1) (r2) Allikregistris (r2) sisalduv kood edastatakse sihtregistrisse (r1). Andmeedastuse käskude täitmisel säilivad allikregistritesse salvestatud andmed muutumatuna. mov r1, r2 0 1 D D D S S S Masinatsükleid: 1 Takte: 4 Adresseerimine: registeraadress Lipud: - Käsukoodide variandid Sihtregister (r1) Allikregister (r2) B C D E H L A B 40 41 42 43 44 45 47 C 48 49 4A 4B 4C 4D 4F D 50 51 52 53 54 55 57 E 58 59 5A 5B 5C 5D 4F H 60 61 62 63 64 65 67 L 68 69 6A 6B 6C 6D 6F A 78 79 7A 7B 7C 7D 7F MOV r, M Edastus mälust (Move from memory) (r) ((H)(L)) Mälupesas, mille aadress asub registripaaris HL, sisalduv kood edastatakse registrisse r. mov r, m 0 1 D D D 1 1 0 Masinatsükleid: 2 Takte: 7 Adresseerimine: kaudaadress Lipud: - Käsukoodide variandid B C D E H L A 46 4E 56 5E 66 6E 7E 15

MOV M, r Salvestus mällu (Move to memory) ((H)(L)) (r) Registris r sisalduv kood edastatakse mälupessa, mille aadress asub registripaaris HL. mov m, r 0 1 1 1 0 S S S Masinatsükleid: 2 Takte: 7 Adresseerimine: kaudaadress Lipud: - Käsukoodide variandid B 70 C 71 D 72 E 73 H 74 L 75 A 77 MVI r, data Operandi salvestus (Move Immediate) (r) (bait 2) Käsu teise baidi (operandi) väärtus edastatakse registrisse r. mvi r, data D D D 0 0 1 1 0 operand Masinatsükleid: 2 Takte: 7 Adresseerimine: operand Lipud: - Käsukoodide variandid Register Käsukood B 06 C 0E D 16 E 1E H 26 L 2E A 3E 16

MVI M, data Operandi salvestus mällu (Move to memory immediate) ((H)(L)) (bait 2) Käsu teise baidi (operandi) väärtus edastatakse mälupessa, mille aadress asub registripaaris HL. mvi m, data 0 0 1 1 0 1 1 0 operand Masinatsükleid: 3 Takte: 10 Adresseerimine: operand / kaudaadress Lipud: - Käsukood: 36 LXI rp, data 16 16-bitise operandi edastus registripaari (Load register pair immediate) (rh) (bait 3) (rl) (bait 2) Käsu kolmas bait (operandi kõrgemad järgud) edastatakse registripaari rp kõrgematesse järkudesse (rh) ja käsu teine (operandi madalamad järgud) edastatakse registripaari rp madalamatesse järkudesse (rl). lxi rp, data 16 0 1 r p 0 0 0 1 operandi madalamad järgud operandi kõrgemad järgud Masinatsükleid: 3 Takte: 10 Adresseerimine: operand Lipud: - Käsukoodide variandid Registripaar Käsukood BC 01 DE 11 HL 21 SP 31 17

LDA addr Operandi edastus akumulaatorisse (Load Accumulator direct) (A) ((bait 3)(bait 2) Mälupesa, mille aadress on määratud käsu kolmanda (aadressi kõrgemad järgud) ja teise (aadressi madalamad järgud) baidi väärtustega, sisalduv kood edastatakse akumulaatorisse (A). lda addr 0 0 1 1 1 0 1 0 aadressi madalamad järgud aadressi kõrgemad järgud Masinatsükleid: 4 Takte: 13 Adresseerimine: otseaadress Lipud: - Käsukood: 3A STA addr Akumulaatori sisu salvestus mällu (Store Accumulator direct) ((bait3)(bait 2) (A) Akumulaatoris (A) sisalduv kood edastatakse mälupessa, mille aadress on määratud käsu kolmanda (aadressi kõrgemad järgud) ja teise (aadressi madalamad järgud) baidi väärtustega. sta addr 0 0 1 1 0 0 1 0 aadressi madalamad järgud aadressi kõrgemad järgud Masinatsükleid: 4 Takte: 13 Adresseerimine: otseaadress Lipud: - Käsukood: 32 18

P3. Mikroprotsessori 8085 käsustik II LHLD addr Mälupesa sisu edastus registripaari HL (Load H and L direct) (L) ((bait 3)(bait 2)) (H) ((bait 3)(bait 2) + 1) Mälupesas, mille aadress on määratud käsu kolmanda (aadressi kõrgemad järgud) ja teise (aadressi madalamad järgud) baidi väärtustega, sisalduv kood edastatakse registrisse L. Antud aadressile järgneva aadressiga mälupesas sisalduv kood edastatakse registrisse H. lhld addr 0 0 1 0 1 0 1 0 aadressi madalamad järgud aadressi kõrgemad järgud Masinatsükleid: 5 Takte: 16 Adresseerimine: otseaadress Lipud: - Käsukood: 2A SHLD addr Registripaari HL sisu salvestus mällu (Store H and L direct) ((bait 3 (bait 2)) (L) ((bait 3)(bait 2) + 1) (H) Registris L sisalduv kood edastatakse mälupessa, mille aadress on määratud käsu kolmanda (aadressi kõrgemad järgud) ja teise (aadressi madalamad järgud) baidi väärtustega. Registris H sisalduv kood edastatakse antud aadressile järgneva aadressiga mälupessa. shld addr 0 0 1 0 0 0 1 0 aadressi madalamad järgud aadressi kõrgemad järgud Masinatsükleid: 5 Takte: 16 Adresseerimine: otseaadress Lipud: - Käsukood: 22 19

LDAX rp Mälupesa, mille aadress on registripaaris rp, sisu salvestus akumulaatorisse ((Load accumulator indirect) (A) ((rp)) Mälupesas, mille aadress asub registripaaris rp, sisalduv kood edastatakse akumulaatorisse (A). Adresseerimiseks saab kasutada üksnes registripaare BC ja DE. ldax rp 0 0 r p 1 0 1 0 Masinatsükleid: 2 Takte: 7 Adresseerimine: kaudaadress Lipud: - Käsukoodide variandid Registripaar Käsukood BC 0A DE 1A STAX rp Akumulaatori sisu salvestus mälupessa, mille aadress asub registripaaris rp (Store accumulator indirect) ((rp)) (A) Akumulaatoris (A) sisalduv kood edastatakse mälupessa mille aadress asub registripaaris rp. Adresseerimiseks saab kasutada üksnes registripaare BC ja DE. stax rp 0 0 r p 0 0 1 0 Masinatsükleid: 2 Takte: 7 Adresseerimine: kaudaadress Lipud: - Käsukoodide variandid Registripaar Käsukood BC 02 DE 12 20

XCHG Registripaari HL sisu vahetus registripaariga DE (Exchange H and L with D and E) (H) (D) (L) (E) Registripaarides HL ja DE sisalduvad koodid vahetatakse omavahel. xchg 1 1 1 0 1 0 1 1 Masinatsükleid: 1 Takte: 4 Adresseerimine: registeraadress Lipud: - Käsukood: EB Aritmeetikakäsud ADD r Liita akumulaatori ja registri sisud (Add Register) (A) (A) + (r) Registris r sisalduvale koodile liidetakse akumulaatoris (A) sisalduv kood. Tulem salvestatakse akumulaatorisse. add r 1 0 0 0 0 S S S Masinatsükleid: 1 Takte: 4 Adresseerimine: registeraadress Lipud: Z, S,P, CY, AC Käsukoodide variandid Register Käsukood B 80 C 81 D 82 E 83 H 84 L 85 A 87 21

ADD M Liita akumulaatori ja mälupesa sisud (Add memory) (A) (A) + ((H)(L)) Mälupesas, mille aadress asub registripaaris HL, sisalduvale koodile liidetakse akumulaatoris (A) sisalduv kood Tulem salvestatakse akumulaatorisse. add m 1 0 0 0 0 1 1 0 Masinatsükleid: 2 Takte: 7 Adresseerimine: kaudaadress Lipud: Z; S; P; CY; AC Käsukood: 86 ADI data Liita akumulaatori sisule operand (Add immediate) (A) (A) + (bait 2) Käsu teise baidi väärtus liidetakse akumulaatoris (A) sisalduvale koodile. Tulem salvestatakse akumulaatorisse. adi data 1 1 0 0 0 1 1 0 operand Masinatsükleid: 2 Takte: 7 Adresseerimine: operand Lipud: Z, S; P; CY, AC Käsukood: C6 ADC r Liita akumulaatori sisule registri ja ülekandelipu sisud (Add Register with carry) (A) (A) + (r) + (CY) Registris r sisalduv kood ja ülekandelipu (CY) väärtus liidetakse akumulaatoris (A) sisalduvale koodile. Tulem salvestatakse akumulaatorisse. 22

adc r 1 0 0 0 1 S S S Masinatsükleid: 1 Takte: 4 Adresseerimine: registeraadress Lipud: Z; S; P; CY; AC Käsukoodide variandid Register Käsukood B 88 C 89 D 8A E 8B H 8C L 8D A 8F ADC M Liita akumulaatori sisule mälupesa ja ülekandelipu sisud (Add memory with carry) (A) (A) + ((H)(L)) + (CY) Mälupesas, mille aadress asub registripaaris HL, sisalduv kood ja ülekandelipu väärtus liidetakse akumulaatoris (A) sisalduvale koodile. Tulem salvestatakse akumulaatorisse. adc m 1 0 0 0 1 1 1 0 Masinatsükleid: 2 Takte: 7 Adresseerimine: kaudaadress Lipud: Z; S; P; CY; AC Käsukood: 8E ACI data Liita akumulaatori sisule operand ja ülekandlipu sisu (Add immediate with carry) (A) ((A) + (bait 2) + (CY) Käsu teise baidi (operand) ja ülekandelipu (CY) väärtused liidetakse akumulaatoris (A) sisalduvale koodile. Tulem salvestatakse akumulaatorisse. 23

aci data 1 1 0 0 1 1 1 0 operand Masinatsükleid: 2 Takte: 7 Adresseerimine: operand Lipud: Z; S; P; CY; AC Käsukood: CE SUB r Akumulaatori sisust registri sisu lahutamine (Subtract Register) (A) (A) (r) Registris r sisalduv kood lahutatakse akumulaatoris (A) sisalduvast koodist. Tulem salvestatakse akumulaatorisse. sub r 1 0 0 1 0 S S S Masinatsükleid: 1 Takte: 4 Adresseerimine: registeraadress Lipud: Z; S; P; CY; AC Käsukoodide variandid Register Käsukood B 90 C 91 D 92 E 93 H 94 L 95 A 97 SUB M Akumulaatori sisust mälupesa sisu lahutamine (Subtract memory) (A) (A) ((H)(L)) Mälupesas, mille aadress asub registripaaris HL, sisalduv kood lahutatakse akumulaatoris (A) sisalduvast koodist. Tulem salvestatakse akumulaatorisse. 24

sub m 1 0 0 1 0 1 1 0 Masinatsükleid: 2 Takte: 7 Adresseerimine: kaudaadress Lipud: Z; S; P; CY; AC Käsukood: 96 SUI data Akumulaatori sisust operandi lahutamine (Subtract immediate) (A) (A) (bait 2) Käsu teise baidi (operand) väärtus lahutatakse akumulaatoris (A) sisalduvast koodist. Tulem salvestatakse akumulaatorisse. sui data 1 1 0 1 0 1 1 0 operand Masinatsükleid: 2 Takte: 7 Adresseerimine: operand Lipud: Z; S; P; CY; AC Käsukood: D6 SBB r Akumulaatori sisust lahutada registris ja ülekandelipus olevad väärtused (Subtract Register with borrow) (A) (A) - (r) (CY) Registris r sisalduv kood ja ülekandelipu (CY) sisu lahutatakse akumulaatoris (A) sisalduvast koodist. Tulem salvestatakse akumulaatorisse. sbb r 1 0 0 1 1 S S S Masinatsükleid: 1 Takte: 4 Adresseerimine: registeraadress Lipud: Z; S; P; CY; AC 25

Käsukoodide variandid Register Käsukood B 98 C 99 D 9A E 9B H 9C L 9D A 9F SBB M Akumulaatori sisust mälupesa ja ülekandelipus olevad väärtused (Subtract memory with borrow) (A) (A) ((H)(L)) (CY) Mälupesas, mille aadress asub registripaaris HL, sisalduv kood ja ülekandelipu (CY) väärtus lahutatakse akumulaatoris (A) sisalduvast koodist. Tulem salvestatakse akumulaatorisse. sbb m 1 0 0 1 1 1 1 0 Masinatsükleid: 2 Takte: 7 Adresseerimine: kaudaadress Lipud: Z; S; P; CY; AC Käsukood: 9E SBI data Akumulaatori sisust operandi ja ülekande lipu väärtused (Subtract immediate with borrow) (A) (A) (bait 2) (CY) Käsu teise baidi (operand) ja ülekandlipu (CY) väärtused lahutatakse akumulaatoris (A) sisalduvast koodist. Tulem salvestatakse akumulaatorisse. sbi data 1 1 0 1 1 1 1 0 operand Masinatsükleid: 2 Takte: 7 Adresseerimine: operand Lipud: Z; S; P; CY; AC Käsukood: DE 26

INR r Registri sisu inkrementeerimine (Increment Register) (r) (r) + 1 Registris r sisalduvat koodi inkrementeeritakse 1 võrra. inr r 0 0 D D D 1 0 0 Masinatsükleid: 1 Takte: 4 Adresseerimine: registeraadress Lipud: Z; S; P; AC Käsukoodide variandid Register Käsukood B 04 C 0C D 14 E 1C H 24 L 2C A 3C INR M Mälupesa sisu inkrementeerimine (Increment memory) ((H)(L)) ((H)(L)) + 1 Mälupesas, mille aadress asub registripaaris HL, sisalduvat koodi inkrementeeritakse 1 võrra. inr m 0 0 1 1 0 1 0 0 Masinatsükleid: 3 Takte: 10 Adresseerimine: kaudaadress Lipud: Z; S; P; AC Käsukood: 34 DCR r Registri sisu dekrementeerimine (Decrement Register) (r) (r) - 1 Registris r sisalduvat koodi dekrementeeritakse 1 võrra. 27

dcr r 0 0 D D D 1 0 1 Masinatsükleid: 1 Takte: 4 Adresseerimine: registeraadress Lipud: Z; S; P; AC Käsukoodide variandid Register Käsukood B 05 C 0D D 15 E 1D H 25 L 2D A 3D DCR M Mälupesa sisu dekrementeerimine (Decrement memory) ((H)(L)) ((H)(L)) - 1 Mälupesa, mille aadress asub registripaaris HL, sisalduvat koodi dekrementeeritakse 1 võrra. dcr m 0 0 1 1 0 1 0 1 Masinatsükleid: 3 Takte: 10 Adresseerimine: kaudaadress Lipud: Z; S; P; AC Käsukood: 35 INX rp Registripaari sisu inkrementeerimine (Increment register pair) (rh)(rl) (rh)(rl) +1 Registripaaris rp sisalduvat koodi inkrementeeritakse 1 võrra. inx rp 0 0 r p 0 0 1 1 28

Masinatsükleid: 1 Takte: 6 Adresseerimine: registeraadress Lipud: - Käsukoodide variandid Registripaar Käsukood BC 03 DE 13 HL 23 SP 33 DCX rp Registripaari sisu dekrementeerimine (Decrement register pair) (rh)(rl) (rh)(rl) 1 Registripaaris rp sisalduvat koodi dekrementeeritakse 1 võrra. dcx rp 0 0 r p 1 0 1 1 Masinatsükleid: 1 Takte: 6 Adresseerimine: registeraadress Lipud: - Käsukoodide variandid Registripaar Käsukood BC 0B DE 1B HL 2B SP 3B DAD rp Registripaari sisu liitmine registripaarile HL (Add register pair to H and L) (H)(L) (H)(L) + (rh)(rl) Registripaaris HL sisalduvale koodile liidetakse registripaaris rh, rl sisalduv kood. Tulem salvestatakse registripaaris HL. dad rp 0 0 r p 1 0 0 1 Masinatsükleid: 3 29

Takte: 10 Adresseerimine: registeraadress Lipud: CY Käsukoodide variandid Registripaar Käsukood BC 09 DE 19 HL 29 SP 39 DAA Akumulaatoris oleva koodist kahend-kümnendkoodiarvu moodustamine (Decimal adjust Accumulator) Akumulaatoris (A) sisalduvast 8-bitisest binaarkoodist moodustatakse kaks 4-bitist kahend-kümnendkoodi arvu. daa 0 0 1 0 0 1 1 1 Masinatsükleid: 1 Takte: 4 Lipud: Z; S; P; CY; AC Käsukood: 27 30

P4. Mikroprotsessori 8085 käsustik III Loogikaoperatsioonide käsud ANA r Akumulaatori ja registri sisude konjunktsioon (AND register) (A) (A) & (r) Registris r sisalduva koodi ja akumulaatoris (A) sisalduva koodi loogiline korrutamine Tulem salvestatakse akumulaatorisse. ana r 1 0 1 0 0 S S S Masinatsükleid: 1 Takte: 4 Adresseerimine: registeraadress Lipud: Z; S; P; CY; AC Käsukoodide variandid Register Käsukood B A0 C A1 D A2 E A3 H A4 L A5 A A7 ANA M Akumulaatori ja mälupesa sisude konjunktsioon (AND memory) (A) (A) & ((H)(L)) Mälupesas, mille aadress asub registripaaris HL, sisalduva koodi ja akumulaatoris (A) sisalduva koodi loogiline korrutamine. Tulem salvestatakse akumulaatorisse. ana m 1 0 1 0 0 1 1 0 Masinatsükleid: 2 Takte: 7 Adresseerimine: kaudaadress Lipud: Z; S; P; CY; AC Käsukood: A6 31

ANI data Akumulaatori sisu ja operandi konjunktsioon (AND immediate) (A) (A) & (bait 2) Käsukoodi teises baidi (operand) väärtuse ja akumulaatoris (A) sisalduva koodi loogiline korrutamine. Tulem salvestatakse akumulaatorisse. ani data 1 1 1 0 0 1 1 0 operand Masinatsükleid: 2 Takte: 7 Adresseerimine: operand Lipud: Z; S; P; CY; AC Käsukood: E6 XRA r Akumulaatori ja registri sisude välistav-või (Exclusive OR Register) (A) (A) ө (r) Registris r sisalduva koodi ja akumulaatoris (A) sisalduva koodi välistav-või. Tulem salvestatakse akumulaatorisse. xra r 1 0 1 0 1 S S S Masinatsükleid: 1 Takte: 4 Adresseerimine: registeraadress Lipud: Z; S; P; CY; AC Käsukoodide variandid Register Käsukood B A8 C A9 D AA E AB H AC L AD A AF 32

XRA M Akumulaatori ja mälupesa sisude välistav-või (Exclusive OR memory) (A) (A) ө ((H)(L)) Mälupesas, mille aadress asub registripaaris HL, sisalduva koodi ja akumulaatoris (A) sisalduva koodi välistav-või. Tulem salvestatakse akumulaatorisse. xra m 1 0 1 0 1 1 1 0 Masinatsükleid: 2 Takte: 7 Adresseerimine: kaudaadress Lipud: Z; S; P; CY; AC Käsukood: AE XRI data Akumulaatori sisu ja operandi välistav-või (Exclusive OR immediate) (A) (A) ө (bait 2) Käsu teise baidi (operand) väärtuse ja akumulaatoris (A) sisalduva koodi välistav-või. Tulem salvestatakse akumulaatorisse. xri data 1 1 1 0 1 1 1 0 operand Masinatsükleid: 2 Takte: 7 Adresseerimine: operand Lipud: Z; S; P; CY; AC Käsukood: EE ORA r Akumulaatori ja registri sisude disjunktsioon (OR Register) (A) (A) v (r) Registris r sisalduva koodi ja akumulaatoris (A) sisalduva koodi loogiline liitmine. Tulem salvestatakse akumulaatorisse. ora r 1 0 1 1 0 S S S 33

Masinatsükleid: 1 Takte: 4 Adresseerimine: registeraadress Lipud: Z; S; P; CY; AC Käsukoodide variandid Register Käsukood B B0 C B1 D B2 E B3 H B4 L B5 A B7 ORA M Akumulaatori ja mälupesade sisude disjunktsioon (OR memory) (A) (A) v ((H)(L)) Mälupesas, mille aadress asub registripaaris HL, sisalduva koodi ja akumulaatoris (A) sisalduva koodi loogiline liitmine. Tulem salvestatakse akumulaatorisse. ora m 1 0 1 1 0 1 1 0 Masinatsükleid: 2 Takte: 7 Adresseerimine: kaudaadress Lipud: Z; S; P; CY; AC Käsukood: B6 ORI data Akumulaatori sisu ja operandi disjunktsioon (OR immediate) (A) (A) v (bait 2) Käsu teises baidis (operand) sisalduva koodi ja akumulaatoris (A) sisalduva koodi loogiline liitmine. Tulem salvestatakse akumulaatorisse. ori data 1 1 1 1 0 1 1 0 operand 34

Masinatsükleid: 2 Takte: 7 Adresseerimine: operand Lipud: Z; S; P; CY; AC Käsukood: F6 CMP r Akumulaatori sisu võrdlus registri sisuga (Compare Register) (A) (r) Registris r sisalduv kood lahutatakse akumulaatoris (A) sisalduvast koodist. Akumulaatori algne sisu säilib, kuid lahutamise tehte tulemusena väärtustatakse lipud. Z:=1 kui (A) = (r) ja CY:=1 kui (A)<(r). cmp r 1 0 1 1 1 S S S Masinatsükleid: 1 Takte: 4 Adresseerimine: registeraadress Lipud: Z; S; P; CY; AC Käsukoodide variandid Register Käsukood B B8 C B9 D BA E BB H BC L BD A BF CMP M Akumulaatori sisu võrdlus mälupesa sisuga (Compare memory) (A) ((H)(L)) Mälupesas, mille aadress asub registripaaris HL, sisalduv kood lahutatakse akumulaatoris (A) sisalduvast koodist. Akumulaatori algne sisu säilib, kuid lahutamise tehte tulemusena väärtustatakse lipud. Z:=1 kui (A) = ((H)(L)) ja CY:=1 kui (A)<((H)(L)). 35

cmp m 1 0 1 1 1 1 1 0 Masinatsükleid: 2 Takte: 7 Adresseerimine: kaudaadress Lipud: Z; S; P; CY; AC Käsukood: BE CPI data Akumulaatori sisu võrdlus operandiga (Compare immediate) (A) (bait 2) Käsu teise baidi (operand) väärtus lahutatakse akumulaatoris (A) sisalduvast koodist. Akumulaatori algne sisu säilib, kuid lahutamise tehte tulemusena väärtustatakse lipud. Z:=1 kui (A) = (operand) ja CY:=1 kui (A)<(operand). cpi data 1 1 1 1 1 1 1 0 operand Masinatsükleid: 2 Takte: 7 Adresseerimine: operand Lipud: Z; S; P; CY; AC Käsukood: FE RLC Nihe vasakule (Rotate left) (A n+1 ) (A n ); (A 0 ) (A 7 ) (CY) (A 7 ) Akumulaatoris (A) sisalduvat koodi nihutatakse vasakule ühe positsiooni võrra. rlc 0 0 0 0 0 1 1 1 Masinatsükleid: 1 Takte: 4 Lipud: CY Käsukood: 07 36

RRC Nihe paremale (Rotate right) (A n ) (A n+1 ); (A 7 ) (A 0 ) (CY) (A 0 ) Akumulaatoris (A) sisalduvat koodi nihutatakse paremale ühe positsiooni võrra. rrc 0 0 0 0 1 1 1 1 Masinatsükleid: 1 Takte: 4 Lipud: CY Käsukood: 0F RAL Nihe vasakule läbi ülekandelipu (Rotate left through carry) (A n+1 ) (A n ); (CY) (A 7 ) (A 0 ) (CY) Akumulaatoris (A) sisalduvat koodi nihutatakse, läbi ülekandelipu (CY), ühe positsiooni võrra vasakule. ral 0 0 0 1 0 1 1 1 Masinatsükleid: 1 Takte: 4 Lipud: CY Käsukood: 17 RAR Nihe paremle läbi ülekandelipu (Rotate right through carry) (A n ) (A n+1 ); (CY) (A 0 ) (A 7 ) (CY) Akumulaatoris (A) sisalduvat koodi nihutatakse, läbi ülekandelipu (CY), ühe positsiooni võrra paremale. rar 0 0 0 1 1 1 1 1 Masinatsükleid: 1 Takte: 4 Lipud: CY Käsukood: 1F 37

CMA Akumulaatori sisu inversioon (Complement accumulator) (A) ( A) Akumulaatoris (A) sisalduv kood inverteeritakse. cma 0 0 1 0 1 1 1 1 Masinatsükleid: 1 Takte: 4 Lipud: - Käsukood: 2F CMC Ülekandlipu sisu inversioon (Complement carry) (CY) ( CY) Ülekandlipu (CY) väärtus inverteeritakse. cmc 0 0 1 1 1 1 1 1 Masinatsükleid: 1 Takte: 4 Lipud: CY Käsukood: 3F STC Ülekandelipu väärtustamine (Set carry) (CY) 1 Ülekandlipu (CY) väärtuseks omistatakse 1. stc 0 0 1 1 0 1 1 1 Masinatsükleid: 1 Takte: 4 Lipud: CY Käsukood: 37 38

Hargnemiskäsud JMP addr Sundsiire (Jump) (PC) (bait 3)(bait 2) Juhtimine (PC kood) antakse üle käsule, mille aadress on määratud käsu kolmanda (aadressi kõrgemad järgud) ja teise (aadressi madalamad järgud) baitide väärtustega. jmp addr 1 1 0 0 0 0 1 1 aadressi madalamad järgud aadressi kõrgemad järgud Masinatsükleid: 3 Takte: 10 Adresseerimine: operand Lipud: - Käsukood: C3 JC Tingimussiire (Conditional jump) Kui (CCC), siis (PC) (bait 3)(bait 2) Kui valitud tingimus on täidetud, siis juhtimine (PC kood) antakse üle käsule, mille aadress on määratud käsu kolmanda (aadressi kõrgemad järgud) ja teise (aadressi madalamad järgud) baidi väärtustega. jc addr 1 1 C C C 0 1 0 aadressi madalamad järgud aadressi kõrgemad järgud Masinatsükleid: 2/3 Takte: 7/10 [7 takti kui siirde tingimus ei ole täidetud / 10 takti kui siirde tingimus on täidetud] Adresseerimine: operand Lipud: - 39

Käsukoodide variandid Mnemoonika Tingimus Käsukood JC CY=1 DA JNC CY=0 D2 JP S=0 F2 JM S=1 FA JPE P=1 EA JPO P=0 E2 JZ Z=1 CA JNZ Z=0 C2 CALL addr Kutse (Call) ((SP) 1) (PCH) ((SP) 2) (PCL) (SP) (SP) 2 (PC) (bait 3)(bait 2) Esmalt suunatakse antud käsule järgneva käsu aadressi kõrgemate järkude väärtus mälupessa, mille aadress on ühe võrra väiksem kui pinuviida (SP) väärtus ja aadressi madalamad järgud mälupessa, mille aadress on kahe võrra väiksem kui pinuviida väärtus. Seejärel vähendatakse pinuviida väärtust kahe võrra. Juhtimine (PC kood) suunatakse käsule, mille aadress on määratud käsu kolmanda (aadressi kõrgemad järgud) ja teise (aadressi madalamad järgud) baidi väärtustega. call addr 1 1 0 0 1 1 0 1 aadressi madalamad järgud aadressi kõrgemad järgud Masinatsükleid: 5 Takte: 18 Adresseerimine: operand/kaudaadress Lipud: - Käsukood: CD CC Tingimuslik kutse (Condition call) Kui (CCC), siis ((SP) 1) (PCH) ((SP) 2) (PCL) (SP) (SP) 2 (PC) (bait 3)(bait 2) 40

Kui valitud tingimus (CCC) on tõene, siis toimub käsu täitmine analoogiliselt käsule CALL addr, vastasel korral asutakse täitma käsku, mille aadressi väärtus on 1 võrra suurem kui jooksval käsul. cc addr 1 1 C C C 1 0 0 aadressi madalamad järgud aadressi kõrgemad järgud Masinatsükleid: 2/5 Takte: 9/18 Adresseerimine: operand/kaudaadress Lipud: - Käsukoodide variandid Mnemoonika Tingimus Käsukood CC CY=1 DC CNC CY=0 D4 CP S=0 F4 CM S=1 FC CPE P=1 EC CPO P=0 E4 CZ Z=1 CC CNZ Z=0 C4 RET Naasmine (Return) (PCL) ((SP)); (PCH) ((SP) + 1); (SP) (SP) + 2; Mälupesas, mille aadress on määratud pinuviida (SP) väärtusega, sisalduv kood suunatakse käsuloenduri (PC) madalamatesse järkudesse ja mälupesas, mille kood on 1 võrra suurem pinuviida väärtusest, suunatakse käsuloenduri kõrgematesse järkudesse. Seejärel suurendatakse pinuviida väärtust 2 võrra. ret 1 1 0 0 1 0 0 1 Masinatsükleid: 3 Takte: 10 Adresseerimine: kaudaadress Lipud: - Käsukood: C9 41

RC Tingimuslik naasmine (Conditional return) Kui (CCC); siis (PCL) ((SP)); (PCH) ((SP) + 1); (SP) (SP) + 2; Kui valitud tingimus (CCC) on tõene, siis toimub käsu täitmine analoogiliselt käsule RET, vastasel korral asutakse täitma käsku, mille aadressi väärtus on 1 võrra suurem kui jooksval käsul.. rc 1 1 C C C 0 0 0 Masinatsükleid: 1/3 Takte: 6/12 Adresseerimine: kaudaadress Lipud: - Käsukoodide variandid Mnemoonika Tingimus Käsukood RC CY=1 D8 RNC CY=0 D0 RP S=0 F0 RM S=1 F8 RPE P=1 E8 RPO P=0 E0 RZ Z=1 C8 RNZ Z=0 C0 RST n Restart (taaskäivitus) (Restart) ((SP) 1) (PCH) ((SP) 2) (PCL) (SP) (SP) 2 (PC) 8 (NNN) Käsku kasutatakse protsessoriväliste riistvaraliselt genereeritud katkestusnõudluste töötluse korraldamisel. Käsu täitmisel suunatakse esmalt antud käsule järgneva käsu aadressi kõrgemate järkude väärtus mälupessa, mille aadress on ühe võrra väiksem kui pinuviida (SP) väärtus ja aadressi madalamad järgud mälupessa, mille aadress on kahe võrra väiksem kui pinuviida väärtus. Seejärel vähendatakse pinuviida väärtust kahe võrra. Juhtimine (PC kood) suunatakse käsule, mille aadressi väärtus on kaheksa korda suurem koodi NNN (NNN = 000,..., 111) väärtusest. 42

rst n 1 1 N N N 1 1 1 Masinatsükleid: 3 Takte: 12 Adresseerimine: kaudaadress Lipud: - Käsukoodide variandid Mnemoonika Käsukood Restardi aadress RST 0 C7 0000h RST 1 CF 0008h RST 2 D7 0010h RST 3 DF 0018h RST 4 E7 0020h RST 5 EF 0028h RST 6 F7 0030h RST 7 FF 0038h Lisaks protsessorivälistele katkestustele on kasutusel veel neli vektorkatkestust millede nõudluste tekitamiseks ei ole vaja välist riistvara. Tarkvaraliste katkestuste restardi-aadressid on järgmised: Käsukoodide variandid Katkestus Restardi aadress TRAP 24h RST5.5 2Ch RST6.5 34h RST7.5 3Ch PCHL Siire registripaaris HL sisalduvale aadressile (Jump H and L indirect move H and L to PC) (PCH) (H) (PCL) (L) Registris (H) sisalduv kood edastatakse käsuloenduri (PC) kõrgematesse järkudesse (PCH) ja registris (L) sisalduv kood edastatakse käsuloenduri madalamatesse (PCL) järkudesse. 43

pchl 1 1 1 0 1 0 0 1 Masinatsükleid: 1 Takte: 6 Adresseerimine: registeraadress Lipud: - Käsukood: E9 44

P5. Mikroprotsessori 8085 käsustik IV Juhtimis-, pinu- ja sisend-väljundkäsud PUSH rp Registripaari sisu salvestus pinusse (Push) ((SP) 1) (rh) ((SP) 2) (rl) ((SP) (SP) - 2 Registripaaris rp sisalduva koodi kõrgemaid järke sisaldavast registrist (rh) suunatakse kood mälupessa, mille aadressi väärtus on 1 võrra väiksem pinuviida (SP) väärtusest. Koodi madalamaid väärtusi sisaldavast registrist (rl) suunatakse kood mälupessa, mille aadressi väärtus on 2 võrra väiksem pinuviida väärtusest. Seejärel vähendatakse pinuviida väärtust 2 võrra. push rp 1 1 r p 0 1 0 1 Masinatsükleid: 3 Takte: 12 Adresseerimine: kaudaadress Lipud: - Käsukoodide variandid Registripaar Käsukood BC C5 DE D5 HL E5 PUSH PSW Protsessori olekusõna salvestus pinusse (Push processor status word 1 ) ((SP) 1) (A) ((SP) 2) 0 (CY), ((SP) - 2) 1 X ((SP) 2) 2 (P), ((SP) 2) 3 X ((SP) 2) 4 (AC), ((SP) - 2) 5 X ((SP) 2) 6 (Z), ((SP) - 2) 7 (S) (SP) (SP) 2 X määratlemata väärtus 1 Masina olek süsteemi (arvutisse) kuuluvate kõigi registrite olekud olenemata sellest, kas registrid on programmistile kättesaadavad või mitte. Protsessori olek protsessoris olevate registrite olekud. Protsessori olekusõna sõna, mis sisaldab protsessoris kasutatavate lippude olekud. 45

Akumulaatoris (A) sisalduv kood suunatakse mälupessa, mille aadress on 1 võrra väiksem pinuviida (SP) väärtusest. Lippude olekutest moodustatakse protsessoriolekusõnad, mis salvestatakse mälupessa mille aadress on 2 võrra väiksem pinuviida väärtusest. Seejärel vähendatakse pinuviida väärtust 2 võrra. push psw 1 1 1 1 0 1 0 1 Masinatsükleid: 3 Takte: 12 Adresseerimine: kaudaadress Lipud: - Käsukood: F5 POP rp Registripaari väärtuse ennistamine pinust (Pop) (rl) ((SP)) (rh) ((SP) + 1) (SP) (SP) + 2 Mälupesast, mille aadress on määratud pinuviida (SP) väärtusega, edastatakse kood registripaari rp madalamaid järke sisaldavasse registrisse (rl) ja mälupesast, mille aadress on 1 võrra suurem pinuviida väärtusest, edastatakse kood registripaari kõrgemaid järke sisaldavasse registrisse (rh). Seejärel suurendatakse pinuviida väärtust 2 võrra. Registripaarina, kuhu andmed mälust suunatakse, ei saa kasutada registripaari SP. pop rp 1 1 r p 0 0 0 1 Masinatsükleid: 3 Takte: 10 Adresseerimine: kaudaadress Lipud: - Käsukoodide variandid Registripaar Käsukood BC C1 DE D1 HL E1 46

POP PSW Protsessori olekusõna ennistamine pinumälust (Pop processor status word) (CY) ((SP)) 0 (P) ((SP)) 2 (AC) ((SP) 4 (Z) ((SP)) 6 (S) ((SP)) 7 (A) ((SP) + 1) (SP) (SP) + 2 Mälupesast, mille aadress on määratud pinuviida (SP) väärtusega, edastatakse protsessoriolekusõna kood vastavatesse lippudesse (CY, P, AC, Z, S). Mälupesast, mille aadress on 1 võrra suurem pinuviida väärtusest, suunatakse kood akumulaatorisse (A). Seejärel suurendatakse pinuviida väärtust 2 võrra. pop psw 1 1 1 1 0 0 0 1 Masinatsükleid: 3 Takte: 10 Adresseerimine: kaudaadress Lipud: Z; S; P; CY; AC Käsukood: F1 XTHL Pinumäluviida (SP) väärtuse vahetamine registripaari HL sisuga (Exchange stack Top with HL) (L) ((SP)) (H) ((SP) + 1) Registris L sisalduv kood vahetatakse koodiga mälupesast, mille aadress on määratud pinuviida (SP) väärtusega. Registris H sisalduv kood vahetatakse koodiga mälupesast, mille aadress on määratud 1 võrra suurema pinuviida (SP) väärtusega. xthl 1 1 1 0 0 0 1 1 Masinatsükleid: 5 Takte: 16 Adresseerimine: kaudaadress Lipud: - Käsukood: E3 47

SPHL Registripaari HL sisu salvestus pinuviita SP (Move HL to SP) (SP) (H)(L) Registripaaris HL sisalduv 16-bitine kood edastatakse pinuviita (SP) sphl 1 1 1 1 1 0 0 1 Masinatsükleid: 1 Takte: 6 Adresseerimine: registeraadress Lipud: - Käsukood: F9 IN port Andmete sisestus pordist (Input) (A) (andmed) 8-bitised andmed edastatakse protsessori andmesiinilt akumulaatorisse (A) läbi pordi, mille number on määratud käsu teises baidis (port). in port 1 1 0 1 1 0 1 1 port Masinatsükleid: 3 Takte: 10 Adresseerimine: operand Lipud: - Käsukood: DB OUT port Andmete väljastus pordist (Output) (andmed) (A) 8-bitised andmed väljastatakse akumulaatorist (A) protsessori andmesiinile läbi pordi, mille number on määratud käsu teises baidis (port). out port 1 1 0 1 0 0 1 1 port Masinatsükleid: 3 48

Takte: 10 Adresseerimine: operand Lipud: - Käsukood: D3 EI Katkestuste lubamine (Enable interrupts) Protsessor reageerib katkestusnõudlustele alates antud käsule järgnevast käsust. Käsu EI töötluse ajal protsessor katkestusnõudlustele ei reageeri. ei 1 1 1 1 1 0 1 1 Masinatsükleid: 1 Takte: 4 Lipud: - Käsukood: FB DI Katkestuste blokeerimine (Disable interrupts) Protsessor ei reageeri katkestusnõudlustele alates antud käsule järgnevast käsust. Käsu DI töötluse ajal protsessor katkestusnõudlustele ei reageeri. di 1 1 1 1 0 0 1 1 Masinatsükleid: 1 Takte: 4 Lipud: - Käsukood: F3 HLT Protsessori talitluse peatus (Stopp) (Halt) Protsessori talitluse peatamine. hlt 0 1 1 1 0 1 1 0 Masinatsükleid: 1+ Takte: 5 Lipud: - Käsukood: 76 49

NOP Tühikäsk (No operation) Tühikäsk, toimub vaid käsuloendurisse (PC) salvestatud koodi suurendamine 1 võrra. nop 0 0 0 0 0 0 0 0 Masinatsükleid: 1 Takte: 4 Lipud: - Käsukood: 00 RIM Katkestuste maskide lugemine (Read Interrupt Masks) Mitmeotstarbeline käsk, mida rakendatakse katkestusnõudluste RST7.5, RST6.5, RST5.5 ja jadamisi sisestatavate andmete töötlemisel. Käsu täitmisel edastatakse akumulaatorisse (A) katkestusnõudluste RST7.5, RST6.5 ja RST5.5 maski väärtus, katkestusnõudluste lubamise lipu (IE) väärtus, info eelseisvatest (seni veel mitte teenindatud) katkestusnõudluste (I7, I6, I5) kohta ja jadamisi sisestatud andmebiti (SID) väärtused. rim 0 0 1 0 0 0 0 0 Masinatsükleid: 1 Takte: 4 Lipud: - Käsukood: 20 SIM Katkestuste maskimine (Set Interrupt Masks) Käsus kasutatakse akumulaatoris (A) sisalduvat infot katkestuste RST7.5, RST6.5, RST5.5 ja jadamisi väljastatavate andmete töötluse korraldamiseks. Akumulaator sisaldab teavet katkestusnõudluste maskide (M7.5, M6.5, M5.5), maskimise lipu (MSE) oleku, katkestusnõudluse RST7.5 lähtestuse trigeri (R7.5) oleku, andmete jadaedastuse lubamise trigeri (SDE) ja jadamisi väljastatava andmebiti (SOD) oleku kohta. sim 0 0 1 1 0 0 0 0 Masinatsükleid: 1 Takte: 4 Lipud: - Käsukood: 30 50

Mikroprotsessori 8085 katkestustesüsteem. Käsu RSTn täitmine protsessoris a. Programmi töötluse ajal kontrollib protsessor, iga käsu täitmisel, sisendi INTR olekut. b. Kui sellel sisendil on loogiline olek 1 ja katkestused on lubatud, siis lõpetab protsessor antud hetkel töödeldava käsu töötluse (viib selle lõpuni), blokeerib edasiste katkestusnõudluste vastuvõtu ja väljastab aktiivse signaali INTA //Interrupt Acknowledge//. Pärast seda ei reageeri protsessori katkestuste töötlemise üksus edaspidi saabuvatele katkestusnõuetele seni, kuni katkestusnõudlused pole taas programselt lubatud käsuga EI ( ei ) //EI - Enable Interrupt//. c. Signaali INTA toimel väljastab kaktkestusnõudluse väljastanud allikas protsessorile vastava RST-käsu (käsukoodi), kasutades selleks protsessorivälist riistvara. d. Kui protsessorisse saabub talle edastatud RST-käsk, siis toimub ISR-rutiini //Interrupt Service Routine// käivitus ning katkestusnõudluse teenindus vastavalt esitatud katkestusnõudlusele. Käsu RSTn ( rstn ) (või käsu CALL ( call )) toimel salvestab ISR-rutiin katkestatud programmi järgmisena täitmisele kuuluva käsu aadressi pinumällu. Käsuloendurisse (PC) laetakse aga RSTn- või CALL -käsu aadress. e. Iga ISR programm sisaldab programmi alguses järgnevate katkestusnõuete keelustamise käsku (käsk DI ( di )) ja programmi lõpus käsku EI ( ei ), millega taas lubatakse katkestusnõuete töötlemine. f. Mikroprotsessori 8085 käsustikku kuulub 8 taaskäivituse ehk RSTn käsku (RST0, RST1, RST2, RST3, RST4, RST5, RST6, RST7). Tegemist on 1-baidiste CALL-tüüpi käskudega, mis suunavad programmi töötlemise kindlale mäluaadressile mäluleheküljel number 00h. Katkestusnõuete INTR teenindusprogrammide algusaadressid Katkestusnõude mnemoonika RST0 RST1 RST2 RST3 RST4 RST5 RST6 RST7 Käsukood (16-kood) C7 CF D7 DF E7 EF F7 FF Katkestusnõude teenindusprogrammi algusaadress (16-kood) 0000 0008 0010 0018 0020 0028 0030 0038 51

Lisaks vektoriseerimata maskitavatele katkestusnõudele (INTR) on mikroprotsessor varustatud veel kolme maskitava vektorkatkestusega (RST7.5, RST6.5 ja RST5.5) ning ühe mittemaskitava (NMI-katkestus) //Non-maskable Interrupt// vektorkatkestusega (TRAP). Nende katkestusnõuete teenindamisel pole vajadust protsessorkiibivälise riistvara järele, et genereerida vastava ISRi algusaadressi. Piisab sellest, et mikroprotsessori vastavale sisendile edastatakse katkestusnõude signaal (RST7.5, RST6.5, RST5.5, TRAP), mille tulemusena automaatselt käivitub arbitreeritud katkestusnõude teenindus. Vektorkatkestuste teenindusprogrammide (ISRi) algusaadressid on järgmised: Katkestusnõue TRAP RST7.5 RST6.5 RST5.5 ISRi algusaadress 0024h 003Ch 0034h 002Ch Kui samaaegselt peaks saabuma mitu vektorkatkestuse nõuet, siis spetsiaalne arbitraažilülitus valib neist välja kõrgeima prioriteediga nõude ja käivitab vastava ISRi. Mikroprotsessoris 8085 on kasutusel järgmine katkestusnõuete prioriteetide süsteem: TRAP => RST7.5 => RST6.5 =>RST5.5 => INTR Kõrgeim Madalaim prioriteet prioriteet 52

53

Näide Mikroprotsessor on lõpetamas katkestusnõude RST7.5 töötlemist. Kontrollida, kas samaaegselt on ootel katkestusnõue RST6.5. Kui see katkestusnõue on ootel, siis lubada järgnevalt, pärast RST7.5 teeninduse lõpetamist, RST6.5 katkestuse töötlemine. Kui RST6.5 ootel ei ole, siis pöörduda tagasi RST7.5 poolt peatatud programmi töötlemisele. rim mov b,a ani 20h jnz NEXT ei ret NEXT: mov a,b ani 0dh ori 08h sim lubamine jmp SRV ; Lugeda katkestusnõuete mask ; Salvestada maski väärtus registrisse b ; Kontrollida kas RST6.5 on ootel ; Kui nõue on ootel, siis siire märgendile NEXT ; Lubada katkestused ; Katkestatud programmi töötlusele naasmine ; RIM-käsu koodi ennistus registrisse a, Lubada katkestus RST6.5, väärtustades biti D1:=0 ; Lubada SIM-käsk, väärtustades biti D3:=1 ; SIM-käsus katkestusnõuete RST7.5, RST6.5 ja RST5.5 ning maski lubamine MSE:=1 ; Siire katkestuse RST6.5 teenindusprogrammi, mis asub aadressil SRV Tarkvaraliselt ohjatavad asünkroonsed sisend-väljundoperatsioonid Mikroprotsessoril on kaks sisend-väljundviiku (SID //Serial Input Data// ja SOD //Serial Output Data//), mille abil toimub andmete, tarkvaraliselt juhitav, asünkroonne jadamisi toimuv sisestus- või väljastusoperatsioon. Jadaandmevahetust, erinevalt rööpsest andmevahetusest, korraldatakse erikäskudega SIM ja RIM. Andmete asünkroonsel jadaväljastusel, mis toimub läbi viigu SOD, tuleb väljastatav andmebait eelnevalt salvestada akumulaatorisse (A), kust see siis käsu SIM abil kantakse, ühe biti haaval, väljundviigule SOD. Alljärgnev koodifragment kirjeldab, kuidas väljastada läbi jadakanali ühebitist kahendarvu 1 : mvi a, c0h ; akumulaatorregistri järkudele D7 ja D6 omistatakse väärtus 1 sim ; akumulaatorregistris olev kood (D7:=1) edastatakse väljundile SOD, ; ühtlasi lubati andmete jadaväljastus (SDE:=1) 54

D7 D6 D5 D4 D3 D2 D1 D0 SOD SDE SIM Jadamisi väljastatav andmebitt Andmete jadaedastus lubatud "1" Jadamisi saabuvate andmete sisestamiseks kasutatakse mikroprotsessori sisendit SID. Andmete sisestamine toimub käsuga RIM. D7 D6 D5 D4 D3 D2 D1 D0 SID RIM Jadamisi sisestatav andmebitt Käsu RIM täitmise tulemusena suunatakse sisendil SID olev andmebitt akumulaatorregistri järku D7. Kui toimub andmete jadasisestus RIM-käsuga, siis tuleb silmas pidada, et akumulaatorregistrisse kantaks mitte üksnes sisestatud andmebiti (D7-järgu) väärtus, vaid samuti käsu ülejäänud järkudes (D6-D0) sisalduvate bittide väärtused. Soovitus Lisamaterjalis Lisa001.pdf on toodud täiendavalt ülesandeid, et harjutada assemblerkoodis programmeerimist ja valmistuda praktikumides lahendatavate ülesannete edukaks täitmiseks. Harjutusülesannete juures on esitatud ka mõned variandid, kuidas võiks üht või teist ülesannet programmeerida. Milliseid paremaid programmide lahendusi võiks (tuleks) kasutada, seda proovigu igaüks ise järele. 55

Masinatsüklite (Mi) //machine cycles// tähistused: F neljataktiline käsuvõtt I S/V-kanalist lugemine S kuuetaktiline käsuvõtt O S/V-kanalisse salvestamine R mälust lugemine B sisesiin on jõudeolekus (Z-olek) W mällu salvestamine 56

P6. Programmide koostamine mikroprotsessorile Pinumälu ohje Pinu organiseeritakse protsessori põhimälu fikseeritud aadressiruumi osas, kusjuures pinu mäluruumi adresseerimine toimub 16-bitise pinuviida-registri abil (SP stack pointer). Pinumälu korraldatakse LIFO-registri //Last IN First Out// põhimõttel. Pinuviit osutab pinutipu //stack top// aadressile (viimati pinumälus kasutatud aadressile). Informatsiooni salvestamisel ja selle lugemisel pinust, toimub nö. tagurpidi adresseerimine pinusse info salvestamisel aadresside väärtused vähenevad, pinust informatsiooni lugemisel aadresside väärtused suurenevad. Pinusse salvestamise käsk PUSH ja pinust lugemise käsk POP on kasutavad ainult registripaaridel. Näide Käsk PUSH BC täidetakse järgmiselt: 1. Dekrementeerida pinuviida väärtust (SP:=SP-1) väärtust, salvestada registri B sisu pinuviidaga määratud aadressile. 2. Dekrementeerida pinuviida väärtust (SP:=SP-1) väärtust, salvestada registri C sisu pinuviidaga määratud aadressile. Käsk POP BC täidetakse järgmiselt: 1. Salvestada pinuviidaga (SP) määratud pinupesast info registrisse C, inkrementeerida pinuviida väärtust (SP:=SP+1). 2. Salvestada pinuviidaga (SP) määratud pinupesast info registrisse B, inkrementeerida pinuviida väärtust (SP:=SP+1). CALL ja RET käskude sidumine pinuoperatsioonidega CALL ja RET käskude kasutamisel toimuvad pinuoperatsioonid kindlas järjekorras. Esmalt salvestatakse pinusse protsessori olek PUSH käskudega ja seejärel toimub käsuga CALL siire alamprogrammi. Alamprogrammist naasmisel RET käsu abil taastatakse protsessori olek, rakendades selleks käske POP. 57

Näide Käskude järjestus, millega salvestati pinusse protsessori olek, enne alamprogrammi siirdumist käsuga CALL oli: 1. PUSH BC 2. PUSH DE 3. PUSH PSW PSW programmi olekusõna, mis moodustub akumulaatori ja lippude registrite väärtustest. Pärast alamprogrammist RET-käsuga tagasipöördumist, tuleb pinusse salvestatud informatsioon taastada järgmises (vastupidises) järjestuses. 1. POP PSW 2. POP DE 3. POP BC Programmi olekusõna PSW taastamine toimub käsuga POP PSW: PUSH rp ((SP)-1) (rh) ((SP)-2) (rl) (SP) (SP)-2 POP rp (rl) ((SP)) (rh) ((S)+1) (SP) ((SP)+2) Alamprogrammid ja makrod Alamprogramm programmi osa, mis täidab teatavat funktsiooni ja mida saab põhiprogrammis välja kutsuda (ka korduvalt) igal vajaliku juhul. Makro (makroprogramm) programmi rutiin (alamprogramm) või käskude plokk, mis on identifitseeritav kas märgendiga või nimega. Programmeerimisel tuleb otsustada, kas konkreetses programmis on otstarbekam kasutada alamprogramme või makrosid ehk siis mõlemaid. Alamprogrammid ja makrod võivad olla küll ühesuguse funktsionaalsusega, kuid samas on neil spetsiifilisi omadusi, millega peab arvestama nende rakendamisel programmides. Alamprogramm Makro CALL <nimi> MACRO <nimi> (parameetrid)...... RET ENDM 58

Parameetrite edastamine alamprogrammidele Parameetrite edastamine alamprogrammidele võib toimuda erinevalt: 1. Kasutades globaalandmeid Globaalandmed on andmed, mida säilitatakse mälus (põhimälus) tüüpiliselt kindla aadressiga mälupesades, kust neid saavad kasutada nii programm kui ka selle alamprogrammid. 2. Kasutades protsessori siseregistreid Kuna protsessor siseregistrite arv on piiratud, siis see määrab kasutatavate parameetrite arvu. Erinevalt mälus säilitatavatest parameetritest on protsessori siseregistreis asuvate parameetrite edastamine alamprogrammidele kiirem. 3. Mälus spetsiaalse parameetrite ala kasutamine Mälus eraldatakse teatav osa aadressiruumist parameetrite säilitamiseks. Alamprogrammi väljakutsuv programm kannab enne alamprogrammi väljakutset sellesse parameetrite alasse vastava alamprogrammi parameetrite väärtused. 4. Kasutades pinumälu Kui alamprogramme on palju, siis jaotatakse pinumälu segmentideks (kaadriteks) //frame//, milledest igaüht kasutab kindel alamprogramm. Meetodit on otstarbekas kasutada juhul, kui protsessoris on mitu registrit, mida saab rakendada pinuviida funktsioonis. Ajaliste viidete programmeerimine Iga käsu töötlemiseks kulutab protsessor teatava arvu protsessori takte //state//. Teades käsku ja protsessori taktsagedust, saab leida kui kaua kestab üksiku käsu või käskude jada töötlemine protsessoris. Pikemate programsete ajaintervallide programmeerimisel kasutatakse tüüpiliselt programseid tsükleid. Näiteks järgneva programmifragmendi töötlemiseks kuluv aeg on võrdne: mvi c, 0ffh Loop: dcr c jnz Loop 7 takti 5 takti 7/10 takti Tähistame T L programsete tsüklite kestus silmuses T p protsessoritakti kestus T Ln protsessori taktide arv mida kulutatakse üht tsüklit moodustavate käskude töötlusele n tsükli korduste arv (kümnendsüsteemi arv) silmuses 59

Antud näites korratakse tsüklit Loop 254 korda, kuna tsükli korduste arvu määravasse registrisse C on salvestatud konstant väärtusega ff 16 = 255 10. Silmuse tsüklite töötlemisele kuluv aeg on leitav seosest: T L = T p (T Ln n) Toodud näites sisaldab tsükkel kaht käsku dcr c ja jnz Loop, millede täitmiseks kulutab protsessor vastavalt 5 ja 7/10 takti. Käsule jnz vastavalt 7 takti kui siirde tingimus ei ole täidetud ja 10 takti, kui siirde tingimus on täidetud. Siiret tsükli algusesse (märgendile Loop) korratakse seni, kuni registris C pole, käsu dcr c täitmisel, moodustunud kood 00h. Siis omistatakse lipule Z väärtus Z:=1 (väljutakse tsüklist). Seega on protsessortaktide arv nende käskude täitmisel võrdne: Programmifragmendi töötlemine kestab T Ln1 = 5+107 = 15 takti (n 1 = 254) T Ln2 = 5+7 = 12 takti (n 2 = 1). T L = T p (7 + 15 254 + 12 1) = T p 3829 ajaühikut Pikemate ajaintervallide moodustamiseks kasutatakse tavaliselt tsüklite korduvat silmustamist. Järgnevas näites rakendatakse kahte tsüklit: Loop1 ja Loop2 mvi c, 0ffh Loop1: dcr c jz End mvi d, 0ffh Loop2: dcr d jnz Loop2 jmp Loop1 End:... ; Välistsükkel (n 1 korda) ; Sisetsükkel (n 2 korda) Toodud näites on tsükliliselt täidetavate programmiosade töötluseks kuluv leitav seosega: T L = T n 1 (T Ln1 + T Ln2 n 2 ) Parameetrid (n 1, T Ln1 ) ja (n 2, T Ln2 ) iseloomustavad vastavalt tsükleid Loop1 ja Loop2. 60

61

62

Assemblerikeelne programm Programmi kirjutamisel assemblerikeeles ei ole vaja määrata absoluutseid aadresse. Absoluutsete aadresside asemel kasutatakse sümbol- ja suhtaadresse. Sümboladresseerimisel antakse käsule või muutujale (operandile) nimi märgend, millega edaspidi opereeritakse. Sümbolaadressile (märgendile) seatakse vastavusse absoluutne (füüsiline) aadress assembleriprogrammi transleerimise käigus. Suhtadresseerimisel ei määrata aadresse mitte mäluruumi alguse suhtes, st mitte absoluutaadressides, vaid teatava eelnevalt kokku lepitud baasi suhtes. Assemblerikeelne programm koosneb lausetest, iga lause omakorda sisaldab teatavaid välju. Tüüpiliselt kasutatakse assembleris järgmisi välju: Märgendiväli; Märgendiväljas paikneb märgend. Märgendiväli lõpeb eraldajaga, enamasti kasutatakse selleks koolonit ( : ). Käsukoodiväli; Käsukoodiväli sisaldab masinakäsu mnemoonilise tähistuse. Käsukoodi väli lõpeb tavaliselt tühikuga. Operand väli; Operandiväljas esitatakse kas operandi (operandide) arvväärtus (näidates ühtlasi ära selle esitusel rakendatava kasutatava arvusüsteemi), nimed (märgendiviited) või avaldised. Avaldised defineeritakse eraldi ning nad võivad sisaldada märgendeid, konstante ja aritmeetilisi või loogilisi tehteid. Avaldisi kasutatakse operandi väärtuse või selle aadressi arvutamiseks. Kommentaariväli. Kommentaarivälja eraldab operandiväljast teatav sümbol, enamasti on selleks semikoolon ( ; ). Kommentaariväljas esitatakse tavaliselt tekst, mis selgitab antud lauses käsuga täidetavaid tegevusi programmi seisukohalt, mitte aga niivõrd käsu täitmise kirjeldust. Kommentaari välja lõpetab tavaliselt reavahetus (klahv Enter ). 63

Märkus Selleks, et assembler saaks kirjeldada programmi käskude järjestust lähtekoodist objektkoodi moodustamisel, varustatakse assemblerprogrammi read assembleri aadressiloenduri poolt aadressi järjekorranumbriga, mis võtab arvesse seda, mitu mälusõna (baiti) ühe või teise käsu kirjeldus hõivab programmimälus, näiteks: 00: sta 0202h (3-baidine käsk, hõivab kolm järjestikuste aadressidega 8-bitist mälupesa) 03: nop (1-baidine käsk) 04: mvi a, 26h (2-baidine käsk) 06: di (1-baidine käsk) Aadressi järjekorranumber NB! Aadressi järjekorranumber ei ole sama, mis on simulaatori Sim 8085 µp Simulatori lähtekoodi ridade ees olevad programmirea järjekorranumbrid. Assemblerikeeles kasutatakse lisaks masinakäskudele veel ka pseudokäske ehk direktiive. Direktiivid muudavad assemblerikeelse programmi kasutamise mugavamaks. Pseudokäsud annavad assemblerile täiendavat infot, kuid nad ei genereeri koodi. Oma funktsionaalse otstarbe järgi võivad direktiivid olla jaotatud veel klassidesse nimede defineerimise direktiivid (näiteks Db), transleerimise juhtimise direktiivid (näiteks Org) jt. Sageli eristatakse assemblerikeeltes direktiive sellega, et direktiivi mnemooniline tähistus algab alati punktiga, näiteks.end või.begin. Simulaatoris Sim 8085 µp Simulator direktiivide ees punkti ei kasutata. Enamasti lõpevad assemblerikeelsed programmid direktiiviga.end, kuid simulaatoris Sim 8085 µp Simulator seda direktiivi ei kasutata, seal lõpetatakse programmi talitlus assemblerikäsuga hlt. Assemblerikeelse lause tüüpstruktuur 64

P7. Mikroprotsessori simulaator Simulaator programm, mida täidetakse arvuti poolt, et imiteerida teise arvuti (või selle seadme) (imitaator) talitlust ja mis näitab kuidas talitlus sõltub erinevatest talitlustingimustest. Simulatsioon operatsioon, kus arvuti imiteerib mingi teise arvuti talitlust. Simulatsioonil kasutatakse simuleeritava arvuti (või selle seadme) tarkvaralisi mudeleid. Assemblerikeelse programmi ettevalmistamine töötluseks (programmi transleerimine) Translaatorina kasutatava programmi ülesanne on lähtekeelese, kas masinast sõltumatu kõrgkeelse või sõltuva madaltaseme keelse, programmi teisendamine masinakeelde. Transleerimise käigus teisendatakse näiteks mikroprotsessori 8085 assemblerikeeles esitatud käsk mvi a, 30h masinakoodi kujule 0011 1110 0011 0000 2 (3Eh ja 30h). Moodustatud andmed salvestatakse mikroarvuti mälus kahte järjestikku adresseeritavatesse 8-bitistesse mälupesasse. Sõltuvalt lähtekoodi läbivaatamiste kordade arvust jagatakse translaatorid ühe-, kahe- ja enamakäigulisteks. Kahekäigulise assembleri talitluse esimeses etapis (käigus) tuvastatakse programmi poolt kasutatav mäluruumi osa, lähtudes pseudokäsus Org defineeritust. Ühtlasi antakse ette spetsiaalsele loendurile, mille abil toimub hiljem käskude paigutamine programmi mäluruumi, oleku algväärtus (algaadress). 65

Seejärel skaneerib assembleri käske ja salvestab iga käsu esimese käsubaidi aadressi, lähtudes loenduri olekust. Esimesel käigul moodustatakse ühtlasi ka nimede tabel, sisaldab programmis kasutatud sümbolnimesid ja iga nime konkreetne asukoht (aadress)). Assembleri talitluse teisel etapil (käigul) uuritakse iga programmi käsku üksikasjaliselt, asendatakse käsu assemblerikeelne mnemooniline tähistus ja programmis kasutatud märgendid (sümbolnimed) reaalsete masinakoodis esitatud kahendväärtustega. Näide Esitatud assembleriprogrammis jälgitakse mikroprotsessori sisendpordiga number 0 ühendatud lüliti olekut ja sellest sõltuvalt lülitatakse väljundpordiga number 1 ühenduses olevat välisseadet kas sisse või välja. Port 0 EQU 00h ; Sisendpordi nr 0 aadress heksadetsimaalkoodis Port 1 EQU 01h ; Väljundpordi nr 1 aadress heksadetsimaalkoodis ORG 1000h ; Programmi algusaadress heksadetsimaalkoodis Start: in Port 0 out Port 1 jmp Start end ; Lüliti oleku lugemine ; Välisseadme sisse- või väljalülitamine ; Korratakse juhtimistsüklit ; Programmi lõpp (direktiiv) Lähteprogrammi transleerimisel (assembleerimisel) viiakse läbi järgmised toimingud: 1. Käik Aadress Masinakood Märgend Käsk Operand Nimede tabel 1000 Start: in Port 0 Port 0 00h 1002 out Port 1 Port 1 01h 1004 jmp Start Start 1000h 2. Käik Aadress Masinakood Märgend Käsk Operand Nimede tabel (Hex) (Hex) 1000 db 00 1002 d3 01 1004 c3 00 10 66

Absoluutassemblerite puhul saadakse transleerimise tulemusena töötlemiseks kõlbulik programm (täitmisprogramm), mida saab laadida arvuti mällu, alates kindlast aadressist. Vastasel korral esitatakse transleerimise tulemus (programm) suhtaadressides, millised tuleb, enne programmi laadimist arvuti mällu, teisendada absoluutaadressideks. Suhtaadressid teisendab absoluutaadressideks spetsiaalne programm laadur. Kui on tegemist moodulprogrammidega, siis üksikud transleeritud moodulid ühendatakse pärast transleerimise lõppu ühtseks tervikuks spetsiaalse programmi linkuri abil. Tavaliselt moodustab translaator, linkuri kasutamisel, vahekeelse programmi, mis sisaldab linkimiseks vajalikku teavet. Lingitud programme salvestatakse arvuti mällu laaduri abil. Lihtsamates süsteemides täidab linkuri ja laaduri ülesandeid translaator. 67

Transleerimise protseduuri mudel 68

Simulaatori Sim 85µP Simulator üldandmed Programm Sim 8085 µp Simulator Base Converter.exe HexCalc.exe Sim 8085. exe (678 kb) 69

Simulaatori Sim 8085 µp Simulator kasutamine Simulaator töötab Windowsi keskkonnas (alates Windows 95 ja uuemad versioonid), simuleerides Inteli mikroprotsessori 8085 assemblerikoodis esitatud programmi talitlust. Simulaator sisaldab kahte põhikomponenti: 1. Redaktor (Editor) Redaktor täidab traditsioonilise redaktorpogrammi ülesandeid assemblerikoodis esitatud programmi ettevalmistamisel töötlemiseks protsessoris 8085. Redaktor sisaldab sardkompilaatori, mis viib läbi programmiteksti süntaksi õigsuse kontrolli. Redaktor on varustatud pseudokäskudega (direktiividega), mis hõlbustavad assembleriprogrammi koostamist. Erinevalt mitmetest teistest assembleritest, piirdutakse antud redaktoris vaid nelja direktiiviga: 1. Org 2. Db 3. FillByte 4. KickOff Redaktori vahendusel genereeritakse programmi korrektne assemblerikoodi fail (faililaiendiga.a85 ), programmi listfail (faililaiend.lst ) ja binaarse objektkoodi fail (faililaiend.obj ). 2. Silur (Debugger) Silurprogrammi (siluri) abil toimub töödeldava programmi talitluse jälgimine ja vajadusel selle korrigeerimine simuleerivas arvutis. Silur eraldab simuleeritava programmi tarvis 64-kilobaidise (mikroprotsessori 8085 16-bitine aadressisiin võimaldab, kasutades otseadresseerimist, adresseerida sellist mälu aadressiruumi) virtuaalse mäluaadressiruumi. Siluri abil on võimalik jälgida ja vajadusel ka korrigeerida andmeid protsessori sisemistes, programmistile juurdepääsetavais, registrites, pinumälus ja mikroprotsessorsüsteemi 64-kilobaidises virtuaalses põhimälus. Lisaks neile funktsioonidele võimaldab silur simuleerida veel ka mikroprotsessori portide talitlust. Selleks on simulaator varustatud kolme virtuaalse 8-bitise rööppordiga A, B ja C pordiga. 70

Programmi töötlemine simulaatoris Redaktori funktsioonid Redaktoris töödeldavad assemblerikoodi programmifailid peavad olema varustatud faililaiendiga.a85. Korraga võib olla avatud kuni 10 erinevat assembleris esitatud faili, kuid igal ajahetkel saab töödelda neist vaid siiski ühte. Avatud failide nimed kuvatakse simulaatori tööaknas tööriistariba all. Joonis 1. Redaktorrežiimi ekraanitõmmis Simulaatoris saab valida tööakna tausta ja kuvatava informatsiooni ja selle elementide värvusi, kasutada teksti esiletõstu ja muuta kuva teisi visualiseerimise parameetreid. Selleks on peamenüüs valik Options, mille avamisel ilmub rippmenüü, mis pakub valikuid Editor Options ja Debugger Options. Esimesega saab (Editor Options) määratleda redaktori esitlusviise, kuvatavaid värvusi ja printimise sätteid. Teisega (Debugger Options) saab määratleda silurirežiimi rakendamisel kuvatavate infoelementide värvusi ja silumisel kasutatavaid olulisi põhiseadeid nagu: 1. Määrata mälus programmiala algusaadressi (Code Entry); 2. Määrata mälus andmeala algusaadressi (Data Entry); 3. Määrata mälus pinuala algusaadressi (Stack Entry); 4. Määrata sisend-väljundprortide aadresse ja andmeedastuse suunda neis. 71

72

Redaktori sardkompilaator kontrollib sisestatud assembleriprogrammi süntaksi õigsust. Kui programmis esinev vigu, siis väljastab kompilaator vastava veateatise, mida kuvatakse tööakna olekuriba kohal. Iga vigase programmirea kohta väljastatakse vastava rea number (näit. Line [xxxx]: ) ja vea selgitus. Kui programmis süntaksivigu ei esine, siis kompilaator väljastab sellekohase teatise (joonis 2). Joonis 2. Kompileeritud koodi, kus ei esinenud süntaksivigu, ekraanitõmmis Sisestatud assembleriprogrammi kompileerimiseks tuleb kasutada põhimenüüs olevat valikut Project, kus käivitatakse funktsioon Compile. Assemblerprogrammi koostamisel ja sisestamisel simulaatorisse tuleks silmas pidada järgmist: 1. Kuueteistkümnendkoodi (heksadetsimaalkoodi) arvude esitamiseks tuleb nad varustada tunnusega h (vastasel juhul interpreteerib translaator neid kui kümnendarve), näiteks 20A1h 0000h 01f2h fdh 79h NB! Heksadetsimaalkoodis esitatud arvude, mis algavad sümbolitega A, B, C, D, E, F või a, b, c, d, e, f korral lisada arvu ette 0, st arvu fdh asemel kasutada arvu 0fdh. 73

Kui andmeid sisestada redaktoris 8-järguliste binaarkoodi arvudena, näiteks kujul 0100 0001b, siis assembler muudab binaarkoodi ise heksadetsimaalkoodiks ja kuvab saadud koodi heksadetsimaalkujul, st 41h. 2. Kui käsus kasutatakse registripaare, siis tuleb näidata vastava registripaari nimi, näiteks lxi hl, 2000h stax de lxi sp FE00h 3. Käsureas esitatav kommentaar eraldatakse rea muust tekstist semikooloniga ( ; ), näiteks mvi a, 4ah ; Akumulaatorregistrisse suunatakse heksadetsimaalkoodi arv väärtusega 4A. Kompilaator ignoreerib kommentaariväljas olevat informatsiooni. Kui kommentaar ei mahu ühele käsureale, siis võib seda jätkata järgnevalt realt, kuid sellisel juhul tuleb iga järgneva kommentaarirea ette panna samuti semikoolon. 4. Kui programmis kasutatakse programseid nimelisi tsükleid (silmuseid), siis neile omistatud nime järele tuleb panna koolon ( : ), näiteks LOOP: või lbx: Tsükli nimi (näit. LOOP ) ei tohi sisaldada rohkem kui 13 tähemärki, millele järgneb tingimata kooloni märk. 5. Kui kasutatakse sümbolnimesid, et tähistada näiteks 16-bitist nihkeaadressi //offset address//, siis seda saab esitada järgmiselt lxi hl, DADDR või shld DADDR, kus DADDR on nihkeaadressi arvulist väärtust asendav sümbolnimi. Sümbolnimede kasutamisel tuleb vastavate nimede väärtused defineerida, näiteks org 100h lxi de, 200Ah lxi hl, DADDR ; sümbolnimi DADDR saab toodud näites väärtuse 0130h ehk LXI HL, 0130h xchg ; registripaaridele omistatakse väärtused vastavalt HL:=200Ah ja DE:=0130h call DADDR ; kutsutakse välja alamprogramm, mis asub aadressil 0130h ehk CALL 0130h org 130h DADDR: ; sümbolnimi on seotud aadressiga 0130h mov a, d ; mälupesas aadressiga 0130h paikneb käsk MOV A, D lxi hl, 0h mvi b, 08h jne. ; järgnevad käsud, mis kuuluvad sellesse programmi hlt ; programmi lõpp 74

Redaktoris kasutatakse pseudokäske (direktiive, pseudooperatsioone), mis täidavad järgmisi funktsioone: Org <addr> Direktiiv annab ette aadressi, millest alates programm salvestatakse mällu. Kuna simulaatoris kasutatakse eraldi mäluruume programmi koodi ja programmis kasutatavate andmete säilitamiseks, siis direktiivi tuleb rakendada eraldi nii programmi koodi mäluruumi algusaadressi defineerimiseks kui ka andmete mäluruumi algusaadressi defineerimiseks. Org 1A00h ; programmi algusaadress mälus on 1A00h. Direktiivi parameeter <addr> on 16-bitine aadress, mis määrab mälupesa aadressi, kuhu salvestatakse programmi esimese käsu käsukood või esimene andmebait. Programmi kõik käsud, mille mälus paiknemise algusaadress määrati kindlaks direktiiviga Org, salvestatakse antud algusaadressile järgnevate aadressidega mälupesadesse. Kui programmi alguses direktiiv Org puudub, siis vaikimisi loetakse programmi algusaadressiks väärtust 0000h Kui programmis soovitakse kasutada erinevaid (mittejärjestikuseid) mälualasid, siis iga uue mäluala defineerimisel tuleb uuesti sisestada direktiiv Org koos vastava uue aadressi väärtusega. Näiteks toodud programmifragment salvestatakse mällu järgmiselt: Org 100h mvi a, 3Bh ; Käsk mvi a salvestatakse mälus pesasse aadressiga 0100h. mvi b, 44h ; Käsk mvi b salvestatakse mälus pesasse aadressiga 0102h ; Käsk mvi on kahebaidine käsk, hõivates mälus kaks järjestikuliste ; aadressidega mälupesa. Org 200h nop nop mvic, 01h hlt ; Käsk nop salvestatakse mälupesasse aadressiga 0200h. [vt Märkus] Märkus Mäluruumi suurus, mis näites määrati kindlaks direktiiviga Org 100h, asub tegelikult aadressivahemikus 0100h kuni 01ffh, st hõlmab kogu aadressiruumi osa kuni järgmise 75

direktiivini Org 200h. Toodud näites tähendab see seda, et mälupesad aadressidega 0104h kuni 01ffh on kasutamata ning tüüpiliselt täidetud konstantidega 00h. Db <byte> Direktiiviga saab määrata mällu salvestatavaid andmeid (kus andmed mälus tegelikult paiknevad, seda saab määrata menüüvalikutega: Options => Debugger Options => Data Entry ). Direktiivi parameeter <byte> võib sisaldada andmebaite või sümbolite, mis on üksteisest eraldatud komadega jada (tekst). Kui tegemist on sümbolite jadaga (tekstiga), siis selle eristamiseks arvudest eraldatakse jada algus ja lõpp apostroofiga ehk ülakomaga ( ). Direktiiviga Db 3,7,15,31 salvestatakse mällu nelja kümnendsüsteemi arvu väärtused: 3, 7, 15 ja 31. Direktiiviga Db HELLO salvestatakse mällu neli sümbolit (tekst) H, E, L, L, O. Et tegemist on sümbolitega, seda näitavad sümbolstringi ees ja lõpus olevad ülakomad ( ). Direktiiviga DB 3, 7, HELLO, 15, 31 salvestatakse mällu nii arvud 3, 7, 15, 31 kui ka tekst HELLO. KickOff <addr> Direktiiviga määratakse kindlaks programmi käivitusaadress. Käivitusaadressi väärtus on määratud parameetriga <addr>. Kui direktiivi kasutatakse, siis peab programmile selle direktiiviga ette antud käivitusaadress olema kooskõlas menüüs Debugger Options => valik Debugger => väljas Code Entry määratletud aadressiruumiga. Sageli võivad direktiivid Org ja KickOff olla määratud ühesuguste aadresside väärtustega. Kui direktiivi KickOff ei ole programmis kasutatud, siis programm käivitub aadressilt, mis on määratud direktiiviga Org. 76

FillByte <count>, <byte> Direktiiviga saab määrata nii mällu salvestatavate baitide arvu kui ka andmebaite endid. Salvestuse algaadress tuleb eelnevat kindlaks määrata direktiiviga Org. Direktiivi parameeter <count> määrab mälualasse salvestatavate andmebaitide arvu. Direktiivi parameeter <byte> määrab mälualasse salvestatavad andmed. Näiteks direktiivide Org 250h FillByte 5, 36h abil salvestatakse mällu, alates aadressilt 250h, viis andmebaiti kõik väärtusega 36h. Alternatiivselt võib sümbolite sisestuseks kasutada direktiivi FillByte <count>, char kus char on sisestatavate sümbolite (tavaliselt tekst) heksadetsimaalkoodid). Direktiivil Fill Byte on samuti laiendatud variant FillByteStep <count>, <start>, <step>, <direction> Direktiivi parameetriga <count> määratakse mällu salvestatavate andmebaitide arv. Direktiivi parameetriga <start> määratakse jadas esimesena mällu salvestatava arvu väärtus. Direktiivi parameetriga <step> määratakse sisestatava andmestu sammu väärtus. Direktiivi parameetriga <direction> määratakse see, kas andmete mällu salvestamine toimub nende arvväärtuse kasvavas järjekorras, sellisel juhul on parameetri väärtus Up, või kui soovitakse salvestatakse arvude arvväärtuse kahanevas järjekorras, siis parameetri väärtuseks tuleb valida Down. Ülakoma sisestamiseks sobib QWERTY-sõrmistiku klahv Näiteks direktiiviga FillByteStep 4, 3, 2, Up 77

salvestatakse mällu neli andmebaiti (<4>) nende arvväärtuste kasvavas järjekorras ( Up ), kusjuures esimese andmebaidi väärtus on 3 (<3>) sammuga 2 (<2>), st mällu salvestatakse järgmine kümnendsüsteemi kuuluvate arvude jada: 3, 5, 7, 9. Alternatiivselt võib direktiivi kasutada teksti sisestamiseks kujul: FillByteStep <count>, char, <step>, <direction> Redaktori kasutamisel tuleks juhinduda järgnevast: 1. Direktiivides ja märgendites võib kasutada kas ainult väike- või suurtähti, kuid lubatud on samuti väike- ja suurtähtede segakasutus ühes ja samas direktiivis või märgendis. Viimast varianti ei saa pidada soovitavaks. 2. Iga programm peab omama lõputunnust, selleks on mikroprotsessori juhtimiskäsk hlt (peatus). Programmi töötlemisel, enne siirdumist redaktorrežiimi, tuleb kompileeritav assembleriprogramm eelnevalt salvestada. Lisaks assembleriprogrammile koostab silur programmile automaatselt listingu faili (joonis 3) ja objektkoodi faili (joonis 4). Joonis 3. Listingufaili ekraanitõmmis 78

Joonis 4. Objektkoodi ekraanitõmmis Juhis Kui tekib vajadus korrigeerida andmemälu mälupesadesse salvestatud andmeid, siis tuleks toimida järgmiselt: 1. Viia kursor andmemälus mälupesale, mille sisu soovitakse korrigeerida. 2. Vasaku hiireklikiga aktiveerida muudetava mälupesa sisu (mälupesas olev koodsõna ümbritsetakse ruuduga ja selle tekst esitatakse valgena sinisel taustal). 3. Klaviatuuri sõrmise Enter vajutusel kuvatakse menüü data change.... 4. Sisestada selles menüüs tööväljale uus (korrigeeritud) 2-järguline heksadetsimaalkoodi andmesõna. 5. Kinnitada valikut nupu OK abil. 6. Korrektsioonirežiimist väljumiseks tuleb kursor viia programmiväljale ja teha seal vasak hiireklikk. 79

Näide ; Näidisprogramm direktiivide "Org" ja "Kickoff" kasutamise võimalustest (variant 1) ; ; Töödeldav programm on jaotatud kaheks osaks ; Programmi käivitusaadress ei lange kokku programmiteksti esimese osa ; sisestuse algusaadressiga ; ; Programmi talitlust selgitavad kommentaarid: ; Vähendatava arvu väärtus on 06h, lahutaja väärtus on 09h ; Vähendatav asub mälupesas aadressiga 2000h ; Lahutaja asub mälupesas aadressiga 2001h ; Vahe väärtus asub mälupesas aadressiga 2002h ; Vahe märk asub mälupesas aadressiga 2003h ; Kui vahe on positiivne, siis märgi väärtus on "0", ; kui vahe väärtus on negatiivne, siis märgi väärtus on "1" ; Programm on kommenteerimata ; ; Kickoff 1030h ; Programmi käivitusaadress Org 2000h ; Programmis kasutatavate andmemassiivi algusaadress Db 06h,09h,00h,00h ; Järjestikuste aadressidega mälupesades sisalduvad ; järgmised andmed: vähendatav, lahutaja, vahe väärtus ja ; märgijärgu algväärtus (võrdub "00") Org 1000h ; Programmiteksti esimese osa algusaadress ; L1: ; Programmiteksti esimene osa mvi c,00h lda 2001h mov b,a lda 2000h sub b jnc Result cma inr a inr c Result: sta 2002h mov a,c sta 2003h hlt ; Org 1030h ; Programmiteksti teise osa algusaadress ; Sellelt aadressilt toimub programmi käivitus ; jmp L1 ; Siire programmiteksti esimesele osale 80

; Näidisprogramm direktiivide "Org" ja "Kickoff" kasutamise võimalustest (variant 2) ; ; Programmi käivitusaadress langeb kokku programmiteksti sisestuse algusaadressiga ; ; Programmi talitlust selgitavad kommentaarid: ; Vähendatava arvu väärtus on 06h, lahutaja väärtus on 09h ; Vähendatav asub mälupesas aadressiga 2000h ; Lahutaja asub mälupesas aadressiga 2001h ; Vahe väärtus asub mälupesas aadressiga 2002h ; Vahe märk asub mälupesas aadressiga 2003h ; Kui vahe on positiivne, siis märgi väärtus on "0", ; kui vahe väärtus on negatiivne, siis märgi väärtus on "1" ; Programm on kommenteerimata ; ; Org 2000h ; Programmis kasutatavate andmemassiivi algusaadress Db 06h,09h,00h,00h ; Järjestikuste aadressidega mälupesades sisalduvad ; järgmised andmed: vähendatav, lahutaja, vahe väärtus ja ; märgijärgu algväärtus (võrdub "00") Org 1000h ; Programmiteksti algusaadress, ühtlasi on see programmi käivitusaadress ; mvi c,00h lda 2001h mov b,a lda 2000h sub b jnc Result cma inr a inr c Result: sta 2002h mov a,c sta 2003h hlt ; Märkus Kui programmi käivitusaadress langeb kokku programmiteksti sisestamise algusaadressiga, siis ei ole vaja programmi käivitamiseks kasutada eraldi direktiivi Kickoff, piisab direktiivist Org, nagu seda on tehtud variandis 2. Juhul, kui seda tehakse, siis kompilaator väljastab teatise, et direktiivi Kickoff ignoreeritakse. 81

P8. Siluri funktsioonid Pärast seda, kui assembleris koostatud kood on kompileeritud, võib asuda programmi kasutama. Kui soovitakse programmi käitumist lähemalt jälgida, näiteks kuidas töötluse käigus muutuvad andmed mikroprotsessori sisemistes registrites või virtuaalsetes mälu- ja sisend-väljundsüsteemides, ehk hoopiski programmi modifitseerida, siis on seda otstarbekas teha silurežiimis, rakendades programmi töötlusel sammrežiimi. Enne siirdumist silurežiimi, tuleb eelnevalt määrata millistes mälualades asub silutav programm, selle (lähte)andmed, pinumälu (pinu algusaadress) ja sisend-väljundpordid (kui neid programmis kasutatakse). Selleks tuleb klikkida peamenüü valikul Options ja avanenud aknas valida Debugger Options. Avanenud menüüaknas väärtustada väljas Initials mälualade algusaadressid: Code Entry, Data Entry ja Stack Entry. Portidele aadresside omistamisel kasutada välja Port Assignements. Siirdumiseks silurežiimi tuleb simulaatori põhimenüüs minna valikule Project, kus avanevas rippmenüüs valida Debug Mode. Õigel valikul avaneb silurežiimi tööaken kujul: 82

Tööaknas kuvatakse siluri viite põhilist tööpaani //pane// - koodipaan, andmepaan, pinupaan, lippude paan ja registrite paan. Koodipaanis kuvatakse programmi mälutõmmis nii assemblerikoodi mnemoonikas kui ka masinakoodis kuueteistkümnendkoodis. Iga programmirea alguses visualiseeritakse aadress, kus mälus paikneb vastava käsu esimene bait, näiteks: 2000 21 70 20 LXI HL, 2070 2003 01 90 20 LHI BC, 2090 Andmepaanis kuvatakse mälupesades sisalduv informatsioon. Ühele kuvareale väljastatakse kaheksas järjestikuste aadressidega mälupesades olevad andmed (kuueteistkümnendkoodis). Lisaks kuvatakse eraldi väljas (paremal) mälupesades sisalduvatele 16-koodidele vastavad ASCII-koodi sümbolid (neist on abi eriti siis, kui mällu on salvestatud näiteks mingi tekst). Registripaanis kuvatakse mikroprotsessori programmistimudelis esitatud tööregistrite A, B, C, D, E, H, L, [HL] (aadressiregistri funktsioonis kasutatav registripaar) ja PC (käsuloendur) sisalduvad andmed kuueteistkümnendkoodis. 83

Lippude paanis kuvatakse protsessori lippude S (märk), Z (null), A (abiülekanne ehk AC), P (paarsus) ja C (ülekanne CY) väärtused binaarkoodis. Lisaks kuvatakse kokkuvõtlikult lipuregistris oleva koodi väärtus heksadetsimaalkujul [xx]. Pinupaanis kuvatakse mälus moodustatud pinumälu mälupesadesse salvestatud andmed kahebaidiste heksadetsimaalkoodi arvudena: Pinuviida väärtus [SP+0000] 00C9 Aadress pinus Pinuala mälupesades sisalduvad andmebaidid 00h ja C9h Pinumälu sisu kuvatakse aadressivahemikus (SP ± 5) pinuaadressi, st alates [SP+0000] kuni [SP-000A] ja [SP+000A]. Protsessori portide olekuid ja portides sisalduvaid andmeid saab vaadelda ja vajadusel ka korrigeerida, kas läbi kuvaakna Ports või siis määratleda kasutatavaid porte läbi menüüde: Options => Debugger Options => Debugger. Esimesel juhul tuleb põhimenüüst valida Tools ning avanenud hüpikaknas valida Show Ports. Kuvatakse kolme pordi (port A, port B ja port C) töörežiimid, st kas vastav port töötab andmete sisestamise režiimis ( Input Ports ) või väljastamise režiimis ( Output Ports ). Mõlemal juhul saab raadionuppude abil määrata 8-bitistes portides (A, B või C) üksikute pordijärkudele omistatavaid kahendväärtusi. Lisaks kuvatakse, nuppudest paremal asuvas väljas, pordijärkudele omistatud väärtust kuueteistkümned-, kümnend- ja kaheksandkoodis. Silurežiimis on mugav teha muudatusi silutavas programmis lisada, kustutada või muuta käske koodipaanis. Samuti on võimalik muuta mälupaanis kuvatavate andmete väärtuseid. Kui tehakse korrektsioone koodi- või andmepaanis, siis muudetakse küll vastavate andmete väärtusi kompileeritud programmis, kuid algses (originaalses) programmis tehtud muudatused ei kajastu! Lisaks on andmepaani all oleval ribal esitatud viis programmi redigeerimise võimalust, mida saab juhtida klaviatuuri funktsionaalsete sõrmiste abil: 84

Klahv Enter muudab aktiveeritud (märgistatud) programmirea; Klahv Insert sisestab uue programmirea; Klahv Delete kustutab aktiivse (märgistatud) programmirea; Klahv Home toimub siire programmi algusesse; Klahv End toimub siire programmi lõppu. NB! Enne valitud paanil korralduste sisestamist, tuleb vastav paan aktiveerida, st viia kursor paanile ja teha hiire vasaku klahviga klõps. Hõlbustamaks infotöötlust silurežiimis võib, kõrvuti hiirega juhitavate tegevustega, rakendada klaviatuurilt sisestatavaid sõrmiskombinatsioone. Kasutusel on järgmised sõrmiskombinatsioonid: Koodipaani valikud Sõrmis Enter: Redigeerib jooksvat koodirida Insert: Sisestab uue koodirea jooksvasse koodiritta Delete: Kustutab jooksva koodirea Home: Siire programmi algusesse End: Siire programmi lõppu (programmi viimasele aadressile) Page Up: Programmi keritakse ülespoole 15 rea võrra Page Down: Programmi keritakse allapoole 15 rea võrra Ctrl+Page Up: Programmi keritakse ülespoole 60 rea võrra Ctrl+Page Down: Programmi keritakse allapoole 60 rea võrra Märkus: Klaviatuuri sõrmiste ja ühekordne vajutus nihutab programmirida vastavalt ülespoole või allapoole ühe rea võrra. Sõrmiste pideval vajutusel keritakse programmiridu üles või alla seni, kuni vastav sõrmis on alla vajutatud. Shift+A: Siire kasutaja poolt ette antud aadressile Shift+C: Käsus call toimub siire tagasi sisenemispunkti (sisenemise aadressile) Shift+F: Siire tagasi call või jmp käsu väljakutseaadressile Shift+N: Jooksev programmirida määratakse sama funktsiooni täitma kui direktiiv Org Shift+S: Otsitakse etteantud stringi või kuueteistkümnendkoodi baiti (baite) mälus Shift+L: Alustatakse uut otsingut 85

Andmepaani valikud Sõrmis Enter: Redigeeritakse jooksvat baiti Insert: Sisestatakse string või bait (baidid) Ctrl+Page Up: Keritakse andmepaanil kuvatavat informatsiooni ülespoole 60 rea võrra Ctrl+Page Down: Keritakse andmepaanil kuvatavat informatsiooni allapoole 60 rea võrra Vt eelnev Märkus. Shift+A: Siire kasutaja poolt sisestatud aadressile Shift+O: Siire valitud programmireale Shift+S: Etteantud stringi või kuueteistkümnendkoodi baidi (baitide) otsing mälus Shift+L: Alustatakse uut otsingut Registripaani valikud Sõrmis Enter: Muudetakse valitud registris olevat andmeväärtust Numerical Pad (+): Suurendatakse (inkrementeeritakse) valitud registris olevat andmeväärtus Numerical Pad(-) : Vähendatakse (dekrementeeritakse) valitud registris olevat andmeväärtust Lippude paani valikud Sõrmis Enter: Inverteeritakse lipule omistatud binaarkoodi väärtust Pinupaani valikud Sõrmis Enter: Muudetakse pinuaadressi väärtust Kõrvuti simulaatori tööriistaribal olevate funktsionaalsete nuppudega, võib kasutada samuti klaviatuurilt sõrmiskombinatsioonide abil sisestatavaid käsklusi, mis toimivad erinevates simulaatori talitlusrežiimides: Redaktorrežiim File Menu, New File: Ctrl+Shift+N File Menu, Open File: Ctrl+Shift+O File Menu, Save File: Ctrl+Shift+S File Menu, Close File: Ctrl+Shift+C 86

File Menu, Print File: Ctrl+P File Menu, Exit Program: Alt+X Edit Menu, Undo: Ctrl+Z Edit Menu, Redo: Ctrl+D Edit Menu, Cut: Ctrl+X Edit Menu, Copy: Ctrl+C Edit Menu, Paste: Ctrl+V Edit Menu, Select All: Ctrl+A Edit Menu, Find: Ctrl+F Edit Menu, Replace: Ctrl+R Project Menu, Compile: Ctrl+F9 Project Menu, Debug: Ctrl+F10 Silurežiim Project Menu, Terminate: Ctrl+F2 Project Menu, ReLoad: Ctrl+L Project Menu, Trace Into: F7 Project Menu, Step Over: F8 Project Menu, Run Here: F4 Project Menu, Run: F9 Project Menu, Breakpoint: F5 Project Menu, Breakpoint State Change: Ctrl+F5 Tools Menu, Show Ports: Ctrl+Alt+P Next Pane: F6 või Ctrl+Right Arrow Previous Pane: Shift+F6 või Ctrl+Left Arrow Üldised funktsioonid Tools Menu, ASCII Table: Ctrl+Alt+A Tools Menu, Base Converter: Ctrl+Alt+B Tools Menu, Character Map: Ctrl+Alt+C Tools Menu, Hex Calculator: Ctrl+Alt+H Tools Menu, Keyboard Scan Codes: Ctrl+Alt+S Navigeerimine: Nooleklahvid ( ) Kui soovitakse muuta simulaatori talitlusrežiimi, siis tuleb kasutada simulaatori põhimenüüs valikut Options. 87

Töölaua ekraanitõmmis 88

Näidisprogrammid Näide 1 Programmi listing assemblerikoodis ================================================= KickOff 2000h Org 1000h ;This is where the control will first transferred ;Code entry point Db 0Dh, 0Ah,'This is a sample text...' FillByte 5,41h ; = 41h,41h,41h,41h,41h FillByteStep 10,'a',2,'Up' Org 2000h ;Code entry point lxi hl,2070h lxi bc,2090h lb1: mov a,m cpo 0dh jz exit cpi 30h jc next cpi 39h jnc next stax bc inx bc next: inx hl jmp lb1 exit: hlt Org 2070h Db 35h,2Fh,30h,39h,3Ah,37h,7Fh,31h,0dh,32h,13h ============================================== 89

Programmi listing pärast transleerimist (assembleerimist) 1 1000 0D DCR C. ; Db 0Dh, 0Ah, This is a sample text... 2 1001 0A LDAX BC. 3 1002 54 MOV D,H T 4 1003 68 MOV L,B h 5 1004 69 MOV L,C i 6 1005 73 MOV M,E s 7 1006 20 RIM 8 1007 69 MOV L,C i 9 1008 73 MOV M,E s 10 1009 20 RIM 11 100A 61 MOV H,C a 12 100B 20 RIM 13 100C 73 MOV M,E s 14 100D 61 MOV H,C a 15 100E 6D MOV L,L m 16 100F 70 MOV M,B p 17 1010 6C MOV L,H l 18 1011 65 MOV H,L e 19 1012 20 RIM 20 1013 74 MOV M,H t 21 1014 65 MOV H,L e 22 1015 78 MOV A,B x 23 1016 74 MOV M,H t 24 1017 2E2E MVI L,2E.. 25 1019 2E0D MVI L,0D.. 26 101B 0A LDAX BC. 27 101C 41 MOV B,C A ; Fill Byte 5, 41h 28 101D 41 MOV B,C A 29 101E 41 MOV B,C A 30 101F 41 MOV B,C A 31 1020 41 MOV B,C A 32 1021 61 MOV H,C a ;Fill ByteStep 10, a, 2, Up 33 1022 63 MOV H,E c 34 1023 65 MOV H,L e 35 1024 67 MOV H,A g 36 1025 69 MOV L,C i 37 1026 6B MOV L,E k 38 1027 6D MOV L,L m 39 1028 6F MOV L,A o 40 1029 71 MOV M,C q 41 102A 73 MOV M,E s 42 2000 217020 LXI HL,2070 43 2003 019020 LXI BC,2090 90

44 2006 7E MOV A,M 45 2007 E40D00 CPO 000D 46 200A CA1D20 JZ 201D 47 200D FE30 CPI 30.0 48 200F DA1920 JC 2019.. 49 2012 FE39 CPI 39.9 50 2014 D21920 JNC 2019.. 51 2017 02 STAX BC. 52 2018 03 INX BC. 53 2019 23 INX HL # 54 201A C30620 JMP 2006.. 55 201D 76 HLT v 56 2070 35 DCR M 5 ; Db 35h, 2Fh, 30h, 39h, 3Ah, 37h, 7Fh, 31h, 0Dh, 57 2071 2F CMA / ; 32h, 13h 58 2072 30 SIM 0 59 2073 39 DAD SP 9 60 2074 3A377F LDA 7F37 61 2077 310D32 LXI SP,320D 62 207A 13 INX DE 91

Näide 2 Programm kahe 8-bitise kuueteistkümnendarvu liitmiseks Programmi algoritm 1. Laadida mälust esimese operandi (liidetava) väärtus akumulaatorregistrisse (A); 2. Suunata akumulaatorregistri sisu registrisse B; 3. Laadida mälust teise (operandi) liidetava väärtus akumulaatrorregistrisse A; 4. Liita registrites A ja B olevad operandid; 5. Kontrollida ülekande olemasolu (lipp CY); 6. Salvestada saadud summa (tulemus) ja ülekandelipu väärtus mällu; 7. Lõpetada programm. Lähteandmed programmile Operand 1, väärtusega 80h, asub mälupesas aadressiga 2150h; Operand 2, väärtusega 80h, asub mälupesas aadressiga 2151h; Summa (tulem) salvestada mälupessa aadressiga 2152h. Algselt salvestada sellesse mälupesasse konstant 00h; Ülekandelipu (CY ehk C) väärtus salvestada mälupessa aadressiga 2153h; Algselt salvestada sellesse mälupesasse konstant 00h. Assemblerprogramm ; Programm ADD8bit.a85 ; Programmi käivitustingimused Org 1000h ; Programmi tekst mvi c, 00h lda 2150h mov b, a lda 2151h add b jnc Loop inr c Loop: sta 2152h mov a, c sta 2153h hlt ; Siire programsele tsüklile nimega Loop ; Programmi lõpp 92

Enne programmi käivitust silurežiimis väärtustati menüüs Debug Options järgmised valikud: Code Entry: 1000 hex Data Entry: 2000 hex Stack Entry: 3000 hex Programm salvestatakse kausta Demo Files. Assembleriprogrammi listingu fail ADD8bit.lst 1 1000 0E00 MVI C,00.. 2 1002 3A5021 LDA 2150 :P! 3 1005 47 MOV B, A G 4 1006 3A5121 LDA 2151 :Q! 5 1009 80 ADD B 6 100A D20E10 JNC 100E... 7 100D 0C INR C. 8 100E 325221 STA 2152 2R! 9 1011 79 MOV A, C y 10 1012 325321 STA 2153 2S! 11 1015 76 HLT v Assembleriprogrammi objektfail ADD8bit.obj 0E003A5021473A51 2180D20E100C3252 217932532176 Märkused 1. Laboratoorsetes töödes koostatavates programmides on nõutav, et kõik programmides kasutatavad lähteandmed ja saadavad tulemid paikneksid mäluruumi selles osas, mis on ette nähtud andmete säilitamiseks. Programmi töötluse käigus toimub lähteandmete laadimine mälust protsessori tööregistritesse ja töötlusel moodustuvad tulemid tuleb salvestada protsessori registritest mällu. 2. Kui assembleriprogramm on silutud (töötab korrektselt) ja on õppejõu poolt kontrollitud, siis tuleb loodud programm kaustast Demo Files kustutada. 93

Näide 3 Programm kahe 16-koodis esitatud arvu liitmiseks Koostada programm, mis liidaks kaks 16-koodis esitatud 8-bitist positiivset täisarvu. Programm koostada kahes variandis: 1. Liidetavad asuvad mälus järjestikuliste aadressidega mälupesades xxxxh ja xxx(x+1)h ning tulem salvestatakse mälupessa aadressiga xxx(x+2)h. 2. Liidetavad asuvad mälus mälupesades mille aadressid ei paikne järjestikku, st aadressidel xxxxh ja yyyyh ning tulem salvestatakse mälupessa aadressiga zzzzh (xxxxh yyyyh zzzzh). Programmi koostamisel lähtuda simulaatori Sim 8085 µp Simulator mäluruumi jaotusest koodi- ja andmemäluruumideks: Code Entry: 1000h Data Entry: 2000h Programmi õigsuse kontrolliks on valitud liidetavad (operandid) väärtustega A8h ja 2Eh. Kui programm töötab korrektselt, siis operandide liitmisel saadakse tulemus A8h + 2Eh = D6h Näidisprogrammide koostamisel ei ole pööratud tähelepanu mitte koodi kompaktsusele, vaid on püütud näidata erinevaid võimalusi protsessori ja mälu omavaheliseks suhtluseks. Näidisprogrammides toodud kommentaarid on liialt detailsed, praktiliselt kasutatavates programmides tuleks seda vältida ja kirjeldada vaid programmi talitluse seisukohalt olulisimat. Variant 1 ; Programm SumV1.a85 sooritab 16-koodis esitatud 8-bitiste märgita täisarvude liitmist. ; Operand 1, väärtusega A8h, asub mälupesas aadressiga 2000h. ; Operand 2, väärtusega 2Eh, asub mälupesas aadressiga 2001h. ; Liitmise tulem salvestatakse mälupessa aadressiga 2002h. ; Programmi algusaadress on 1000h. Org 2000h ; Andmeruumi algusaadress Db A8h, 2Eh, 00h ; Operandide 1 ja 2 ning tulemi algväärtus (00h) Org 1000h ; Programmi käivitusaadress lxi hl, 2000h ; Operandi 1 mäluaadress mov b, m ; Operandi 1 edastus mälust registrisse b 94

lda 2001h add b inx hl inx hl mov m, a hlt ; Operandi 2 edastus mälust registrisse a ; Käsu lda asemel võib kasutada samuti käsujada: ; inx hl ; mov a, m ; Operandide 1 ja 2 väärtuste summeerimine ; Tulemi mäluaadressi ettevalmistamine ; Tulemi salvestamine registrist a mällu ; Kolme käsu inx hl, inx hl, mov m, a asemel võib kasutada üht käsku ; sta 2002h ; Programmi lõpp Variant 2 ; Programm SumV2.a85 sooritab 16-koodis esitatud 8-bitiste märgita täisarvude liitmist. ; Operand 1, väärtusega A8h, asub mälupesas aadressiga 2004h. ; Operand 2, väärtusega 2Eh, asub mälupesas aadressiga 2010h. ; Liitmise tulem salvestatakse mälupessa aadressiga 202fh. ; Programmi algusaadress on 1000h. Org 2004h Db A8h Org 2010h Db 2Eh Org 202fh Db 00h Org 1000h lda 2004h mov d, a lda 2010h add d lxi hl, 202fh mov m, a hlt ; Andmeruumi aadress ; Operandide 1 kandmine andmemällu ;Andmeruumi aadress ; Operandi 2 kandmine andmemällu ; Andmeruumi aadress ; Tulemi algväärtuse (00h) kandmine andmemällu ; Programmi käivitusaadress ; Operandi 1 edastus mälust registrisse a ; Operandi 1 edastus registrisse d ; Operandi 2 edastus mälust registrisse a ; Liitmise operatsioon ; Tulemi aadressi ettevalmistus ; Tulemi salvestus mällu ; Programmi lõpp Märkus Tulemi väärtuse vaatamisel simulaatori andmepaanil, saab kuvatavat informatsiooni nihutada kas üles- või allapoole klaviatuuri nooleklahvidega ja. 95

Praktiliste tööde vormistamine 1. Töö vormistada kirjalikult valgele paberile formaadis A4. 2. Töö aruandes esitada: a. Programmi vooskeem (vt näide). NB! Mitte kasutada struktuurprogrammeerimises kasutatavat graafilist esitust Nassi-Shneidermani skeemi (struktogrammi ehk NSDd). b. Programmi lähtekoodi (programmi kood enne assembleerimist) kommenteeritud listing. c. Praktilise töö lisaülesannete, kui need on töös ette nähtud, lahendused vastavalt töö ülesandes toodud nõuetele. 3. Iga laboratoorne töö varustada individuaalse tiitellehega (vt näidis). 4. Kaitsmisele esitada kõik sooritatud tööd kokkuköidetult. Praktiliste tööde kaitsmine Praktiliste tööde kaitsmine toimub individuaalselt. Tööde kaitsmisel tuleb osata selgitada programmide talitlust, nendes kasutatud käske ja assembleri direktiive (pseudokäske). Tuleb teada Inteli mikroprotsessori 8085 mikroarhitektuuri kuuluvate lülituste funktsioone ja nende talitluse põhimõtteid. Tuleb osata selgitada, millised tegevused toimuvad protsessoris käskude töötlemisel üksikuis masinatsüklites (lähtudes talitluse ajadiagrammist). Eksamieeldus - sooritatud ja kaitstud kõik programmis ette nähtud praktilised tööd. 96

Tiitellehe näidis TALLINNA TEHNIKAÜLIKOOL Arvutisüsteemide instituut Juurimise algoritm ja programm Arvutiarhitektuurid (IAY 0520) Praktiline töö Üliõpilane: Töö sooritatud: Juhendaja: Töö arvestatud: 97

Näide Klaviatuuri klahvi lülitusväreluse kõrvaldamiseks kasutatava programmi vooskeem Algus Klaviatuuri skaneerimine _ Klahv lülitunud? + Lülitunud klahvi koodi töötlus Viide 45 ms Klaviatuuri skaneerimine _ Klahv ennistunud? + Viide 45 ms Lõpp 98

Praktiliste tööde vooskeemidel kasutatavaid tingmärke Käivitus / lõpetus Tegevus või protsess Otsustus Ettevalmistus (järgmise sammu ettevalmistamine protsessis) Alamprogramm või eelnevalt defineeritud protsess Andmete salvestus või salvestatud andmed Väljumine vooskeemi leheküljelt (näidatud neli erinevat võimalikku väljumissuunda) Ühendus (osundab voo jätkumise kohale (kohale millel on samasugune tähistus)) Voo kulgemist osundav suunanool Kommentaar 99