.include "m32def.inc" // Konstanty.equ N = 5 // Počet prvků v poli.equ PRVNI = 3 // První číslo v poli

Podobné dokumenty
Universita Pardubice Fakulta elektrotechniky a informatiky. Mikroprocesorová technika. Semestrální práce

8. Laboratoř: Aritmetika a řídicí struktury programu


Jako pomůcka jsou v pravém dolním rohu vypsány binární kódy čísel od 0 do 15 a binární kódy příkazů, které máme dispozici (obr.21). Obr.

ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE

Programování v jazyce C pro chemiky (C2160) 3. Příkaz switch, příkaz cyklu for, operátory ++ a --, pole

Princip funkce počítače

8. Cvičení Kopírování objektů mezi aplikacemi MS Office

Dynamická vícerozměrná pole. Základy programování 2 Tomáš Kühr

Operační systémy. Cvičení 3: Programování v C pod Unixem

PROGRAMOVÁNÍ MIKROPOČÍTAČŮ CVIČENÍ 10

Strojový kód. Instrukce počítače

Microsoft Excel kopírování vzorců, adresování, podmíněný formát. Mgr. Jan Veverka Střední odborná škola sociální Evangelická akademie

Obsah. Začínáme Viditelné součásti programu Simulace. WOP Menu CNC řízení. CNC Programy. Exec. Grafické okno. Strojní panel. 3D Model.

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

Programování v jazyce C pro chemiky (C2160) 4. Textové řetězce, zápis dat do souboru

POKLADNÍ DISPLEJ LCD. hotline: strana 1

Střední průmyslová škola a Vyšší odborná škola, Hrabákova 271, Příbram. III / 2 = Inovace a zkvalitnění výuky prostřednictvím ICT

Assembler RISC RISC MIPS. T.Mainzer, kiv.zcu.cz

Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

22. TVORBA UŽIVATELSKÝCH INSTRUKCÍ A MAKER

Projekt Využití ICT ve výuce na gymnáziích, registrační číslo projektu CZ.1.07/1.1.07/ MS Excel

Systém adresace paměti

2. Numerické výpočty. 1. Numerická derivace funkce

Čísla, reprezentace, zjednodušené výpočty

Řídicí struktury. alg3 1

9 Úprava maker Příklad 4 Word 2007/ VBA

Lekce 01 Úvod do algoritmizace

Pole a kolekce. v C#, Javě a C++

SW24x3 programovatelné relé

Přejmenování listu Dvakrát klepněte na pojmenování listu, napište nový název a potvrďte klávesu ENTER.

Vícerozměrná pole. Úvod do programování 2 Tomáš Kühr

Architektury CISC a RISC, uplatnění v personálních počítačích

VY_32_INOVACE_CTE_2.MA_19_Registry posuvné a kruhové. Střední odborná škola a Střední odborné učiliště, Dubno Ing. Miroslav Krýdl

Střední průmyslová škola a Vyšší odborná škola, Hrabákova 271, Příbram. III / 2 = Inovace a zkvalitnění výuky prostřednictvím ICT

PROGRAMOVÁNÍ MIKROPOČÍTAČŮ CVIČENÍ 2

Klimatizace. Třída: 4.C. Střední Průmyslová Škola Elektrotechnická Havířov Protokol do MIT. Skupina: 3. Zpráva číslo: 3

Struktura a architektura počítačů (BI-SAP) 11

Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince / 63

ISU Cvičení 3. Marta Čudová

Typy a použití klopných obvodů

Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include <stdio.h>

Střední průmyslová škola a Vyšší odborná škola, Hrabákova 271, Příbram. III / 2 = Inovace a zkvalitnění výuky prostřednictvím ICT

Algoritmy I, složitost

Základy programování (IZP)

Příjmení, jméno... Třída... Skupina...Počet bodů...

Vysoké učení technické v Brně Fakulta informačních technologií ITP Technika personálních počítačů Služby ROM BIOS a BootROM

Pointery II. Jan Hnilica Počítačové modelování 17

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

Programování v jazyce C pro chemiky (C2160) 5. Čtení dat ze souboru

Jazyk symbolických adres

Časové řady - Cvičení

Paměti a jejich organizace

Panel IPP. Ovladač řídící jednotka

II. Úlohy na vložené cykly a podprogramy

Imagine práce se seznamy (stručný manuál)

IUJCE 07/08 Přednáška č. 4. v paměti neexistuje. v paměti existuje

GEODETICKÉ VÝPOČTY I.

Funkce pokročilé možnosti. Úvod do programování 2 Tomáš Kühr

PROGRAMOVÁNÍ MIKROPOČÍTAČŮ CVIČENÍ 7

Struktura a architektura počítačů (BI-SAP) 7

Střední průmyslová škola a Vyšší odborná škola, Hrabákova 271, Příbram. III / 2 = Inovace a zkvalitnění výuky prostřednictvím ICT

3. přednáška. Obsah: Řídící struktury sekvence, if-else, switch, for, while, do-while. Zpracování posloupnosti

Instrukční sada pro používání ControlLogix a CompactLogix výňatek

Struktury a dynamická paměť

Programování PICAXE18M2 v Assembleru

INFORMATIKA základní úroveň obtížnosti

Pole a Funkce. Úvod do programování 1 Tomáš Kühr

Návod k aktualizaci firmwaru pro Web Server OZW672..., OZW772 a OCI670

Programování MCU ve vyšších programovacích jazycích

Klíčové pojmy: Cyklus, řídící proměnná, inicializace, test podmínky, přerušení cyklu, vnořování cyklů.

Úvod. Možnosti. Typ otázky r : Tuto možnost zvolte, pokud chcete převádět otázky s právě jednou správnou

Jak do počítače. aneb. Co je vlastně uvnitř

Zadání: TÉMA: Zápis algoritmu, čtení textového souboru, porovnání řetězců.

Správa souborů soubor, stromová struktura. Mgr. Jan Veverka Střední odborná škola sociální obor ošetřovatel

Proměnná. Datový typ. IAJCE Cvičení č. 3. Pojmenované místo v paměti sloužící pro uložení hodnoty.

Vprezentaci by mělo být zřetelných 7 dále uvedených bodů.

Střední průmyslová škola a Vyšší odborná škola, Hrabákova 271, Příbram. III / 2 = Inovace a zkvalitnění výuky prostřednictvím ICT

Procesor z pohledu programátora

Programování. řídících systémů v reálném čase. Střední odborná škola a Střední odborné učiliště - - Centrum Odborné přípravy Sezimovo Ústí

Konstruktory a destruktory

Digitální teploměr s LCD

Střední průmyslová škola a Vyšší odborná škola, Hrabákova 271, Příbram. III / 2 = Inovace a zkvalitnění výuky prostřednictvím ICT

Dělení pamětí Volatilní paměti Nevolatilní paměti. Miroslav Flídr Počítačové systémy LS /11- Západočeská univerzita v Plzni

Adresní mody procesoru

Seznámení s mikropočítačem. Architektura mikropočítače. Instrukce. Paměť. Čítače. Porovnání s AT89C2051

Formátové specifikace formátovací řetězce

Základní pojmy. Program: Algoritmus zapsaný v programovacím jazyce, který řeší nějaký konkrétní úkol. Jedná se o posloupnost instrukcí.

2. Cvičení Formáty dat, jednoduché vzorce

Paměťový podsystém počítače

Strojový kód k d a asembler procesoru MIPS SPIM. MIPS - prostředí NMS NMS. 32 ks 32bitových registrů ( adresa registru = 5 bitů).

a operačních systémů

Přehled příkazů pro CLI část aplikace Fits Header Modifier Jan Hlava

Střední odborná škola a Střední odborné učiliště, Hořovice

Popis funkcí a parametrů programu. Reliance External communicator. Verze 1.5.0

Základy programování (IZP)

Kurikulum počítačové gramotnosti pro žáky se speciálními vzdělávacími potřebami příloha ŠVP ( 2.stupeň ZŠ - 3.část )

ODBORNÝ VÝCVIK VE 3. TISÍCILETÍ. MEIII Paměti konstant

Transkript:

Příklad č. 1 Vytvořte v paměti RAM pole, umístěte jen v paměti SRAM od začátku, jeho velikost bude dána konstantou N. Pole naplňte, přičemž hodnota prvního prvku bude dána konstantou PRVNI, a další prvky budou mít hodnoty o 1 větší než předcházející. Registr používaný jako čítač v cyklech si pojmenujte count..equ N = 5 // Počet prvků v poli.equ PRVNI = 3 // První číslo v poli // Přejmenování registru // Pro uložení hodnot pro uložení do pole // Registr po počítání počtu cyklů pro naplnění celého pole v SRAM pole:.byte N // Pole o N prvcích // Vlastní program.org 0x0000 start: // Příprava cyklu // Inicializace řídící proměnné cyklu ldi temp, PRVNI // První prvek v poli // Uložení ukazatele na pole do X ldi XL, LOW(pole) ldi XH, HIGH(pole) initpole: // Plnění pole st X+, r17 // pole[i++] = temp inc temp // Další prvek v poli bude o 1 větší brne initpole

Příklad č. 2 Do předchozího příkladu doplňte druhé pole o stejné velikosti, přičemž do něj zkopírujte všechny prvky pole původního s tím, že ke všem prvkům přičtete hodnotu třetího prvku pole prvního, neboli: pole2[i] = pole1[i] + pole1[2], i = 0,1,... N přičtení hodnoty proveďte v registru, který si pojmenujte temp. Pro uložení prvku pole1[2] si pojmenujte registr např. pole1_2.equ N = 5 // Počet prvků v poli.equ PRVNI = 3 // První číslo v poli // Přejmenování registru // Pro uložení hodnot pro uložení do pole // Registr po počítání počtu cyklů pro naplnění celého pole.def pole_2 = r18 v SRAM pole:.byte N // Pole o N prvcích pole2:.byte N // Druhé pole se zkopírovanými prvky z pole + pole[2] // Vlastní program.org 0x0000 start: // Příprava cyklu // Inicializace řídící proměnné cyklu ldi temp, PRVNI // První prvek v poli // Uložení ukazatele na pole do X ldi XL, LOW(pole) ldi XH, HIGH(pole) initpole: // Plnění pole st X+, r17 // pole[i++] = temp inc temp // Další prvek v poli bude o 1 větší brne initpole // Konec cyklu // Příprava cyklu // Počet opakování cyklu > zkopírují se všechny prvky ldi ldi ldi ldi YL, LOW(pole) // Pro adresaci v pole YH, HIGH(pole) XL, LOW(pole2) // Pro adresaci v pole2 XH, HIGH(pole2) //Kopie pole[2] > r1 ldd pole_2, Y+2

kopiepoli: ld r0, Y+ // Aktuální pozice pole1 do r0, Y++ add r0, pole_2 // Sečtení r0 = r0 + pole_2 st X+, r0 // Uložení r0 na aktuální pozici v pole2 // Odečtení 1 od count brne kopiepoli // Je li count!= 0 skok na kopiepoli Příklad č. 3 Napište program, ve kterém do paměti ROM uložíte libovolný řetězec, a zkopírujte jej do RAM (tedy do pole). Řetězec umístěte na konec programu (za poslední instrukci).equ POCET_ZNAKU = 12 // Přejmenování registrů poleznaku:.byte POCET_ZNAKU start: // Uložení adresy na poleznaku do X ldi XL, LOW(poleZnaku) ldi XH, HIGH(poleZnaku) // Uložení adresy s prvním znakem v ROM (posunutý o 1 doleva, b0 = 0) ldi ZL, LOW(retezec << 1) ldi ZH, HIGH(retezec << 1) // Inicializace řídící proměnné ldi count, POCET_ZNAKU // Cyklus pro uložení znaků z ROM do SRAM // Vložení aktuálního byte z ROM do temp, Z se o 1 zvýší // b0 v Z bude nejprve 0, po přičtení 1 bude b0 = 1 ostatní bity se nezmění // po druhém přičtení 1 k Z, bude b0 = 0 a k ostatním bitům se přište 1 // Jinak se nejprve načte první byte z ROM, pak druhý, poté se přesune na // další řádek v ROM atd.... lpm temp, Z+ st X+, temp // Uložení temp do X, X se o 1 zvýší // Snížení count o 1 brne cyklus // Pokud se count!= 0 skok na cyklus // Uložení řetězce "Pozdrav vsem" do ROM. První byte = 'P', atd.... retezec:.db "Pozdrav vsem"

Příklad č. 4 Modifikujte předchozí program tak, aby byl řetězec umístěn v ROM od adresy 0x100.equ POCET_ZNAKU = 12 // Přejmenování registrů poleznaku:.byte POCET_ZNAKU start: // Uložení adresy na poleznaku do X ldi XL, LOW(poleZnaku) ldi XH, HIGH(poleZnaku) // Uložení adresy s prvním znakem v ROM (posunutý o 1 doleva, b0 = 0) ldi ZL, LOW(retezec << 1) ldi ZH, HIGH(retezec << 1) // Inicializace řídící proměnné ldi count, POCET_ZNAKU // Cyklus pro uložení znaků z ROM do SRAM // Vložení aktuálního byte z ROM do temp, Z se o 1 zvýší // b0 v Z bude nejprve 0, po přičtení 1 bude b0 = 1 ostatní bity se nezmění // po druhém přičtení 1 k Z, bude b0 = 0 a k ostatním bitům se přište 1 // Jinak se nejprve načte první byte z ROM, pak druhý, poté se přesune na // další řádek v ROM atd.... lpm temp, Z+ st X+, temp // Uložení temp do X, X se o 1 zvýší // Snížení count o 1 brne cyklus // Pokud se count!= 0 skok na cyklus // Uložení řetězce "Pozdrav vsem" do ROM. První byte = 'P', atd.....org 0x100 // Nastavení čítače adresy na 0x100 retezec:.db "Pozdrav vsem"

DCV č. 1 upravte příklad č. 2 tak, že hodnoty do pole2 budou kopírovány od konce, tedy pole2[n-i] = pole1[i] + pole1[2], i = 0,1,... N.equ N = 10.equ PRVNI = 22 // Přejmenování registrů.def pole1_2 = r18 pole1:.byte N pole2:.byte N // Uložení první adresy pole1 do X // Inicializace řídící proměnné cyklu // Inicializace proměnné pro plnění pole ldi temp, PRVNI // Cyklus pro naplnění pole1 PRVNI, PRVNI+1,... // Vložení temp na aktuální pozici v pole1, X se o jednu zvýší st X+, temp inc temp // temp se o 1 zvýší // count se o 1 sníží brne cyklus // Pokud se count!= 0 skok na cyklus // Inicializace řídící proměnné cyklu // Adresa pole1 do Y ldi YL, LOW(pole1) ldi YH, HIGH(pole1) // První adresa za posledním prvkem v pole2 do X ldi XL, LOW(pole2+N) ldi XH, HIGH(pole2+N) // Pomocí adresování s offsetem uložíme do pole1_2 = Y[2] (= pole1[2]) ldd pole1_2, Y+2 // Cyklus pro kopie do pole2 kopiepole2: // Do temp se uloží aktuální pozice v pole1, Y se o 1 zvýší ld temp, Y+ // Sečtení temp = temp + pole1_2 add temp, pole1_2

// X se o jednu sníží, poté se na tuto novou pozici uloží temp // Před cyklem se do X uložila adresa za pole2, ale protože se X nejprve // sníží, pole1[0] se uloží na poslední pozici pole2 (pole2[n 1]) st X, temp // count se o 1 sníží // Pokud se count!= 0 skok na kopiepole2 brne kopiepole2 DCV č. 2 Výpočet v předchozím programu upravte podle následujícího předpisu: pole2[n-i] = pole1[i] + pole2[k], i = 0,1,... N kde K je konstanta známá v době psaní programu (.equ).equ N = 10.equ PRVNI = 22.equ K = 3 // Nové pojmenování registrů.def pole2_k = r18 pole1:.byte N pole2:.byte N // Uložení ukazatele na pole1 do X // Naplnění řídící proměnné cyklu // Inicialicaze proměnné pro plnění pole ldi temp, PRVNI // Cyklus pro naplnění pole1 hodnotami PRVNI, PRVNI+1, atd.... // Uložení temp na aktuální pozici v poli1 st X+, temp // Zvýšení temp o 1 inc temp // Zmenšení count o 1 // Není li temp roven 0 skok na cyklus brne cyklus

// Naplnění řídící proměnné cyklu // Uložení první adresy pole1 do X // Uložení první adresy za pole2 do Y ldi YL, LOW(pole2+N) ldi YH, HIGH(pole2+N) // Načtení pole2[k] do pole2_k // K první adrese pole2 si překladač přičte K, výsledek bude adresa pole2[k] lds pole2_k, pole2+k // Kopie do pole2 kopiepole1: // Načtení aktuálního prvku v pole1 do temp, ukzatel se o 1 zvýší ld temp, X+ // Seštení temp = temp + pole2_k add temp, pole2_k // Snížení ukazatele ne pole2 o 1 a na tuto novou pozici se uloží temp // Před cyklem je do Y vložena adresa o 1 vyšší než se poslední prvek v pole2, // protože se Y nejdříve o 1 sníží, tím se dostane na poslední prvek v pole2 st Y, temp // Odečtení 1 od count // Není li count roven 0 skok na kopiepole1 brne kopiepole1 DCV č. 3 Do předchozího programu doplňte výpočet součtu všech prvků obou polí dohromady. Výsledek uložte do zvláštní proměnné..equ N = 10.equ PRVNI = 1.equ K = 3 // Nové pojmenování registrů.def pole2_k = r18.def soucet = r19 pole1:.byte N pole2:.byte N soucetprom:.byte 1

// Uložení ukazatele na pole1 do X // Naplnění řídící proměnné cyklu ldi soucet, 0 // Inicialicaze proměnné pro plnění pole ldi temp, PRVNI // Cyklus pro naplnění pole1 hodnotami PRVNI, PRVNI+1, atd.... // Uložení temp na aktuální pozici v poli1 st X+, temp add soucet, temp // Přičtení k soucet temp (soucet += pole1[count]) inc temp // Zvýšení temp o 1 // Zmenšení count o 1 brne cyklus // Není li temp roven 0 skok na cyklus // Naplnění řídící proměnné cyklu // Uložení první adresy pole1 do X // Uložení první adresy za pole2 do Y ldi YL, LOW(pole2+N) ldi YH, HIGH(pole2+N) // Načtení pole2[k] do pole2_k // K první adrese pole2 si překladač přičte K, výsledek bude adrese pole2[k] lds pole2_k, pole2+k // Kopie do pole2 kopiepole2: // Načtení aktuálního prvku v pole1 do temp, ukzatel se o 1 zvýší ld temp, X+ add temp, pole2_k // Sečtení temp = temp + pole2_k // Sečtení soucet s temp (soucet += pole1[count] + pole2[k]) add soucet, temp // Snížení ukazatele ne pole2 o 1 a na tuto novou pozici se uloží temp // Před cyklem je do Y vložena adresa o 1 vyšší než se poslední prvek v pole2, // protože se Y nejdříve o 1 sníží, tím se dostane na poslední prvek v pole2 st Y, temp // Odečtení 1 od count // Není li count roven 0 skok na kopiepole2 brne kopiepole2 // Uložení výsledného součtu do proměnné soucetprom sts soucetprom, soucet