+ All Categories
Home > Documents > 8. Laborato ř: Aritmetika a řídicí struktury programu · PDF filePrezentace:...

8. Laborato ř: Aritmetika a řídicí struktury programu · PDF filePrezentace:...

Date post: 05-Feb-2018
Category:
Upload: dinhxuyen
View: 218 times
Download: 1 times
Share this document with a friend
6
©Hana Kubátová, Martin Novotn 8. Laboratoř: A programu Programy v JSA – aritmetik Navrhněte a simulujte v AVR sčítání, odčítání, aritmetický p Využijte instrukce ADD, ADC Architektura mikro AVR Studio Prezentace: sap-avr2.pdf Kompletní instrukční sadu (an Bodované úlohy: Úkol 1: Spočítejte následu R20 = (4 * R16 + 3 * R17 - R1 LDI R16, 5 LDI R17, 10 LDI R18, 58 ... doplňte instrukce ... Operandy jsou 8-bitové bitové. Výraz by měl být spoč bitových registrů), prog Úkol 2: Napište program, soustavě Použijte knihovny pro Použijte instrukce pro p Použijte porovnání a sč ‘0’ je 48) Úkol 3: Napište program, informaci o správnosti vý čísla považujte jednak doplňkovém kódu FIT, ČVUT v Praze Aritmetika a řídicí str ka, posuvy, využití příznaků studiu prográmky pro 24 bitovou (32 bitovou posuv vpravo, vlevo, násobení malou konstant C, SUB, SBB, podmíněné skoky. Pracujte s re opočítače AVR, vývojové pro nglicky) najdete v odkazech . Viz též přehled i ující výraz 18) / 8 . é, výsledek 8-bitový, veškeré mezivýsledky u čítán správně. Pokud nelze výraz správně spo gram by měl toto indikovat (např. nastavením , který zobrazí na displeji zadané číslo práci s displejem z minulého cvičení. posuv a maskování, abyste dostali jednu šestn čítání, abyste z číslice vytvořili ASCII znak (k , který sečte dvě 32 bitová čísla a zobr ýsledku za čísla nezáporná (bez znaménka) a jednak z ruktury u) aritmetiku: tou (2 až 5). egistry. ostředí instrukcí (česky) udržujte také 8- očítat (s použitím 8- m V flagu). o v šestnáctkové náctkovou číslici (kód ‘A’ je 65, kód razí na displeji za čísla v
Transcript
Page 1: 8. Laborato ř: Aritmetika a řídicí struktury programu · PDF filePrezentace: sap-avr2.pdf Kompletní instruk ční sadu (anglicky) najdete v ... add r2, r3 sts 0x123, r5 ldi r16,

©Hana Kubátová, Martin Novotný

8. Laboratoř: Aritmetika a programu Programy v JSA – aritmetika, posuvy, využití p

Navrhněte a simulujte v AVR studiu prográmky pro 24 bitovou (32 bitovou) aritmetiku: sčítání, odčítání, aritmetický posuv vpravo, vlevo, násobení malou konstantou (2 až 5). Využijte instrukce ADD, ADC, SUB, SBB, podmín

Archi tektura mikropoAVR Studio

Prezentace: sap-avr2.pdf

Kompletní instrukční sadu (anglicky) najdete v

Bodované úlohy:

Úkol 1: Spočítejte následující výraz

R20 = (4 * R16 + 3 * R17 - R18) / 8

LDI R16, 5 LDI R17, 10 LDI R18, 58 ... dopl ňte instrukce ...

• Operandy jsou 8-bitové, výsledek 8bitové.

• Výraz by měl být spočítán bitových registrů), program by m

Úkol 2: Napište program, který zobrazí na displeji zadané soustavě

• Použijte knihovny pro práci s displejem z minulého cvi• Použijte instrukce pro posuv a masko• Použijte porovnání a sč

‘0’ je 48)

Úkol 3: Napište program, který seinformaci o správnosti výsl

• čísla považujte jednak za doplňkovém kódu

©Hana Kubátová, Martin Novotný FIT, ČVUT v Praze

ř: Aritmetika a řídicí struktury

aritmetika, posuvy, využití příznaků

te a simulujte v AVR studiu prográmky pro 24 bitovou (32 bitovou) aritmetiku: ítání, aritmetický posuv vpravo, vlevo, násobení malou konstantou (2 až 5).

Využijte instrukce ADD, ADC, SUB, SBB, podmíněné skoky. Pracujte s registry.

tektura mikropo čítače AVR, vývojové prost

(anglicky) najdete v odkazech. Viz též přehled instrukcí

ítejte následující výraz

R18) / 8

te instrukce ...

bitové, výsledek 8-bitový, veškeré mezivýsledky udržujte také 8

l být spočítán správně. Pokud nelze výraz správně spoč), program by měl toto indikovat (např. nastavením

Úkol 2: Napište program, který zobrazí na displeji zadané číslo v šestnáctkové

Použijte knihovny pro práci s displejem z minulého cvičení. Použijte instrukce pro posuv a maskování, abyste dostali jednu šestnáctkovou Použijte porovnání a sčítání, abyste z číslice vytvořili ASCII znak (kód ‘A’ je 65, kód

Úkol 3: Napište program, který sečte dvě 32 bitová čísla a zobrazí na displeji informaci o správnosti výsledku

ísla považujte jednak za čísla nezáporná (bez znaménka) a jednak za

ídicí struktury

te a simulujte v AVR studiu prográmky pro 24 bitovou (32 bitovou) aritmetiku: ítání, aritmetický posuv vpravo, vlevo, násobení malou konstantou (2 až 5).

né skoky. Pracujte s registry.

e AVR, vývojové prostředí

ehled instrukcí (česky)

bitový, veškeré mezivýsledky udržujte také 8-

ě spočítat (s použitím 8-. nastavením V flagu).

číslo v šestnáctkové

vání, abyste dostali jednu šestnáctkovou číslici ili ASCII znak (kód ‘A’ je 65, kód

ísla a zobrazí na displeji

ísla nezáporná (bez znaménka) a jednak za čísla v

Page 2: 8. Laborato ř: Aritmetika a řídicí struktury programu · PDF filePrezentace: sap-avr2.pdf Kompletní instruk ční sadu (anglicky) najdete v ... add r2, r3 sts 0x123, r5 ldi r16,

©Hana Kubátová, Martin Novotný

• na displeji zobrazte buďdoplňkovém kódu nebo carry (CARRY) v pnejvyšší bit (signalizace, že v pnevešel do registrů) nebo nulu (0) v p

Trocha teorie

Jazyk symbolických instrukcí

Instrukce - mnemonika, operandy

Příklady:

Jméno instrukce (mnemonika)

Operandy

add r2, r3

sts 0x123, r5

ldi r16, 0x23

Pseudoinstrukce - direktivy

Pseudoinstrukce se nepřekládají (a tedy ani nevykonávají). Pseudoinstrukceto příkazy pro překladač.

Příklady:

Pseudoinstrukce (direktiva) .cseg

.dseg

.org a

.byte n

.db <seznam>

.db 0x12, 223, 'A', ″baf“

.db 18, 0xDF, ″Ab“, 0x61, 0x66

Komentáře

Od středníku do konce řádku

add r1, r2 ;TOTO

Návěští

Identifikátor zakončený dvojtečidentifikátoru je nahrazeno číslem odpovídajícím adrese.

©Hana Kubátová, Martin Novotný FIT, ČVUT v Praze

na displeji zobrazte buď hlášku overflow (OVER), pokud došlo k přkovém kódu nebo carry (CARRY) v případě, že k přetečení nedošlo, ale vypadl

ejvyšší bit (signalizace, že v případě interpretace čísel jako nezáporných se výsledek ů) nebo nulu (0) v případě, že se nenastavil ani příznak C, ani V.

Jazyk symbolických instrukcí - asembler

operandy

direktivy

ekládají (a tedy ani nevykonávají). Pseudoinstrukce

) Význam umístit do paměti programu (code segment

umístit do paměti dat (data segment)

pokračovat na adrese a

rezervovat n bytů (pro proměnnou)

Ab“, 0x61, 0x66

definovat hodnotu bytů v paměti jako <seznam>, napvlevo uvedené příklady definují stejné hodnoty

;TOTO JE KOMENTÁŘ

ený dvojtečkou, označuje adresu. Každé další použití tohoto číslem odpovídajícím adrese.

hlášku overflow (OVER), pokud došlo k přetečení v

ení nedošlo, ale vypadl ísel jako nezáporných se výsledek

, že se nenastavil ani příznak C, ani V.

ekládají (a tedy ani nevykonávají). Pseudoinstrukce řídí překlad - jsou

code segment)

ti jako <seznam>, např. íklady definují stejné hodnoty

uje adresu. Každé další použití tohoto

Page 3: 8. Laborato ř: Aritmetika a řídicí struktury programu · PDF filePrezentace: sap-avr2.pdf Kompletní instruk ční sadu (anglicky) najdete v ... add r2, r3 sts 0x123, r5 ldi r16,

©Hana Kubátová, Martin Novotný

navesti: ...

Překlad assembler -> strojový kód

• Jméno instrukce (mnemonika) • Kódování parametrů instrukce • Výpočet adres z návěští

Adresace paměti dat

• Přímá adresace - adresa je souNapř.

sts 0x123, r5 lds r18, 0x100

S návěštím

sts promenna, r20 lds r19, promenna

• Nepřímá adresace - přes indexregistryo Indexregistry:

X = (r27, r26) Y = (r29, r28) Z = (r31, r30)

o Možnost pre-dekrementace (Např.

ldi r28, 0x12 ldi r29, 0x01 ld r1, Y st Y+, r5

Příklad

.dseg

.org 0x100 procesor) prom1: .byte 1 prom2: .byte 2 .cseg .org 0 jmp start .org 0x100 start: ; do promenne muzeme ulozit cislo pres registr: ldi r16, 0x12 sts prom1, r16 ; ... lds prom1, r2 ; ...

©Hana Kubátová, Martin Novotný FIT, ČVUT v Praze

> strojový kód

Jméno instrukce (mnemonika) → operační znak ů instrukce ěští

ěti dat

adresa je součástí instrukce

0x123, r5 r18, 0x100

promenna, r20 r19, promenna

přes indexregistry X, Y, Z, instrukce ld, st

dekrementace (-X, …) a post-inkrementace (X+, …)

r28, 0x12 r29, 0x01 ; Y = 0x0112

; load ; store (post-increment)

; pamet dat ; od adresy 0x100 (implicitni pro nas

; v pameti dat muzeme deklarovat promenne; jednobajtova promenna ; dvoubajtova promenna

; nasledujici umistit do pameti programu ; zaciname od adresy 0 (implicitni)

; do promenne muzeme ulozit cislo pres registr: r16, 0x12 prom1, r16

prom1, r2

inkrementace (X+, …)

; od adresy 0x100 (implicitni pro nas

; v pameti dat muzeme deklarovat promenne

do pameti programu ; zaciname od adresy 0 (implicitni)

Page 4: 8. Laborato ř: Aritmetika a řídicí struktury programu · PDF filePrezentace: sap-avr2.pdf Kompletní instruk ční sadu (anglicky) najdete v ... add r2, r3 sts 0x123, r5 ldi r16,

©Hana Kubátová, Martin Novotný

ldi r28, low(prom2) ldi r29, high(prom2) ld r1, Y st Y+, r5 end: jmp end

Adresace paměti programu

Adresace programu v paměti programu

• Přímá absolutní: jmp , • Přímá relativní: rjmp , • Nepřímá: ijmp , icall (podle Z)

Adresace dat v paměti programu (konstanty): Pozor, pamnávěští v paměti programu značkonstanty (např. řetězce) z paměadresace, lpm.

.cseg ; nasledujici umistit do pameti programu (implicitn i)

.org 0 ; zaciname od adresy 0 (implicitni) jmp start .org 0x100 retez: .db "Toto je muj retezec",0 ;... start: ldi r30, low(2*retez) ldi r31, high(2*retez) lpm r16, Z+ r16, posun pozici v retezci ; ... nejaka uzitecna cinnost ... lpm r16, Z+ do r16, posun pozici v retezci ; ... end: jmp end

Podprogramy - instrukce "call", "ret"

Volání podprogramu: call adresa

• Uloží na zásobník obsah registru PC (který momentáln„call“)

o Nejdřív nižší bajt, pak vyšší bajt • Skočí na adresu podprogramu, tj. do PC nahraje adresu, která je parametrem instrukce

„call“

Návrat z podprogramu: ret

©Hana Kubátová, Martin Novotný FIT, ČVUT v Praze

r28, low(prom2) ; neprime adresovani r29, high(prom2)

; load ; store (post-increment)

ěti programu

ěti programu - skoky, volání podprogramů.

, call , rcall , podmíněné skoky breq, brne, … (podle Z)

ti programu (konstanty): Pozor, paměť programu je 16bitová, a každé ti programu značí adresu šestnáctibitového slova. Chceme-li na

zce) z paměti programu, musíme spočítat adresu bajtu

; nasledujici umistit do pameti programu (implicitn i); zaciname od adresy 0 (implicitni)

"Toto je muj retezec",0 ; retezec zakonceny nulou

r30, low(2*retez) ; dolni bajt bajtove adresy retezcer31, high(2*retez) ; horni bajt bajtove adresy retezce

; nahraj bajt (znak) z retezce do r16, posun pozici v retezci

; ... nejaka uzitecna cinnost ... ; nahraj dalsi bajt (znak) z retezce

do r16, posun pozici v retezci

instrukce "call", "ret"

Volání podprogramu: call adresa

Uloží na zásobník obsah registru PC (který momentálně ukazuje na první instrukci za

ív nižší bajt, pak vyšší bajt í na adresu podprogramu, tj. do PC nahraje adresu, která je parametrem instrukce

Návrat z podprogramu: ret

programu je 16bitová, a každé li načítat data -

adresu bajtu. Jen nepřímá

; nasledujici umistit do pameti programu (implicitn i)

; retezec zakonceny nulou

; dolni bajt bajtove adresy retezce ; horni bajt bajtove adresy retezce

; nahraj bajt (znak) z retezce do

; nahraj dalsi bajt (znak) z retezce

ukazuje na první instrukci za

í na adresu podprogramu, tj. do PC nahraje adresu, která je parametrem instrukce

Page 5: 8. Laborato ř: Aritmetika a řídicí struktury programu · PDF filePrezentace: sap-avr2.pdf Kompletní instruk ční sadu (anglicky) najdete v ... add r2, r3 sts 0x123, r5 ldi r16,

©Hana Kubátová, Martin Novotný

• Vybere ze zásobníku adresu a uloží ji do PC pokračuje na adrese za volající instrukcí „call“.

Předávání parametrů:

• Přes registry - rychlé, omezený po• Na zásobníku - flexibilní, pomalejší • V paměti v globální prom• V paměti s předáním ukazatele

Příklad

; podprogram s predavanim parametru a navratove; vypocita prumer r16 a r17, vraci v r16prumer: add r16, r17 asr r16 ret ... ldi r16, 13 ldi r17, 16 call prumer ; vrati se s r16=14 ldi r16, 8 ldi r17, 12 call prumer ; vrati se s r16 ...

Čekací smyčky

V Javě/C++:

for (i=0; i<120; i++) {}

V asembleru AVR:

ldi r20, 120 cek: dec r20 brne cek

Jiný způsob:

clr r16 ldi r17, 100 cycle: inc r16 cpse r16, r17 ; compare and skip if equal jmp cycle

Dvě vnořené čekací smyčky nap

ldi r21, 33 cek2: ldi r20, 120

©Hana Kubátová, Martin Novotný FIT, ČVUT v Praze

Vybere ze zásobníku adresu a uloží ji do PC - tím je proveden návrat, bna adrese za volající instrukcí „call“.

rychlé, omezený počet flexibilní, pomalejší

ti v globální proměnné edáním ukazatele

; podprogram s predavanim parametru a navratove hodnoty pres registry; vypocita prumer r16 a r17, vraci v r16

; aritmeticky posuv doprava

; vrati se s r16=14

cpse r16, r17 ; compare and skip if equal

ky např.:

tím je proveden návrat, běh programu

hodnoty pres registry

Page 6: 8. Laborato ř: Aritmetika a řídicí struktury programu · PDF filePrezentace: sap-avr2.pdf Kompletní instruk ční sadu (anglicky) najdete v ... add r2, r3 sts 0x123, r5 ldi r16,

©Hana Kubátová, Martin Novotný

cek: dec r20 brne cek dec r21 brne cek2

©Hana Kubátová, Martin Novotný FIT, ČVUT v Praze


Recommended