CPU. Carry/Borrow IX. Programräknare

Relevanta dokument
I denna laboration undersöker vi hur aritmetiska beräkningar utförs. Vi tittar på olika variabeltyper: 8-bitars, 16-bitars, 32-bitars och flyttal.

Datorteknik 2 (AVR 2)

Digital- och datorteknik

PC-teknik, 5 p LABORATION ASSEMBLERINTRODUKTION

Lågnivåprogrammering. Föreläsning 2 Lågnivåprogrammering. Binära tal. En enkel modell av datorns inre

Besvara de elektroniska frågorna (se kurshemsidan). Läs kapitel i kursbok.

Per Holm Lågnivåprogrammering 2014/15 24 / 177. int och double = = 2, 147, 483, 647

Extrauppgifter för CPU12

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

Att använda pekare i. C-kod

LEU240 Mikrodatorsystem

Lösningar till tentamen i EIT070 Datorteknik

Digital- och datorteknik

Digital- och datorteknik

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

CE_O3. Nios II. Inför lab nios2time

AVR 3 - datorteknik. Avbrott. Digitala system 15 hp. Förberedelser

CE_O5. Cacheminne. Hemlaboration 2.

Laboration 2 i Datorteknik- Assemblerprogrammering II

Digital- och datorteknik

Lösningar till tentamen i EIT070 Datorteknik

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

Besvara de elektroniska frågorna (se kurshemsidan). Läs kapitel i kursbok

Kontrollskrivning Mikrodatorteknik CDT S2-704

TENTAMEN. Datorteknik. D1/E1/Mek1/Ö Hjälpmedel: Häfte "ARM-instruktioner", A4-format, 17 sidor. Maxpoäng:

Datorteknik 1 (AVR 1)

F5: Högnivåprogrammering

F5: Högnivåprogrammering

Assemblerprogrammering del 1

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:

Programmering av inbyggda system. Kodningskonventioner. Viktor Kämpe

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

Programmering i maskinspråk (Maskinassemblering)

Bygg och programmera med enchipsdatorn 68HC11

CE_O1. Nios II. Enkla assembler-instruktioner.

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

Programexempel för FLEX

Ansvarig lärare: Olof Andersson, Telefon (besöker skrivsalen)

Övning1 Datorteknik, HH vt12 - Talsystem, logik, minne, instruktioner, assembler

LABORATION DATORTEKNIK D. Pipelining. Namn och personnummer. Version: (OS,OVA,AN)

Föreläsning 6 pekare och pekare tillsammans med arrayer

Övning2 Datorteknik, HH vt12 - Programmering

AVR 5. Styrning av trafikljus. Digitala system 15 p

TDIU01 - Programmering i C++, grundkurs

Studera databladen för LCD på sid 4, 5, 7, 8, 14, 18, 19, 20 och 23. Datablad finns på kurshemsidan.

Grunderna i stegkodsprogrammering

Programmering i maskinspråk (Maskinassemblering)

LABORATION. Datorteknik Y

Instruktion för laboration 1

Assemblerprogrammering del 3

Reducerad INSTRUKTIONSLISTA för FLIS-processorn

Laboration 4: Knappstuds Drivrutiner för att eliminera störningar.

Centralenheten: ALU, dataväg och minne

Föreläsning 1: Intro till kursen och programmering

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.

LV6 LV7. Aktivera Kursens mål:

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

LABORATION. Datorteknik Y

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

Drivrutiner för att hantera teckenfönster.

Grundläggande C-programmering del 2 Pekare och Arrayer. Ulf Assarsson

Tentamen den 18 mars svar Datorteknik, EIT070

En Von Neumann-arkitektur ( Von Neumann-principen i föreläsning 1) innebär:

Föreläsningsanteckningar 3. Mikroprogrammering II

Ulf Assarsson. Grundläggande C-programmering del 2 Pekare och Arrayer. Läromoment:

Datorteknik Övningsuppgifter

Grundläggande C-programmering del 2 Pekare och Arrayer. Ulf Assarsson

Lösningsförslag tenta

Supportdokument Maila fil från PLC:n Synpunkter, felaktigheter, önskemål etc. för dokumentet meddel as Fil: Malthe_Suppo_Maila fil.

Tentamen. Datorteknik Y, TSEA28

Laborationens mål är att få displayen att visa timmar, minuter och sekunder samt att kunna ställa klockan.

Programallokering. Programtyper. Att placera program i flashrespektive. Program i FLASH-minne. Program i RAM-minne

Instruktion för laboration 1

LABORATION. Datorkonstruktion D

Tentamen den 14 januari 2015 Datorarkitekturer med operativsystem, EDT621, 7,5 poäng

Digitalteknik EIT020. Lecture 15: Design av digitala kretsar

Föreläsning 1: Intro till kursen och programmering

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

Projektlaboration 4, synkronisering av klockan

Assemblerprogrammering

Laboration 5. Temperaturmätning med analog givare. Tekniska gränssnitt 7,5 p. Förutsättningar: Uppgift: Temperatur:+22 C

ALU:n ska anslutas hur då?

A-del motsvarande KS1

Föreläsning 2. Operativsystem och programmering

Grundläggande datavetenskap, 4p

Extramaterial till Matematik Y

Assemblerprogrammering del 2

[] Arrayer = Indexerad variabel

Ladda upp filer fra n PLC till PC

Stack och subrutiner Programmeringskonventionen

LABORATION. Datorteknik Y

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

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

Övning 6. Parallellport, timer

LABORATION. Datorteknik Y Datorkonstruktion D

Laboration nr2 med enchipsdatorn PIC-16F877

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

Exempeltentamen Datorteknik, EIT070,

Transkript:

Laboration:. Jämförelser mellan assembler och C. CPU ACCA ACCD ACCB 8-bitars ackumulatorer eller 16- bitars ackumulator CCR 1 1 1 SXH I NZVC Flaggregister Carry/Borrow IX IY PC Indexregister X Indexregister Y Overflow Zero Negative I-interrupt mask Halfcarry (from bit 3) X-interrupt mask STOP disable Programräknare SP Stackpekare I denna laboration ska vi se hur datorns CPU används för att göra enkla datamanipuleringar och enkla beräkningar. För assemblerprogrammeraren ingår CPU:n i det som brukar kallas programmerarmodellen. För att skriva program i assembler måste man ha goda kunskaper i hur och flaggor används. Om man använder högnivåspråk befrias man däremot från att känna till alla dessa detaljer. Det är kompilatortillverkaren som får sitta inne med dessa kunskaper. Men vid exempelvis felsökning är det viktigt att förstå hur ett program använder de olika registren. I laborationen ska vi se på några enkla programexempel som använder. Vi ska också se hur man med högnivåspråket C utför motsvarande uppgifter och hur kompilatorn utnyttjar CPU:n. Stefan Nyman, MICRONYM

Förberedelser: Alla uppgifter i denna laboration kan du lösa med hjälp av kompendiet Bygg och programmera. Speciellt läsvärt är kapitel 2 och 3. Använd också gärna databoken HC11 M68HC11E Family, Technical Data. Alla åtta förberedelseuppgifter ska vara gjorda vid laborationens början. Vissa av laborationsuppgifterna kan också göras i förväg. Uppgifter: Ta reda på följande: 1. Vilken assemblerinstruktion används för att lägga ett visst värde i ackumulator A?.. 2. Vilken instruktion kopierar värdet i ackumulator B till ackumulator A?.. 3. Hur kan man multiplicera innehållet i en ackumulator med 2?.. 4. Med vilken instruktion kan man beräkna skillnaden mellan värdena i ackumulatorerna?.. 5. Vad menas med indexerad adressering?... 6. Med vilken instruktion kan man addera ett 8-bitarstal med ett 16-bitarstal?... 7. Vad har flaggregistrets Z-flagga för funktion?... 8. Vad är skillnaden mellan instruktionerna ldx #$5 och ldx $5?... 2

Laborationsuppgifter: Uppgift 1. Ackumulatorer. Öppna projektet Uppgift1.prj. Skriv ett assemblerprogram i filen CPU1.s07 som utför följande i en oändlig loop: Lägg talet 5 i ackumulator A. Kopiera det till ackumulator B. Multiplicera det ena med 4 och det andra med 2. Detta går att göra utan att använda multiplikationsinstruktion! Addera talen! Avsluta med instruktionen: staa $1004 Kör programmet i full fart. Vad blir resultatet av additionen? Stoppa programmet. Öppna fönstret som visar och följ vad som händer när du stegar instruktion för instruktion. Starta från början. Vilka register förändras under programmets gång? Ovanför flaggregistret står det SXHINZVC. Vad betyder Z och C? Lägg in en instruktion i programmet så att Z ettställs! Lägg in en instruktion i programmet så att C ettställs! 3

Uppgift 2. Läs ur minnet med indexregister. Använd det färdiga projektet Uppgift2.prj. Komplettera CPU2.s07 med ett program som gör följande: Läs av vilka värden som ligger i området $0000-$0007. Använd X-registret för att peka ut värdena. Varje värde ska i tur och ordning skrivas på adress $1004. När programmet skrivit ut det sista värdet ska det stoppa. Stega igenom programmet och iaktta vad varje instruktion gör. Vilka värden ligger på adresserna 0000-0007? Varför? Använd debuggerns Memory Window för att ändra på några värden. Stega från början igen och följ förändringarna i flaggregistret! Kan du se om någon instruktion påverkar Z-flaggan? I så fall vilken? Vilka övriga instruktioner i programmet påverkar Z-flaggan? Förklara vad assemblerdirektivet FCB betyder. 4

Uppgift 3. Läs ur minnet C-program. När man skriver program i högnivåspråk är det mycket osannolikt att man vill eller behöver känna till de verkliga adresserna till en dataarea. I exemplet i uppgift 2 kunde man ju också använda namnet före datafältet, så man kunde nå det utan att referera till absolutadresser. Utgå från projektet med namnet Uppgift3.prj. Det innehåller två filer, CPU2.c och cstartup.s07. Komplettera while-satsen och resten av huvudprogrammet. Ladda ner och stega igenom så att du får alla siffrorna i tur och ordning på displayen. Öppna följande fönster: Register window, Memory window och Watch window. På vilken adress ligger variabeln i? Studera noga hur kompilatorn hanterar fält och index. Denna kompilator använder också register X för att nå ett speciellt element i fältet. Med hjälp av indexvärdet i och startadressen för fältet data beräknas adressen med fem instruktioner. Vilka är det?... Ändra fältdeklarationen till const unsigned char data[] = {10,20,30,40,50,60,70,80}; På vilken adress ligger nu variabeln i och var finns fältet med 8 värden? Nu beräknas adressen i X på ett annat sätt. Vilka instruktioner gör detta?... Ändra i programmet så att i blir en 16-bitarsvariabel. Hur beräknas nu adressen i X?... 5

Uppgift 4. Beräkning av medelvärde. Utgå från uppgift 3. 1. Spar projektet med nytt namn: Uppgift4.prj. 2. Spar CPU2.c med nytt namn: medel.c. 3. Byt ut under Projekt/Files: CPU2.c medel.c. Skriv om huvudprogrammet så att det beräknar medelvärdet av de åtta talen som ligger i fältet data. Du kan behöva en variabel för summan. Provkör och titta på assemblerkoden. Hur utförs divisionen i medelvärdesuträkningen?... Lägg till ett nionde element till fältet och beräkna medelvärdet på de nio. Hur utförs nu divisionen?... Ta bort ett element i fältet; d.v.s. återställ fältets storlek till 8 platser. Låt fortfarande medelvärdet beräknas som om det hade nio element. Vad händer?... Det finns anledning att varna för att C-språket inte är så säkert att hantera. Man måste noga kolla index och gränser och framför allt inte glömma att det första elementet i ett fält har nr 0! Uppgift 5. Beräkning av medelvärde i assembler. Skriv ett program i assembler som beräknar medelvärdet av nio tal som ligger fr.o.m. adress $0000. Skapa ett projekt Uppgift5.prj och en assemblerfil, medel.s07. Utgå från samma dataarea som i uppgift 2.... 6

Uppgift 6. Talcirkeln. Nytt projekt: Uppgift6.prj med assemblerfilen talcirkel.s07. Stega detta omfattande program och notera när flaggorna N, Z, V och C ändrar värde. Vilken av flaggorna ändrar sig inte?... Instruktionen inca kan bytas ut mot en annan utan att programmets funktion förändras, men så att alla fyra flaggor påverkas. Vilken instruktion gör samma jobb som inca?... Byt ut inca mot denna instruktion och fyll i nedanstående: N ettställs när ackumulator A ändrar värde från... till... N nollställs när ackumulator A ändrar värde från... till... Z ettställs när ackumulator A ändrar värde från... till... Z nollställs när ackumulator A ändrar värde från... till... V ettställs när ackumulator A ändrar värde från... till... V nollställs när ackumulator A ändrar värde från... till... C ettställs när ackumulator A ändrar värde från... till... C nollställs när ackumulator A ändrar värde från... till...... Ytterligare en flagga ändras lite då och då. Vilken? Varför?... 7