TSEA28 Datorteknik Y (och U)

Relevanta dokument
TSEA28 Datorteknik Y (och U)

TSEA28 Datorteknik Y (och U)

Digital- och datorteknik

Tentamen. Datorteknik Y, TSEA28

Digital- och datorteknik

Digital- och datorteknik

TSEA28 Datorteknik Y (och U)

Programexempel för FLEX

Digital- och datorteknik

Styrenheten styrsignalsekvenser programflödeskontroll

F2: Motorola Arkitektur. Assembler vs. Maskinkod Exekvering av instruktioner i Instruktionsformat MOVE instruktionen

Tentamen. Datorteknik Y, TSEA28

Tentamen. Datorteknik Y, TSEA28

F4: Assemblerprogrammering

Tentamen. Datorteknik Y, TSEA28

TSEA28 Datorteknik Y (och U)

TSEA28 Datorteknik Y (och U)

TSEA28 Datorteknik Y (och U)

Tentamen. Datorteknik Y, TSEA28

Tentamen. Datorteknik Y, TSEA28

Mål. Datorteknik. Innehåll. Innehåll (forts) Hur ser ett program ut? Hur skapas maskinkoden?

TSEA28 Datorteknik Y (och U)

Digital- och datorteknik

Övning2 Datorteknik, HH vt12 - Programmering

Ext-13 (Ver ) Exempel på RTN-beskrivning av FLEX-instruktioner

Dataminne I/O Stack 0x005D 0x3D SP low byte 0x005E 0x3E SP high byte

Fö 5+6 TSEA81. Real-time kernel + Real-time OS

F5: Högnivåprogrammering

Övningsuppgifterna i kapitel F avser FLIS-processorn, vars instruktioner och motsvarande koder definieras i INSTRUKTIONSLISTA FÖR FLISP.

Digital- och datorteknik

F5: Högnivåprogrammering

Tentamen. Datorteknik Y, TSEA28

Reducerad INSTRUKTIONSLISTA för FLIS-processorn

Ext-13 (Ver ) Exempel på RTN-beskrivning av FLEX-instruktioner

Tentamen. Datorteknik Y, TSEA28

Institutionen för elektro- och informationsteknologi, LTH

Datorteknik. Föreläsning 3. Assembler, stack och subrutiner, programmeringskonventionen. Institutionen för elektro- och informationsteknologi, LTH

Digital- och datorteknik

Tentamen. Datorteknik Y, TSEA28

7) Beskriv tre sätt att överföra parametrar mellan huvudprogram och subrutin.

Föreläsningsanteckningar 2. Mikroprogrammering I

Lösningar till tentamen i EIT070 Datorteknik

Programräknaren visar alltid på nästa instruktion som skall utföras. Så fort en instruktion har hämtats så visar programräknaren på nästa instruktion.

Laboration 2 i Datorteknik- Assemblerprogrammering II

TSEA28 Datorteknik Y (och U)

LABORATION. Datorteknik Y

Lösningar till tentamen i EIT070 Datorteknik

Datorsystemteknik DVGA03 Föreläsning 8

Datorsystem Laboration 2: Minnesmappade bussar

Digital- och datorteknik

3. Mikroprogrammering II

Lösningar till tentamen i EIT070 Datorteknik

Datorteknik. Föreläsning 6. Processorns uppbyggnad, pipelining. Institutionen för elektro- och informationsteknologi, LTH. Mål

Institutionen för elektro- och informationsteknologi, LTH

Datorteknik. Föreläsning 5. Realtidssystem och realtidsprogrammering. Institutionen för elektro- och informationsteknologi, LTH.

Föreläsningsanteckningar 3. Mikroprogrammering II

TSEA28 Datorteknik Y (och U)

Digitalteknik EIT020. Lecture 15: Design av digitala kretsar

F8: Undantagshantering

Konstruera en dator mha grindar och programmera denna Använda en modern microcontroller

CE_O3. Nios II. Inför lab nios2time

TSEA28 Datorteknik Y (och U)

Minnet. Minne. Minns Man Minnet? Aktivera Kursens mål: LV3 Fo7. RAM-minnen: ROM PROM FLASH RWM. Primärminnen Sekundärminne Blockminne. Ext 15.

LV6 LV7. Aktivera Kursens mål:

Styrenheten 9/17/2011. Styrenheten - forts Arb s 120. LV4 Fo10. Aktivera Kursens mål: Kap 7 Blå

Kontrollskrivning Mikrodatorteknik CDT S2-704

Villkorliga hopp: 9/26/2011. Dagens mål: Du ska kunna.. Villrorliga (Relativa) hopp - forts Arb s 140. LV5 Fo12. LV5 Fo12. Aktivera Kursens mål:

TSEA28 Datorteknik Y (och U)

Tentamen (Exempel) Datorteknik Y, TSEA28

General Purpose registers ALU I T H S V N Z C SREG. Antag att vi behöver skriva in talet 25 till register R18

TSEA28 Datorteknik Y (och U)

TSEA28 Datorteknik Y (och U)

Digital- och datorteknik

Stack och subrutiner Programmeringskonventionen

TSEA28 Datorteknik Y (och U)

Elektroteknik MF1016 föreläsning 9 MF1017 föreläsning 7 Mikrodatorteknik

Övningsuppgifter i Mikrodatorteknik 4p/5p

Tentamen den 18 mars svar Datorteknik, EIT070

Tentamen Datorteknik D del 2, TSEA49

Institutionen för elektro- och informationsteknologi, LTH

Datorteknik. Föreläsning 2. Programmering i C och assembler MIPS instruktionsarkitektur. Institutionen för elektro- och informationsteknologi, LTH

Lösningsförslag tenta

Program kan beskrivas på olika abstrak3onsnivåer. Högnivåprogram: läsbart (för människor), hög abstrak3onsnivå, enkelt a> porta (fly>a 3ll en annan ar

LEU240 Mikrodatorsystem

CE_O2. Nios II. Subrutiner med mera.

Assemblerprogrammering del 3

Tentamen (Exempel) Datorteknik Y, TSEA28

TSEA28 Datorteknik Y (och U)

Tentamen Datorteknik Y, TSEA28 Datum

TSEA28 Datorteknik Y (och U)

TSEA28 Datorteknik Y (och U)

Datorarkitekturer med operativsystem ERIK LARSSON

Mål. Datorteknik. Innehåll. Vad händer med en add-instruktion? Vad händer med en add-instruktion. Instruktioner som bitmönster i minnet

Tentamen (Exempel) Datorteknik Y, TSEA28

System S. Datorarkitektur - en inledning. Organisation av datorsystem: olika abstraktionsnivåer. den mest abstrakta synen på systemet

Extra lab. Nu på fredag kl 8-12 Frivillig Enbart hjälp med projektuppgiften Ingen examination

IT för personligt arbete F5

Svar till tentamen den 16 december 2013 Datorarkitekturer med operativsystem, EDT621, 7,5 poäng

Extrauppgifter för CPU12

Transkript:

TSEA28 Datorteknik Y (och U) Föreläsning 2 Kent Palmkvist, ISY TSEA28 Datorteknik Y (och U), föreläsning 2, Kent Palmkvist 2017-01-17 2 Dagens föreläsning Kort repetition Större programmeringsexempel Subrutiner Stack Adresseringsmoder

TSEA28 Datorteknik Y (och U), föreläsning 2, Kent Palmkvist 2017-01-17 3 Praktiska kommentarer Mail kommer skickas ut när labanmälan är möjlig Anmälningssystemet via Lisam är i beta-version Maila gärna mig vad som krångar om det krånglar Varje labb uppdelad i två delar (2h+2h), välj lämpligen två tillfällen med tid emellan Användandet av tutor för lab hemifrån Inloggning till ixtab.edu.isy.liu.se först (gäller även vid inloggning från asgård/olympen/egypten/southfork etc.) Se upp med antal inloggningar/inloggningsförsök per timme Kan bli utelåst om för många inloggningar/inloggningsförsök görs på kort tid Se kurshemsidan för hur man kan logga in från Windows och Mac TSEA28 Datorteknik Y (och U), föreläsning 2, Kent Palmkvist 2017-01-17 4 Praktiska kommentarer Tutorsystemet använder ISY:s gamla fileserver Annorlunda hemkonto än för IDA:s och ISY:s nya labbsystem http://www.isy.liu.se/tus/handbook/faq.html Tutor-systemet förväntar sig maskinkodsfilen a.out längst upp i hemkontot. På ixtab använd: cd ~ assemble.sh dinfil.s Alternativ: kopiera a.out till ~ assemble.sh dinfil.s cp a.out ~/

TSEA28 Datorteknik Y (och U), föreläsning 2, Kent Palmkvist 2017-01-17 5 Enkel exempeldator 2 register (PC och D), 1 ALU, kontrollenhet (CU) I/O: display och sensor 9 olika instruktioner Typ Argument xxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 4 32 Kod Assemblerinstruktion Föklaring 0 move #värde,d Ladda in argument i 1 add #värde,d Addera argument till D 2 cmp #värde,d Jämför argument med D, Z=1 om D=argument, Z=0 annars 3 bne adress Sätt PC till argument om Z=0 4 beq adress Sätt PC till argument om Z=1 5 jmp adress Sätt PC till argument 6 jsr 2000 om argument = 2000 skicka D till display 6 jsr 2100 om argument = 2100 hämta aktuellt displayvärde till D minne ALU 6 jsr 2200 om argument = 2200 hämta sensorvärde till D, D=1 om någon I dörren 7 move adress,d Läs värde från minnesadress och placera i D 8 move D,adress Spara värdet I D I minnesadressen In PC D CU Z Ut TSEA28 Datorteknik Y (och U), föreläsning 1, Kent Palmkvist 2017-01-17 6 Räkna studenter start: move #0,D ; Nollställ D move D,100 ; spara displayvärde adress 100 jsr 2000 ; sätt display till 00 wait1: jsr 2200 ; Hämta sensorvärde cmp #1,D ; Står någon i dörren? bne wait1 ;, gör om move 100,D ; hämta displayvärdet add #1,D ; öka displayvärdet jsr 2000 ; visa det nya värdet move D,100 ; spara nya värdet i minnet move #0,D ; starta timer på 0 delay: add #1,D ; öka timer med 1 cmp #10000,D ; lämpligt antal klockcykler? bne delay ; inte tillräckligt många varv wait0: jsr 2200 ; Hämta sensorvärde cmp #0,D ; Är dörren tom? bne wait0 ;, kontrollera igen jmp wait1 ; bör om Nollställ displayvärde Vänta på sensorvärde = 1 Öka displayvärde med 1 Vänta 0.5s Vänta på sensorvärde = 0

TSEA28 Datorteknik Y (och U), föreläsning 2, Kent Palmkvist 2017-01-17 7 Hur skriva större program Öka kraven i exemplet Lägg till en sensor för dörrlås (räkna inte när g går och hämtar kaffe...) Kräver ny instruktion för läsa dörrlås jsr 2300 Läs dörrlås, D=1 om dörr stängd, D=0 annars Räkna upp varannan gång (måste gå in och ut ur kontoret) Automatisk nollställning varje natt (om dörr stängd > 8h nollställ) Behöver lite mer strukturerad metod Tänk igenom förväntad funktion, rita flödesscheman Detaljerad beskrivning Minnesceller Riktig assemblerkod, namnge platser, rensa upp TSEA28 Datorteknik Y (och U), föreläsning 2, Kent Palmkvist 2017-01-17 8 Beskriv funktionen som en sekvens av enklare funktioner Tänk igenom förväntad sekvens Ingen ide räkna upp medan dörren är stängd Rita lite fritt först, med stora komplexa instruktioner Nollställ när strömmen slås på Om dörr stängs räkna ned antal med 2 (måste passera dörren för att stänga den), vänta till dörren öppnas igen Räkna upp om dörrsensor aktiveras

TSEA28 Datorteknik Y (och U), föreläsning 2, Kent Palmkvist 2017-01-17 9 Exempelstruktur (rita gärna flödesidagram) Initiera vänta på aktivitet på dörr eller sensor om dörr öppen om sensor aktiv räkna upp, vänta tills passerat vänta på nästa aktivering (personen går ut) om dörr stängd minska räknare med 2 räkna tid tills dörr öppnas om tid > 8h nollställ räknaren TSEA28 Datorteknik Y (och U), föreläsning 2, Kent Palmkvist 2017-01-17 10 Dela upp i mindre sekvenser Försök dela upp i små steg Varje litet steg bör kunna direkt översättas till maskinkod T ex: vänta på nästa aktivering (personen går ut) läs sensor, gå vidare om sensor aktiv, annars läs om igen vänta 0.5s läs sensor, gå vidare om sensor inte aktiv, annars läs om igen

TSEA28 Datorteknik Y (och U), föreläsning 2, Kent Palmkvist 2017-01-17 11 Mer detaljerad beskrivning Initiera sensor aktiv? vänta 0.5s sensor aktiv? Räkna upp display med 1 sensor aktiv? vänta 0.5s sensor aktiv? Räkna ned display med 2 Räkna tid Tid > 8h? Nollställ display TSEA28 Datorteknik Y (och U), föreläsning 2, Kent Palmkvist 2017-01-17 12 Ordna allt i en sekvens Har inte ritat ut val som går till nästa rad Initiera sensor aktiv? vänta 0.5s sensor aktiv? Räkna upp display med 1 sensor aktiv? vänta 0.5s sensor aktiv? Räkna ned display med 2 Räkna tid Tid > 8h? Nollställ display

TSEA28 Datorteknik Y (och U), föreläsning 2, Kent Palmkvist 2017-01-17 13 Funder över behov av minnesplatser D används till mycket Sensorvärden Räknarvärden Välj att placera räknarvärde i minnet Bestäm adresser för detta 3000: displayvärde 3001: tidräknare Kom ihåg att minnesceller kan ha slumpmässigt startvärde! Måste initiera! Initiera sensor aktiv? vänta 0.5s sensor aktiv? Räkna upp display med 1 sensor aktiv? vänta 0.5s sensor aktiv? Räkna ned display med 2 Räkna tid Tid > 8h? Nollställ display TSEA28 Datorteknik Y (och U), föreläsning 2, Kent Palmkvist 2017-01-17 14 Ersätt med riktig assemblerkod Ersätt varje större instruktion med riktig assemblerkod Namnge all platser som ska hoppas till init: move #0,D move D,3000 jsr 2000 sens1: jsr 2200 cmp #1,D beq 1 jsr 2300 cmp #0,D beq sens1 jmp decrement Initiera sensor aktiv? vänta 0.5s sensor aktiv? Räkna upp display med 1 sensor aktiv? vänta 0.5s sensor aktiv? Räkna ned display med 2 Räkna tid Tid > 8h? Nollställ display

TSEA28 Datorteknik Y (och U), föreläsning 2, Kent Palmkvist 2017-01-17 15 Hela programmet, del1 init: move #0,D ; initiera displayräknare till 0 move D,3000 ; sätt sparat displayvärde till 0 jsr 2000 ; och sätt display till 0 sens1: jsr 2200 cmp #1,D beq 1 jsr 2300 cmp #0,D beq sens1 jmp decrement ; hämta sensorvärde ; är sensor aktiv? ;, fortsätt nedan ; hämta låssensor ; är dörren låst ;, testa sensor och lås igen ; Ja, hantera i decrement-rutinen 1: move #0,D ; vänta 0.5s wait0: add #1,D ; räkna upp cmp #1000,D ; väntat färdigt? bne wait0 ;, vänta mer TSEA28 Datorteknik Y (och U), föreläsning 2, Kent Palmkvist 2017-01-17 16 Hela programmet, del2 sens2: jsr 2200 ; hämta sensorvärde cmp #0,D ; är sensor inaktiv? beq 1 ;, fortsätt nedan jsr 2300 cmp #0,D beq sens2 jmp decrement ; hämta låssensor ; är dörren låst ;, testa sensor och lås igen ; Ja, hantera i decrement-rutinen 1: move 3000,D ; räkna upp display add #1,D ; räkna upp move D,3000 ; spara det nya värdet jsr 2000 ; visa på display

TSEA28 Datorteknik Y (och U), föreläsning 2, Kent Palmkvist 2017-01-17 17 Hela programmet, del3 sens3: jsr 2200 ; hämta sensorvärde cmp #1,D ; är sensor aktiv? beq 2 ;, fortsätt nedan jsr 2300 cmp #0,D beq sens3 jmp decrement ; hämta låssensor ; är dörren låst ;, testa sensor och lås igen ; Ja, hantera i decrement-rutinen 2: move #0,D ; vänta 0.5s wait1: add #1,D ; räkna upp cmp #1000,D ; väntat färdigt? bne wait1 ;, vänta mer TSEA28 Datorteknik Y (och U), föreläsning 2, Kent Palmkvist 2017-01-17 18 Hela programmet, del4 sens4: jsr 2200 ; hämta sensorvärde cmp #0,D ; är sensor inaktiv? beq sens1 ;, bör om jsr 2300 cmp #0,D beq sens4 decrement: move 3000,D add #-2,D move D,3000 jsr 2000 move #0,D tidloop: add #1,D move D,3001 ; hämta låssensor ; är dörren låst ;, testa sensor och lås igen ; hämta aktuellt displayvärde ; minska med två ; spara det nya värdet ; visa på displayen ; nollställ tidräknare ; öka tid ; spara tidvärde i minnet

TSEA28 Datorteknik Y (och U), föreläsning 2, Kent Palmkvist 2017-01-17 19 Hela programmet, del5 jsr 2300 ; hämta låssensor cmp #0,D ; är dörren låst beq sens1 ;, bör om från börn move 3001,D ; har 8h passerat? cmp #80000,D beq tidloop: ; fortsätt vänta move #0,D ; nollställ displayvärde move D,3000 ; spara värdet I minnet jsr 2000 ; visa på displayen jmp tidloop ; nollställ tidräknare Subrutiner, stack

TSEA28 Datorteknik Y (och U), föreläsning 2, Kent Palmkvist 2017-01-17 21 Återanvändning av kod Många likadana sekvens i koden Fördröjning på 0.5s ser likadan ut på två ställen i koden 2: move #0,D ; vänta 0.5s wait1: add #1,D ; räkna upp cmp #1000,D ; väntat färdigt? bne wait1 ;, vänta mer Kan vara många flera rader i koden Lagra endast en kopia av sekvensen Återanvänd genom att hoppa till sekvensen från flera platser Kallas subrutin Samma idé som funktioner och procedurer i vanliga programspråk TSEA28 Datorteknik Y (och U), föreläsning 2, Kent Palmkvist 2017-01-17 22 Subrutiner Måste komma ihåg var programmet ska fortsätta efter subrutinen Återhopp 4 är har en annan adress än återhopp 2! Vanligt hopp fungerar inte (som måste ha fast adress) Spara adress till nästa instruktion när anrop till subrutin görs Speciell subrutinsinstruktion istället för vanligt hopp Den sparade adressen kan användas vid återhoppet (ytterligare en speciell instruktion) 2 4 Program anrop anrop 1 3 Subrutin återhopp

TSEA28 Datorteknik Y (och U), föreläsning 2, Kent Palmkvist 2017-01-17 23 Subrutiner, forts. Vid anrop till subrutin jsr adress ; hopp till subrutin som startar på adress i minnet Sparar adress till instruktion efter jsr (finns i PC-registret innan hoppet) När subrutin slut rts ; retur från subrutin Använd den sparade adressen från jsr-instruktion och placera den i PC-registret Placering av den sparade återhoppsadressen? Ett speciellt register alternativt en speciell adress i minnet TSEA28 Datorteknik Y (och U), föreläsning 2, Kent Palmkvist 2017-01-17 24 Subrutin, exempel Programmet startar högst upp Vid 1:a jsr sparas adress A (kopieras från PC) och adress C placeras i PC När subrutin C är slut återställs det sparade värdet (adress A) till PC Vid 2:a jsr sparas adress B (kopieras från PC) och adress C placeras i PC När subrutin C är slut återställs det sparade värdet (adress B) till PC Exemplet klarar sig med ett enda register för återhoppsadress Fungerar inte om subrutiner kan anropa andra subrutiner (det gör dom...) jsr C A: : jsr C B: : C: rts subrutin

TSEA28 Datorteknik Y (och U), föreläsning 2, Kent Palmkvist 2017-01-17 25 Subrutiner: stöd för rekursiva anrop Rekursion kräver möjlighet lagra flera anrop i rätt ordning Varje ny jsr instruktion lägger återhoppsadressen högst upp i högen av återhoppsadresser Varje rts tar bort översta adressen i högen av återhoppsadresser Denna datastruktur kallas för stack (last in first out) Jfr en låda med papper Värden läggs till högst upp, värden tas bort från toppen... jsr............ jsr......... jsr......... rts......... rts subrutiner TSEA28 Datorteknik Y (och U), föreläsning 2, Kent Palmkvist 2017-01-17 26 Implementering av en stack Att använda ett speciellt (dedikerat) minne för stack är ineffektivt Kan dock ge bättre prestanda i vissa fall Stacken använder sig av en del av minnet Måste hålla ordning på var aktuell position befinner sig (toppen på stacken) Ett speciellt register i processorn Kallas för stackpekare (SP) Stacken kan växa uppåt eller nedåt i minnet Kan ibland väls för processorn

TSEA28 Datorteknik Y (och U), föreläsning 2, Kent Palmkvist 2017-01-17 27 Implementering av en stack, funktion Att placera något på stacken Kallas ibland för push, implementeras i flera steg Ändra SP till nästa lediga minnesadress Placera värdet i minnet på adress som finns i SP (SP pekar på) Att ta bort något från stacken Kallas ibland för pop, implementeras i motsatt ordning mot push Hämta värdet från minnet på den adress som finns i SP Ändra SP så den pekar på det nyaste översta värdet i stacken SP ökas eller minskas med 1 för varje push respektive pop operation TSEA28 Datorteknik Y (och U), föreläsning 2, Kent Palmkvist 2017-01-17 28 Utökning av exempeldatorn med stack Adress till minne måste styras med PC, SP och CU minne PC för nästa instruktion CU för adress från argument i instruktionen SP för läsa/skriva till stacken In PC SP Ut Måste initiera SP innan den används! Måste finnas skrivbart minne på adresserna CU Alternativ 1: sätt SP vid reset (spänningspåslag) till ett förbestämt värde Alternativ 2: Sätt SP i programmet ALU Kräver ny instruktion: move #adress,sp Eventuellt extra push D och pop D instruktioner D Z

TSEA28 Datorteknik Y (och U), föreläsning 2, Kent Palmkvist 2017-01-17 29 Grafisk beskrivning av minnesinnehåll Program ökar PC med 1 för varje instruktion Naturligt skriva lägst adress högst upp (nästa instruktion under föregående instruktion i listan) Låga adresser skrivs längst upp, höga adresser skrivs längst ned Kan ibland bli lite motsägelsefullt Om någon växer, ökar eller minskar adressen? Ibland ritas minneskarta med omvänd adressordning Låga adresser längst ned, höga adresser längst upp Adr Data 95 xxx 96 xxx 97 xxx 98 xxx 99 xxx Adr Data 99 xxx 98 xxx 97 xxx 96 xxx 95 xxx Växer nedåt (mot högre adresser) Växer uppåt (mot högre adresser) TSEA28 Datorteknik Y (och U), föreläsning 2, Kent Palmkvist 2017-01-17 30 Alternativ för stackimplementering Stack kan växa uppåt eller nedåt Mer vanligt att stacken växer mot lägre adresser (nedåt) Program växer i storlek mot högre adresser => stack växer från andra hållet Förhoppningsvis möts de aldrig!! SP kan peka på första lediga plats eller senast placerade data Valet påverkar om SP ändras före eller efter att data lagts på stacken Tutor: stack växer nedåt, pekar på senast placerade data Adr Data 95 xxx 96 xxx 97 xxx SP 98 xxx 99 xxx Adr Data 95 xxx 96 xxx 97 xxx SP 98 xxx 99 xxx Växer nedåt (mot lägre adresser) Växer uppåt (mot högre adresser)

TSEA28 Datorteknik Y (och U), föreläsning 2, Kent Palmkvist 2017-01-17 31 Exempel på sekvens av stackoperationer 1: SP = 98 Okänt innehåll (xxx) i minnet 2: Push(34) SP = 97 Minne[97] = 34 3: Push(19) SP = 96 Minne[96] = 19 4:D=pop() D = Minne[96] = 19 SP = 97 5:D=pop() D = Minne[97] = 34 SP = 98 Adr Data 95 xxx 96 xxx 97 xxx SP 98 xxx 99 xxx SP Adr Data 95 xxx 96 19 97 34 98 xxx 99 xxx SP SP Adr Data 95 xxx 96 xxx 97 34 98 xxx 99 xxx Adr Data 95 xxx 96 19 97 34 98 xxx 99 xxx SP Adr Data 95 xxx 96 19 97 34 98 xxx 99 xxx 1 2 3 4 5 TSEA28 Datorteknik Y (och U), föreläsning 2, Kent Palmkvist 2017-01-17 32 Jsr och rts alternativ 1: automatisk stack Jsr subrutinadress Rts Push(adress till instruktion efter jsr) PC = subrutinadress PC = pop() En subrutin kan anropa sig själv Rekursion, exempelvis n! beräknad rekursivt nfak(n): if N = 1 then return 1 else return nfak(n-1)*n; För många anrop gör att stacken blir för stor (SP -> 0 eller SP pekar på annan viktig data, t ex programmet)

TSEA28 Datorteknik Y (och U), föreläsning 2, Kent Palmkvist 2017-01-17 33 Jsr och rts alternativ 2: utan stack Extra register enbart avsett att lagra PC vid subrutinanrop LR: Link register Jsr subrutinadress Rts LR = adress till instruktion efter jsr (dvs PC-registrets värde) PC = subrutinadress PC = LR Subrutinen måste själv spara undan LR:s nuvarande värde innan nästa jsr (t ex på en stack) TSEA28 Datorteknik Y (och U), föreläsning 2, Kent Palmkvist 2017-01-17 34 Jämförelse jsr med/utan stack Fördel automatisk stack (Tutor/68000 mfl) Enklare programmera Färre instruktioner i subrutinerna Behöver inte extra instruktioner för att spara undan LR på stacken Behöver inte extra instruktioner för hantering av LR registret Fördel utan stack (ARM mfl) Snabbare instruktion Behöver inte spara onödiga adresser på stacken rts behöver inte läsa från minnet

TSEA28 Datorteknik Y (och U), föreläsning 2, Kent Palmkvist 2017-01-17 35 En detalj Skillnad mellan branch och jump Brukar finnas både jump och branch Även möjligt med BSR och JSR (branch respektive jump subroutine) Jump: Adressen i argumentet är absolut adress Exakt den adress som PC ska få när hoppet är utfört Branch: argumentet är en offset mot aktuell PC Argumentet anger hur många steg framåt eller bakåt hoppet ska göras relativt aktuellt adress i PC Fördel: hopp inom rutinen behöver inte ändras även om rutinen placeras på annan plats i minnet TSEA28 Datorteknik Y (och U), föreläsning 2, Kent Palmkvist 2017-01-17 36 JSR användning i exempeldatorn JSR är subrutinanrop som gömmer koden för hur sensorer och display hanteras Någon måste fortfarande skriva rutinerna och bygga in gränssnittet i datorn Dessa subrutiner är exempel på olika I/O-funktioner Skicka ut data till display Läsa av sensor och låssensor Hur? Måste finnas en del i modelldatorn där display och sensorer kan anslutas, och data kan skickas in/ut

TSEA28 Datorteknik Y (och U), föreläsning 2, Kent Palmkvist 2017-01-17 37 In och utdata, speciella instruktioner Vissa datorer använder speciella instruktioner för att skicka och ta emot data från I/O Kräver extra instruktioner såsom in ioadress,d out D,ioadress ; läs av inport nr ioadress och spara i D ; skicka värde i D till utport på adress ioadress Kräver extra signaler ut från processorn (styrsignaler) Datasignaler (värdet) skickas samma väg som data till/från minnet In och utdata påverkar inte tillgänglig mängd minne TSEA28 Datorteknik Y (och U), föreläsning 2, Kent Palmkvist 2017-01-17 38 In och utdata, minnesmappad I/O Vissa datorer (dom flesta) använder speciella minnesadresser för att ta emot data från I/O Kräver inga extra instruktioner Enkelt hantera i högnivåspråk (t ex C/C++) Kräver att vissa minnesadresser inte kan användas som vanligt minne Avkoda adressen, t ex Ibland avkodas inte signalen fullständigt => Samma enhet på flera adresser Datasignaler (värdet) skickas samma väg som data till/från minnet ; display finns på adress ; 65532, sensor på 65534 putdisplay: ; adress 2000 move D,65532 rts readsensor: ; adress 2200 move 65534,D rts

TSEA28 Datorteknik Y (och U), föreläsning 2, Kent Palmkvist 2017-01-17 39 Exempel avkodning minnesmappad I/O Vill ha en I/O-port på adress 0x1234 dvs 0001 0010 0011 0100 binärt Alternativ 1: fullständig avkodning Alla 16 bitarna måste undersökas Kräver stort logiskt nät för att avgöra om I/O-adress avser denna port Alternativ 2: Använd färre bitar (t ex strunta i de 4 sista bitarna) Porten hamnar på alla adresser 0x123x, dvs 0001 0010 0011 xxxx Skrivning på 0x1234 är samma som 0x1230 Går snabbare och tar mindre hårdvara att avkoda TSEA28 Datorteknik Y (och U), föreläsning 2, Kent Palmkvist 2017-01-17 40 Instruktioner så här långt Olika typer av instruktioner finns Flytta data move Beräkna nya värden (addera, jämför), påverka Z-flagga add, cmp Ändra instruktionsföljd (hopp) bne, beq, jmp, jsr, rts Eventuella speciella funktioner In, out

TSEA28 Datorteknik Y (och U), föreläsning 2, Kent Palmkvist 2017-01-17 41 Närmare beskrivning av olika move Många olika moveinstruktioner har angetts så här långt (samma mnemonic, olika typ) Move #värde,d Move adress,d Move D,adress Move #värde,sp Finns också instruktioner som liknar move Push D => move D,-(SP) ; minska SP med 1, flytta D till adress ; som nya värdet på SP registret pekar på Pop D => move (SP)+,D ; läs värde från minne på adress i SP, öka ; SP med 1. TSEA28 Datorteknik Y (och U), föreläsning 2, Kent Palmkvist 2017-01-17 42 Olika sätt att beskriva adressering Omedelbar (immediate, literal) move #värde, D ; argumentet är värdet Direkt move adress,d ; argumentet är adressen i minnet där värdet finns Indirekt med post increment pop D => move (SP)+,D ; adressen fås från ett register som sedan räknas ; upp med 1 Indirekt med predecrement push D => move D,-(SP) ; adressen fås från ett register som först räknas ned Offset move D,(SP+4) ; spara i minnet på adress som fås om 4 läggs till värdet i SP Många fler moder är möjliga (indirekt, register indirekt,...)

TSEA28 Datorteknik Y (och U), föreläsning 2, Kent Palmkvist 2017-01-17 43 Olika sätt att beskriva adressering Omedelbar (immediate, literal) move #värde, D ; argumentet är värdet Direkt move adress,d ; argumentet är adressen i minnet där värdet finns Indirekt med post increment pop D => move (SP)+,D ; adressen fås från ett register som sedan räknas ; upp med 1 Indirekt med predecrement push D => move D,-(SP) ; adressen fås från ett register som först räknas ned Offset move D,(SP+4) ; spara i minnet på adress som fås om 4 läggs till värdet i SP Många fler moder är möjliga (indirekt, register indirekt,...) TSEA28 Datorteknik Y (och U), föreläsning 2, Kent Palmkvist 2017-01-17 44 Olika sätt att beskriva adressering Omedelbar (immediate, literal) move #värde, D ; argumentet är värdet Direkt move adress,d ; argumentet är adressen i minnet där värdet finns Indirekt med post increment pop D => move (SP)+,D ; adressen fås från ett register som sedan räknas ; upp med 1 Indirekt med predecrement push D => move D,-(SP) ; adressen fås från ett register som först räknas ned Offset move D,(SP+4) ; spara i minnet på adress som fås om 4 läggs till värdet i SP Många fler moder är möjliga (indirekt, register indirekt,...)

www.liu.se