× Aktuálně z oboru

SHIELD Experience Upgrade 7 – méně hledání a více zábavy [ clanek/2018052902-shield-experience-upgrade-7-mene-hledani-a-vice-zabavy/ ]
Celá zprávička [ clanek/2018052902-shield-experience-upgrade-7-mene-hledani-a-vice-zabavy/ ]

Assembler - 1. lekce

[ http://programujte.com/profil/-1-martin-morawiec/ ]Google [ ?rel=author ]       [ http://programujte.com/profil/118-zdenek-lehocky/ ]Google [ ?rel=author ]       11. 7. 2005       53 763×

  • Převody binárního (dvojkového), hexadecimálního (šestnáctkového) a dekadického (desítkového) čísla
  • Úvod do mikroprocesoru
  • Přesuny dat
  • Tabulka instrukcí
  • Pseudoinstrukce

Převody binárního, hexadecimálního a dekadického čísla.

Stroje většinou pracují ve dvojkové soustavě, ta nabývá hodnot logická 0 a 1. Log. 0 si můžeme představit jako stav „vypnuto“, může se také označovat jako L - Low (nízký). Opačný stav log. 1 se jeví jako stav „zapnuto“, ten se označuje jako H – High (vysoký).

V programování budeme často používat převody těchto soustav ať už pro jejich přehlednost, zavedenost, nebo kompaktnost.

Tedy převod binární do dekadické soustavy se převádí pomocí Hornerova schématu:

10112 = 1 * 23 + 0 * 22 + 1 * 21 + 1 * 20 = 8 + 0 + 2 + 1 =1110


V opačném převodu se desítková hodnota dělí dvojkou, dokud výsledek nebude nula, binární číslo se čte pozpátku ze zbytku po dělení. :

56 : 2 = 28 → 28 : 2 = 14 → 14 : 2 = 7 → 7 : 2 = 3 → 3 : 2 = 1 → 1 : 2 = 0
zbytky : 0 0 0 1 1 1
Tedy : 56D = 111000B

Dobře se převádí binární číslo na hexadecimální a to takto, že binární hodnotu rozdělíme po čtyři číslice zprava a každé tyto úseky převedeme do desítkové soustavy, s tím že u hexa čísla nepokračuje po devítce desítka ale písmeno „A“ a tedy maximální hodnota je „F“. :

101101010011B → 1011 0101 0011 → 11 5 3 → B53H


Úvod do mikroprocesoru.

Příklad : mikroprocesor AT89S8252 (intel)
Procesor je tvořen aritmetickou jednotkou (sčítačka) a řadičem, který čte instrukce a podle nich vykoná povely (určuje co se bude počítat), počítá se ve střádači (akumulátor) – tam je operand a po výkonu tam bude výsledek.
Mikroprocesor má 4 vstupně výstupní porty po osmi bitech, což znamená že můžeme využít 16 vstupů / výstupů. Má vlastní FLASH paměť RAM (8KB) a ROM (2KB) – do které budeme zapisovat program.
Programátorský model procesoru
- Obsahuje všechny registry a paměťové prostory, které se dají programátorem ovlivnit.
- Paměť se adresuje od adresy 0 – 127, každá část má svou adresu a přiřazené jméno (pro program).


Přesuny dat.

Pro přesuny se stabilně používá příkaz MOV, přičemž se mění co se přesouvá a kam. Pozor! Používám slovo přesouvá, ale v tom smyslu, že se jedná o kopírování, nikoliv vyjmout a vložit.
Ovšem, nemůžeme využít téměř všechny kombinace s tímto příkazem, proto jsem ze studijních materiálů přepsal příkazy které kompilátor příjme.
Ke stažení : PŘEHLED PŘÍKAZŮ [ http://programujte.com/storage/200811191041_prikazy.xls ]

Přímá adresace :

Obecné schéma : MOV (kam), (odkud, nebo #co)

Příklad chceme li nastavit reg. R3 na 10 dekadických : MOV R3, #10
# - hash se používá pro přímá data
Pokud za hodnotu napíšeme H – pro kompilátor to znamená, že jsme zadali hodnotu hexadecimálně : MOV R3, #0AH
Pro binární číslo se pak doplňuje přípona B : MOV R3, #1010B

Nepřímá adresace :

Obecné schéma : MOV @Rr, (odkud, nebo #co) r = 0-1

Existují dva speciální registry (R0 a R1), se kterými se toto dá provádět.
Jde o to, že cílem není R0, nebo R1 na který je přesun směrován, nýbrž na adresu v paměti, na kterou je nastavený příslušný registr.

Pro příklad :
MOV R0, #26H
MOV @R0, #15
- hodnota 15 D se přesune na místo v paměti (26H)
- je to totožné jako by jsme použili : MOV 26H, #15
Zdá se to složité, když se to dá udělat jednodušeji, ovšem v příštích dílech si ukážeme, že to je velmi užitečná instrukce.


Pseudoinstrukce :

Pseudoinstrukcí můžeme celý program zpřehlednit. Jde o to dát nějaké proměnné jméno.
- nesmí začínat číslem
- kompilátory nepovolují diakritiku
- maximální délka je 8 znaků
- používá se u místa v paměti nebo portu

Datová : příkaz – EQU

Příklad : ZAK1 EQU 21H
Nyní můžeme použít místo 21H pseudoinstrukci : MOV ZAK1, #15

Bitová : příkaz – BIT

Příklad : LED1 BIT P1.0 (port 1, nultý bit)
Ovšem pro přesun hodnoty na jednobitové místo se nedá použít příkaz MOV, nýbrž SETB a CLR.
Tedy příklad : SETB LED1 (P1.0 je v jedničce)
Nebo : CLR LED1 (P1.0 je v nule)


DÚ :
Do paměti vepište na adresu 28H hexa číslo B5 v binárním kódu. Nepřímou adresací přesunete z tohoto místa (28H) na adresu v paměti, která se bude jmenovat DATA1 (je jedno kde). A z DATA1 přesunete přímou adresací na port P0. Úkol odevzdávejte jako prostý text, programové vybavení využijeme až v druhé lekci.
Přeji hodně zdaru :-)

Slovo závěrem : Pokud nechápete, na co to vlastně děláte, tak to je normální, měli jste to pochopit z minulé lekce, ale to nevadí, postupně budete chápat :o)





Článek stažen z webu Programujte.com [ http://programujte.com/clanek/2005071902-assembler-1-lekce/ ].