Kompendium - Datorteknik
Kompendium - Datorteknik Kompendium - Datorteknik
F.1.5Indexerad adresseringsmod.Vi tar en närmare titt på denna viktiga adresseringsmod. Vi behöver först någrahjälpinstruktioner, som manipulerar XR.Mnemonic Beskrivning Funktion FlaggorLDX A Load XR XR = M(A), M(A + 1) Z,NSTX A Store XR M(A), M(A + 1) = XRINX Increment XR XR = XR + 1 C,V,Z,NDEX Decrement XR XR = XR − 1 C,V,Z,NFigur F.4: Instruktioner för hantering av indexregistret XR.Vi illustrerar indexering med ett programexempel. I minnet, med början påadress 20, finns en tabell med 8 st tal utan tecken. Bilda summan av dessa. Vi antarnu att talen är så små att inte carry kan uppstå!; min första indexeringSTART: CLRA ; summa=0LDX #7 ; loopräknare=7LOOP: ADDA (XR)20 ; addera ett talDEX; minska loopräknarenJMPP LOOP ; tal kvar?SLUT: JMP SLUTNågra kommentarer till ovanstående program:• Lägg märke till kommentarerna. De måste ge något som inte kan utläsas frånopkoderna. Det är strängt förbjudet att kommentera den första raden med nnollställackumulatorn”, det framgår ju av CLRA.• Bakåthoppet måste gå till rätt rad. Om vi hoppar tillbaka till LDX #7 fastnarvi i en oändlig loop.• Vi gör alltså additionen för XR = 7, 6, · · · , 0, det blir 8 gånger. När XR =−1, ska vi hoppa ur loopen, dvs fortsätta rakt nedåt. Här är det alltså viktigtatt välja rätt hoppvillkor, alltså hoppa om positivt N = 0. Vi inser nu att vibehöver 4 nya hoppinstruktioner, som testar på om resp. flagga är noll. AlltsåJMPNC, JMPNV, JMPNZ och JMPP.F.2 Subrutiner.Vi blev så nöjda med medelvärdesexemplet att vi skulle vilja använda det på flerställen i ett större program. Vi vill nu göra om programmet till en generell subrutin.Vi tänker oss att de tre talen ligger efter varandra på godtyckligt ställe i minnet.71
Adressen till det första talet är en inparameter till subrutinen. Så här kan det nu seut:START: LDS #FARAWAY ; måste göras, annars ......LDX TP1 ; beräkna ett medelvärdeMV1: JSR MEAN...LDX TP2 ; beräkna ett annat medelvärdeMV2: JSR MEAN...SLUT: JMP SLUT;; min första subrutin; IN: XR pekar på talenMEAN : LDA (XR) ; hämta första operandenADDA (XR)1 ; lägg till den andraJMPV SPILL ; spill?ASRA ; dela med 2JSR HITSPILL: ASRA ; dela med 2ADDA #80 ; kompensera genom att flippa MSBHIT: STA (XR)2 ; lagra medelvärdetRTSLåt oss följa gången i programmet. Vi lägger adressen i XR och hoppar tillsubrutinen med JSR, jump to subroutine. Subrutinen gör vad den ska. I botten påsubrutinen sker ett återhopp, RTS, return from subroutine, till instruktionen eftersubrutinhoppet. Huvudprogrammet gör något med detta medelvärde (får vi väl anta).Sedan kommer ett nytt subrutinanrop. Lägg nu märke till att återhoppet inte gårtill samma ställe som det förra återhoppet. Innan vi ger oss på att förklara hur dettagår till, konstaterar vi att programmet fungerar precis som om vi hade kopieratin subrutinen istället för de två JSR. Att låta assemblatorn kopiera in en rutin därden ska vara kallas för makro(assemblering). Att använda makron ger längre mensnabbare kod.Vi behöver förstås några nya instruktioner:Instruktionerna i fig. F.5 är alltså ganska komplexa. Återhoppsadressen måstesparas i minnet för att RTS ska hitta tillbaka. Detta ställe i minnet kallas för stackenoch pekas ut av stackpekaren. Stacken är en datastruktur av typen LIFO = lastin first out. Denna konstruktion gör att rekursion är möjlig, dvs en subrutin kansubrutinhoppa till sig själv, bara man får stopp på eländet. Observera noga vadJSR gör: 1) stackpekaren räknas ner 2) återhoppsadressen sparas på stacken och3) hoppet sker. RTS gör alltihop i omvänd ordning: 1) återhopp till den adress somfinns på toppen av stacken och 2) räkna upp stackpekaren.72
- Page 21 and 22: WITH sel SELECTy
- Page 23 and 24: ELSE -- x är 1!CASE q ISWHEN "00"
- Page 25 and 26: • klockan får inte förekomma n
- Page 27 and 28: Kapitel 2Utvecklingsverktyget ISEVi
- Page 29 and 30: Tryck därefter next och sedan på
- Page 31 and 32: TIE | 739 | TIETIE | 838 | countTIE
- Page 33 and 34: END testbench;ARCHITECTURE behavior
- Page 35 and 36: uut: counter PORT MAP(clk => clk,co
- Page 37 and 38: esetHexa−decimalttangentbord4PNR4
- Page 39 and 40: clkrstKBstrobekbSEPREG1X2dvar210-r
- Page 41 and 42: p
- Page 43 and 44: 3.5 SimuleringVi avslutar detta exe
- Page 45 and 46: Kapitel 4Laborationsuppgift:IR-mott
- Page 47 and 48: IR−mottagareCPLDKlock−modulFigu
- Page 49: Bilaga AKopplingsschemanA.1 Blocksc
- Page 52 and 53: knapp
- Page 54 and 55: u : OUT std_logic_vector(3 downto 0
- Page 56 and 57: Bilaga CProjektkatalog för DK/IT 2
- Page 58 and 59: ör ha en upplösning av minst 256x
- Page 60 and 61: Mätinstrument och liknandeDigitalu
- Page 62 and 63: Bilaga DVirteknikAll konstruktion i
- Page 64 and 65: Bilaga ELogikanalysatorn HP54620ABr
- Page 66 and 67: hexadecimal form genom att trycka p
- Page 68 and 69: ARCCRPCXRSPProcessorc v zN$0000$000
- Page 70 and 71: JMPV SPILL ; spill?ASRA ; dela med
- Page 74 and 75: Mnemonic Beskrivning Funktion Flagg
- Page 76 and 77: M Adresseringsmod EA3 bitar0 absolu
- Page 78 and 79: START80: 0 0 0 0 0 0 0 11: 0 0 0 0
- Page 80 and 81: Adress Signaler Funktion Kommentar0
- Page 82 and 83: F.4.2ALU-enhetenVi fortsätter med
- Page 84 and 85: end component;--component aluport(c
- Page 86 and 87: -- läsningd
- Page 88 and 89: Figur F.12: Ett exempel på simuler
- Page 90: Litteraturförteckning[1] Roos O. (
Adressen till det första talet är en inparameter till subrutinen. Så här kan det nu seut:START: LDS #FARAWAY ; måste göras, annars ......LDX TP1 ; beräkna ett medelvärdeMV1: JSR MEAN...LDX TP2 ; beräkna ett annat medelvärdeMV2: JSR MEAN...SLUT: JMP SLUT;; min första subrutin; IN: XR pekar på talenMEAN : LDA (XR) ; hämta första operandenADDA (XR)1 ; lägg till den andraJMPV SPILL ; spill?ASRA ; dela med 2JSR HITSPILL: ASRA ; dela med 2ADDA #80 ; kompensera genom att flippa MSBHIT: STA (XR)2 ; lagra medelvärdetRTSLåt oss följa gången i programmet. Vi lägger adressen i XR och hoppar tillsubrutinen med JSR, jump to subroutine. Subrutinen gör vad den ska. I botten påsubrutinen sker ett återhopp, RTS, return from subroutine, till instruktionen eftersubrutinhoppet. Huvudprogrammet gör något med detta medelvärde (får vi väl anta).Sedan kommer ett nytt subrutinanrop. Lägg nu märke till att återhoppet inte gårtill samma ställe som det förra återhoppet. Innan vi ger oss på att förklara hur dettagår till, konstaterar vi att programmet fungerar precis som om vi hade kopieratin subrutinen istället för de två JSR. Att låta assemblatorn kopiera in en rutin därden ska vara kallas för makro(assemblering). Att använda makron ger längre mensnabbare kod.Vi behöver förstås några nya instruktioner:Instruktionerna i fig. F.5 är alltså ganska komplexa. Återhoppsadressen måstesparas i minnet för att RTS ska hitta tillbaka. Detta ställe i minnet kallas för stackenoch pekas ut av stackpekaren. Stacken är en datastruktur av typen LIFO = lastin first out. Denna konstruktion gör att rekursion är möjlig, dvs en subrutin kansubrutinhoppa till sig själv, bara man får stopp på eländet. Observera noga vadJSR gör: 1) stackpekaren räknas ner 2) återhoppsadressen sparas på stacken och3) hoppet sker. RTS gör alltihop i omvänd ordning: 1) återhopp till den adress somfinns på toppen av stacken och 2) räkna upp stackpekaren.72