VELKOMMEN!!!! till EDA485/DIT5 Maskinorienterad Programmering önskar n o Rolf M fo0 YFTE o MÅL Programmera i språk som ligger nära processorn (maskinen) Ge en helhetsbild av hur vi har nytta av kunskaper i området M ka kunna analysera, beskriva och konstruera enkla datorsystem mikroprocessor, minne, I/O, etc som använder - programmerad I/O - avbrottsstyrd I/O - maskinvarustyrd I/O Centrala begrepp i systemprogramvara, -hantering av processer, -delade objekt - ömsesidig uteslutning Ge grund för fortsatta studier inom det datatekniska området M fo0 2 reläsning+demo imulatorövningar Laboration L Assenbler Kursupplägg /D L C-prog 3 AssemblerLabbar ~54h ~2h ~24h Σ 80h Hemarbete H ~00 = 2.5h/v C+A App 2 C Labb C+A Rep Vecka 2 3 4 5 6 7 Tenta M fo0 3 Kurslitteratur Arbetsbok för MC2 Instruktionslista för U2 Vägen till C, Bilting / kansholm Div OH-material Resurssidan Assemblerprogrammering.pdf Uppbyggnad.pdf Labrelaterad material http://www.cse.chalmers.se/edu/course/eda485/ (EDA480/DAT05) http://www.ce.chalmers.se/edu/year/2008/course/eda485/ M fo0 4
Laborationer i LP3 Under LP3 skall 6 st obligatoriska laborationspass utföras i tvåmannagrupper (3 assembler, 2 C och en kombinerad C och assembler). Anmälan: tudieportalen 8-2 Må Ti On To Fr Gr A Gr D 8 0 : im: Lab Gr A Lektioner LP3 Vanlig Vecka reläsningar / Demonstration Handledd självverksamhet Må Ti On To Fr im GrB HC Lab Gr D HC 3-7 7-2 Gr B Gr C (Gr C) 3 5 HC Lab Gr B im Gr C Lab Gr C im Gr D HC im GrB Labbchef: Lars Kollberg; kollberg @ chalmers. se CHARM I LV4 (0/2) flyttas till tors kväll M fo0 6 M fo0 5 : im: Lektioner LP3 rsta Veckan reläsningar / Demonstration Handledd självverksamhet I DAG - Intro Assprog.pdf s-35 Arb Avsnitt 3 8 0 3 5 Må Ti On To Fr KC HC im Gr C Lab Gr C HC im Gr D Lab Gr D HC im GrB HC REP AEMBLER (OH LV6 i DoD-kursen) trukturerad Programmering ubrutiner Dokumentation Inledning till Lab M fo0 7 M fo0 8 2
U2 / HC2 / MC2 Programmerarens bild U2 Inst s 0- Processorn U2 Microcontroller HC2 tar-tolvan (MC92xxx) Micro-datorn HC2 Eclk Gemensam address och data-buss MC2 - Buss E (Eclk) M fo0 9 8/6 bitars del 6 bitars del Klockkristall U2 tyrenhet Instruktionsregister, IR IR (8) IR2 (8) IR3 (8) (8/6) ALU Flaggregister CC (8) (8/6) Ackumulator Ackumulator A (8) D (6) B (8) Indexregister X (6) (6) Indexregister Y (6) tackpekare P (6) Programräknare PC (6) Flaggregister CC 7 6 5 4 3 2 0 X H I N Z V C M fo0 0 U2 - En Ackumulatormaskin i minnet Instruktionsformat U2 Operand P Någon operation i ALU:n Accumulator A Resultat R Operand Q 7-0 5-8 7-0 L H L PB PB L PB H L 8 03 2 34 AB CD H L H L Accumulator K Minne Accumulator K M fo0 5-8 7-0 H L Digital o Datorteknik fo 6 2 3
esseringsmoder U2 Inst s 4 esseringsmod: Inherent INH Inherent Immediate Direct (Page) Extended Relative Indexed INH IMM DIR EXT REL IDX/IDX/IDX2 Assembler Maskinkod RTN INCA 42 A + A NEGB 50 B + B ENDAT -kod (Operanden är inbyggd i -koden) M fo0 3 Digital o Datorteknik fo 6 4 esseringsmod: Immediate IMM esseringsmod: Extended EXT Assembler Maskinkod RTN LDAB #$3F C6 3F 3F B LDD #$9AB2 CC 9A B2 9AB2 D LDY #$234 CD 2 34 234 Y LDY #$ CD 00 0 000 Y Assembler Maskinkod RTN LDAB $234 F6 2 34 M(234) B LDD $9AB2 FC 9A B2 M(9AB2):M(9AB3) D LDY $234 FD 2 34 M(234):M(235) Y LDY $ FD 00 0 M(000):M(0002) Y operand essoperand Digital o Datorteknik fo 6 5 Digital o Datorteknik fo 6 6 4
esseringsmod: Direct Page Assembler Maskinkod RTN DIR esseringsmod: Relative REL Assembler Maskinkod RTN BRA Loop 20 ofs PC+ofs PC LDAB <$34 D6 34 M(0034) B LDD <$B2 FC B2 M(00B2):M(00B3) D LDY <$34 FD 34 M(0034):M(0035) Y LDY <$ FD 0 M(000):M(0002) Y essoperand BEQ $9AB2 27 ofs if Z=: PC+ofs PC offset ( byte) [-28,27] LBRA top 8 20 ofsh ofsl PC+ofsH:ofsL PC LBEQ nurra 8 27 ofsh ofsl if Z=: PC+ofsH:ofsL PC offset (2 byte) [-32768,32767] Digital o Datorteknik fo 6 7 Digital o Datorteknik fo 6 8 esseringsmod: Indexed IDX, IDX, IDX2 Assembler Maskinkod RTN esseringsmod: Indexed IDX, IDX, IDX2 Ex) LDAA 3,X LDAB,Y E6 40 M(Y) B LDD 6,Y EC 46 M(Y+6):M(Y+7) D Instruktion Offset,PekarRegister ADDA $234,X AB E2 2 34 A+M(X+234) A UBB A,X E0 E4 B-M(X+A) B LDAA 8,P A6 F0 2 M(+2) A PB Offset PB: PostByte Vart /Hur hittas adressen ) X o Y 2) P (reg ) 3) även PC ) aknas ex LDAA 0,X 2) Konstant ex LDAA -7,X 3) Accumulator ofs ) 8-bit ex LDAA B,X 2) 6-bit ex LDAA D,X Digital o Datorteknik fo 6 9 Digital o Datorteknik fo 6 20 LDAA CMPB TX ADCA 5
If Then End Kontrollstruktur if () {atser} Villkor JA atser NEJ if (Dipwitch!= 0) HexDisp = Dipswitch; Kodning BNE Hopp om ICKE zero Z=0 BEQ Hopp om zero Z= TT BEQ LDAB TAB end Dipwitch end Dipwitch HexDisp Villkorlig programflödeskontroll Mnemonic Funktion Villkor Enkla flaggtest BC Hopp om carry C= BCC Hopp om ICKE carry C=0 BEQ Hopp om zero Z= BNE Hopp om ICKE zero Z=0 BMI Hopp om negative N= BPL Hopp om ICKE negative N=0 BV Hopp om overflow V= BVC Hopp om ICKE overflow V=0 Test av tal utan tecken BHI Villkor: R>M C + Z = 0 BH Villkor: RM C=0 BLO Villkor: R<M C= BL Villkor: RM C + Z = Test av tal med tecken BGT Villkor: R>M Z + ( N V ) = 0 BGE Villkor: RM N V = 0 BLT Villkor: R<M N V = BLE Villkor: RM Z + ( N V ) = Digital o Datorteknik fo 6 2 Digital o Datorteknik fo 6 22 Kontrollstruktur if () {atser} else {atser2} If Then Else End Villkor JA atser atser 2 NEJ R >= M if (Dipwitch >= 5) HexDisp = ; else HexDisp = 2; ) LDAB Dipwitch 2) CMPB #5 3) BLO else LDAB # TAB HexDisp BRA end else LDAB #2 TAB HexDisp end while () {} While Then End Kontrollstruktur while () {atser} Villkor JA atser NEJ while (Dipwitch!= 0) HexDisp = ; while end_while LDAB TTB BEQ Dipwitch end_while LDAB # TAB HexDisp BRA while Test av tal utan tecken BLO Villkor: R<M C= Test av tal med tecken BLT Villkor: R<M N V = Digital o Datorteknik fo 6 23 BEQ Hopp om zero Z= Digital o Datorteknik fo 6 24 6
Kontrollstruktur do {atser} while () do {} while () LO UNTIL JA atser Villkor? NEJ do { HexDisp = 0; }while (Dipwitch >= 0); do MOVB Test av tal utan tecken BH Villkor: RM C=0 #0,HexDisp LDAB Dipwitch CMPB #0 BH do Digital o Datorteknik fo 6 25 Ett assemblerprogram org $000 ldaa $600 jsr $200 staa $400 jmp $000 InPort EQU $0600 Def Inport OutPort EQU $0400 Def Utport org $000 Loop ldaa InPort jsr Mul4 staa OutPort jmp Loop (DoD) Läs Inporten Multiplicera med fyra kriv till utporten M fo0 26 PRINTER EQU $0800 PTATU EQU $080 PCONTROL EQU $0802 EOT EQU 4 PrintFil LDX #Text Loop LDAA,X+ CMPA #EOT BEQ top LoopForReady: BRCLR PTATU,#4,LoopForReady TAA PRINTER BET PCONTROL,#2 ätt DAV LoopNotReady: BRET PTATU,#4,LoopNotReady top BCLR BRA RT PCONTROL,#2 Loop Text: FC "Hej Du Kalle!" FCB EOT truct Printer { char ; char tatus; char Control; } #define EOT 4 PrintFil (Text){ char tecken; while () { tecken = *Text++; if tecken == EOT return; while (Printer.tatus 4 == 0); } } Printer. = tecken; Printer.Control = 2; while (Printer.tatus 4!=0); Printer.Control = 0; 27 DOKUMENTATION Innre Yttre PROGRAMTRUKTUR Modul ubrutiner UE-direktivet M fo 5 28 7
Hög-nivå If saldo < uttag then ge inga pengar else ge pengar end Programmeringsprojekt: Bygg ett stoppur Arb Avsn 3 Assembler-nivå LDAA ALDO CMPA UTTAG BHI else Maskin-nivå 3F C 42 B7 M fo 5 29 Du ska kunna:. tarta klockan 2. toppa klockan 3. Nollställa klockan M fo 5 30 Programmeringsprojekt Bygg ett stoppur Avsn 3 tart init Programmeringsprojekt Bygg ett stoppur s40. Räknare som håller reda på tiden 2. Huvudprogram 3. Rutin som visar tiden 4. Hur lagras tiden, format? 5. Rutin som ändrar (ökar) tiden 6. Rutin som läser av tangentbordet 7. Koda tangentnumren (tart, stop, nollställ klockan) 8. Rutin som startar klockan 9. Rutin som stannar klockan 0. Rutin som nollställer klockan. mm M fo 5 3 Display IncClock CheckKbd tangent?? 2? 3? Ingen tangent nedtryckt tarta klockan tartclock tanna klockan topclock Nollställ klockan ResetClock tart topp ess Kommentar Clock $02 Timmar $05 Tio minuter $0 Minuter $03 Tio sekunder $07 ekunder $04 Tiondelar M fo 5 32 8
Programmeringsprojekt Top Down. Initiera 2. Main Loop 3. ubrutin som visar tiden 4. ubrutin som ändrar (ökar) tiden 5. Rutin som läser av tangentbordet och tartar klockan eller toppar klockan eller Nollställer klockan Avsn 3 M fo 5 33 YTTRE Dokumentation ********************************************* * *UBRUTIN DELAY * Beskrivning: kapar en fördröjning om * ANTAL x 500 ms. * Anrop: LDA #6 rdröj 6*500ms = 3s * JR DELAY * Indata: Antal intervall,om 500 ms i A * * Utdata: Inga * Register-påverkan:Ingen * Anropad subrutin: Ingen. ********************************************* * M fo 5 34 55 INNRE Dokumentation 55 tart Programstruktur DELAY PHA PHX para reg på stacken init TTA Är fördröjningsvärde noll? BEQ DExit Hoppa om noll ALO LDX #Konst * nurra som tar 0 klockcykler XLO LEAX -,X 2 cykler N cykel X #0 2 cykler BNE XLO 3 cykler DExit DECA BNE ALO Ytterligare fördröjning? PULX PULA RT 35 Display IncClock CheckKbd tangent?? 2? 3? Ingen tangent nedtryckt tarta klockan tartclock tanna klockan topclock Nollställ klockan ResetClock. Inkludera definitionsfil 2. Initiera systemet 3. Huvudprogram (Main Loop) 4. Inkludera fil (filer) med subrutiner (Display, IncClock, tartclock etc) 5. Plats för variabler M fo 5 36 9
Inkludera filer: Använd UE-direktivet * Filen IODEF.s2 (DEFINITIONFIL) Kbd EQU $9C0 Tangentbord Register ML5_Pos EQU $C02 Display Position ML5_eg EQU $C03 Display egmentkod HexDisp EQU $60 Hex Display * Filen TestKeyBoard.s2 UE IODEF.s2 ORG $000 Main ldab Kbd Läs tangentbord stab HexDisp Visa tangentnummer BRA Main 4 37 Programstruktur tart init Display IncClock CheckKbd tangent?? 2? 3? Ingen tangent nedtryckt tarta klockan tartclock tanna klockan topclock Nollställ klockan ResetClock * Filen Main.s2 UE IODEF.s2 ORG $000 jsr Init Main jsr Display jsr IncClock ldab Kbd cmpb #$FF beq Main cmpb # bne Notart jsr tartclock Notart cmpb #2 etc... BRA Main Clock rmb 6 Klockvariabel UE Fil.s2 (Display o Inc) UE Fil2.s2 (tart, stop etc) Tangentbord ML2/ML5 Uppg 53 38 Display ML3/ML5 Uppg 62/63 ML5_PO tyr vilken sifferindikator som skall tändas 7 DAV 6 0 5 0 4 0 3 B3 2 B2 B 0 B0 ML5_EG tyr vilka segment som skall tändas på sifferindikatorerna 8. 8. 8. 8. 8. 8. Bit 7, DAV: Valid; tatusbit som anger nedtryckt tangent b 7 =: Ingen tangent är för tillfället aktiverad på tangentbordet. b 7 =0: En tangent är aktiverad Bit 6-4, 0: Används ej. Bit 3-0, B3-B0: Tangentnummer; Anger aktuell tangentnedtryckning. M fo0 39 Reg Y LDAB,Y+ ess Kommentar Clock 02 Timmar 04 Tiominuter 00 Minuter 0 Tiosekunder 09 ekunder 06 Tiondelar Clock fcb 2,4,0,,9,6 2.40.9.6 Reg X LDAB B,X ess egmentkod för egtab 77 Noll 24 Ett 5D Två 6D Tre 2E Fyra etc egtab fcb $77,$24,$5D,etc 0
Borrmaskinlabbet Lab,2, 3 och 6- En Robot - I/O och avbrott och två processer Assembler och C TART Init Borrmaskinen 57 KEYB Tangentbord för borrkommando Operatör COMMAND COMMAND para registerinnehåll på stacken Avkoda (A) Inparameter: Kommandonummer i register A Mikrodator Anpassningselektronik Borrmaskin A=0 UB0 (TART) A= UB (T) A=2 UB2 (DOWN) UB3 (UP) A=3 UB4 (TEP) A=4 A=5 A=6 A=7 UB5 (DRILL) UB6 (REFPO) UB7 (AUTO) A>7 Klocka Återställ registerinnehåll från stacken M fo0 4 M RT fo0 42 tyrord till borrmaskinen 50 Utport: Drill Control 7 6 5 4 3 2 tatusord från borrmaskinen Inport: Drill tatus 7 6 5 4 3 2 0 0 Etta : Aktiv styrsignal Nolla : Passiv styrsignal stegpuls fram/back borrmotor solenoid larmsummer Nolla: Passiv statussignal Etta: Aktiv statussignal referensposition borr uppe borr nere M fo0 43 Användning av UE-direktivet * Filen DRILLDEF.s2 Inport EQU $600 Dip witch Input DCtrl EQU $400 Drill Control Output Dtatus EQU $40 Drill taus Input Outport EQU $40 Lysdioderna * Filen DTET.s2 UE DRILLDEF.s2 ORG $000 Loop ldaa Inport Läs strömbrytarna staa DCtrl kriv till borrmaskinen ldab Dtatus Läs statusregistret stab Outport Visa statusregistret bra Loop M fo0 44 49
TART Övergripande specifikation av inledande borrmaskinuppgift: 5 2: essavkodning RefPos Borra Vrid3 Borra Vrid Larm T a) Arbetsstycket vrids till referensposition b) Ett hål borras c) Arbetsstycket vrids medurs tre steg d) Ett hål borras e) Arbetsstycket vrids medurs ett steg f) En larmsignal ges som indikation på att uppgiften är klar. M fo0 45 Minnen Bussar generellt Processorns anslutningar Timing essavkodning Fullständig Avk Ofullständig Avk Processorns adressrum VMA Valid Memory ess Processor - Bussar Minne krivare Mus etc M fo07 46 Lite om Minnen RAM Random Access Memory väg Reg A LD A LD B Reg B 0 C D Funkt 0 M U 2 X C in LD T ALU U Reg T E Flaggor g 2 LD X 0 MUX Reg X Inc Dec LD LD MA IncPC LD PC Reg MA PC ess MR Minne MW RWM RAM DRAM ROM PROM EPROM EEPROM FLAH Read Write Memory tatiskt RAM Dynamiskt Read Only Memory Programmable ROM Erasable PROM Electrically EPROM Reset OE A OE B 30 st styrsignaler från styrenhet C 3 2 LD R g g 0 OE R Reg I LD I -kod tyrenhet Reg R LD CC OE CC Flaggor Reg CC OE X OE Processor OE PC MR ut in M fo07 47 M fo07 48 2
Klocka. buss trobe Asynkront Bussprotokoll buss Kontrollbuss ACK Här är adressen trobe Processor Minne Klocka Processor Minne Klocka Processor (U2) ACK Här är data Klocka Inenhet Utenhet Minne M fo07 49 ynkront Bussprotokoll. buss buss En busscykel M fo07 50 Multiplexad Buss MC2: anslutningar Klocka Eclk Buss +5V Busscykel HC2 Eclk Busscykel Busscykel Klocka. buss buss MC2 eller någon processor tyrsignaler REET Mikrodator MC2 ess och databuss Klockkristall (6) (8) tyrsignaler Busscykel Busscykel Busscykel Icke Multiplexad Buss M fo07 5 GND M fo07 52 3
MC2 s-timing Maskincykel essavkodningslogik för en utport (Chip elect logik; C-logik) Eclk (8) ess bussen buss Processorn lägger ut giltig adress Minnet lägger ut data på bussen 0 250 500 Här laddas (latchas) data in till processorn t (ns) LD C Register (8) Till omgivningen (8) VALID MEMORY ADRE; VMA M fo07 53 TAA $C5A0 TAA UTPORTADRE M fo07 54 essavkodning essavkodning Processor (U) essavkodning Inenhet Utenhet TAA $C5A0 TAA UTPORTADRE C Minne LD (8) Utport $C5A0 Register (8) Till omgivningen (8) M fo07 55 C Om vi behöver flera I/O-portar Ut0 Ut Ut2 Ut3 In0 In In2 In3 på adress $C5A0 på adress $C5A på adress $C5A2 på adress $C5A3 på adress $C5A4 på adress $C5A5 på adress $C5A6 på adress $C5A7 Fixas med 8 st NAND-grindar eller??? M fo07 56 4
Ut0 Ut Ut2 Ut3 In0 In In2 In3 på adress $C5A0 på adress $C5A på adress $C5A2 på adress $C5A3 på adress $C5A4 på adress $C5A5 på adress $C5A6 på adress $C5A7 CIO A 2 A A 0 DATA I/O-modul essavkodning Intern adressavkodning 8 I/O-portar 8 8 8 8 M fo07 57 Out0 Out In2 In3 A 5 A 4 A 3 A 2 A A 0 A 9 A 8 A 7 A 6 A 5 A 4 A 3 E CIO CIO A 2 A A 0 CIO A 2 A A 0 VMA = E (Valid Memory Address) essavkodning C_Out0 C_In0 CIO A 2 A A 0 (kilja på ut och inportar) CIO A 2 A A 0 M fo07 58 C_Out C_In3 En minnesmodul 2 Kbyte RWM-modul Att ansluta en 2-kbyte RWM- modul med startadress $4000 A 0 A A 2 A 0 C C 0 C C 2 C 2047 Read Write C 0 Write C 2047 Write C 0 Read C 2047 Read C Register (8) C Register (8) OE 0 OE 2047 D 7 -D 0 2kByte RWMmodul C A 0 -A 0 D 7 -D 0 2kByte RWMmodul C A 0 -A 0 D 7 -D 0 Arbetsgång: Tolka beskrivningen av minnesmodulen Rita tabell Ange modulens första adress Ange modulens sista adress Märk ut konstanta resp varierande adressledningar Rita adressavkodningslogiken utanför minnesmodulen, ansluts till processorns databuss M fo07 59 M fo07 60 5
Att ansluta en 2-kbyte RWM- modul A 5 -A 0 Att ansluta en 8-kbyte ROM- modul till ett befintligt system A 5 -A 0 A 2 -A 0 A 5 -A A0 -A 0 A 5 -A A0 -A 0 E/EClk MC2 C-logik för 2kByte RWM CRWM 2kByte RWMmodul C E/EClk MC2 C-logik för RWM Och ROM CRWM CROM 2kByte RWMmodul C C 8kByte ROMmodul D 7 -D 0 M fo07 6 D 7 -D 0 M fo07 62 D 7 -D 0 Processorns adressrum Beskrivande figur över hur minnesmoduler och IO-portar är placerade i minnet 0000 4000 4800 Tomt RWM Tomt Uppgift Konstruera adressavkodningen för följande: 4 kbyte RWM från adress 0 8 kbyte ROM på de högsta adresserna En I/O-area på 256 Byte med start på adress $6000 C5A0 E000 Tomt IO-port Du har tillgång till 8 kbyte ROM-modul 4 kbyte RWM-modul ROM Använd fullständig adressavkodning M fo07 FFFF 63 M fo07 64 6
Uppgift Uppgift om förra. men använd ofullständig adressavkodning! Konstruera adressavkodningen för följande: 4 kbyte RWM från adress 0 8 kbyte ROM på de högsta adresserna En I/O-area på 256 Byte med start på adress $6000 Du har tillgång till 8 kbyte ROM-modul 4 kbyte RWM-modul Konstruera adressavkodningen för följande: En I/O-area på 52 Byte med start på adress $0000 RWM från I/O-areans slut till adress $FFF ROM från adress $2000-$FFFF Du har tillgång till 64 kbyte ROM-modul 8 kbyte RWM-modul M fo07 65 M fo07 66 Att ansluta en Xk Byte Minnes- modul med startadress $zzzz Xk Byte RWMmodul C A yy -A 0 D 7 -D 0 Arbetsgång: Tolka beskrivningen av minnesmodulen Rita tabell Ange modulens första adress Ange modulens sista adress Märk ut konstanta resp varierande adressledningar Rita adressavkodningslogiken Fullständig resp Ofullständig essavkodning M fo07 67 M fo07 68 7