GNU asembler as
Tento návod stručně shrnuje některá základní syntaktická pravidla, platná pro GNU překladač asembleru as. Jsou vybrány jen některé direktivy, potřebné pro řešení jednoduchých úloh v předmětu POT. Předpokládá se použití překladače pod vývojovým prostředím HEW, proto nebudeme popisovat volby pro spuštění v řádkovém režimu.
Přeložené programy jsou po sestavení určené pro simulaci výpočtu na simulátoru procesoru H8S/2600.
Kompletní manuál k asembleru as je součástí instalační sady nástrojů GNU nebo jej lze stáhnout samostatně např. ze stránek firmy KPIT Cummins Infosystems ltd.
Parametry u některých z následujících direktiv jsou uvedeny ve zjednodušeném tvaru, přizpůsobeném typickému použití dané direktivy.
Direktiva Příklad použití Význam .h8300s
.h8300s
Generování kódu pro procesor H8S/2600.
.text
.text
Začátek sekce .text (obvykle obsahující kód programu).
.data
.data
Začátek sekce .data.
.section jméno
.section .vects
Začátek sekce se jménem jméno.
.byte výrazy
.byte 0x23,0xAB,'A'+1
Definice 8bitových položek (byte) s obsahem daným jednotlivými výrazy.
.word výrazy
.word 0x1234
Definice 16bitových položek (word) s obsahem daným jednotlivými výrazy.
.long výrazy
.long 0x12345678
Definice 32bitových položek (long word) s obsahem daným jednotlivými výrazy.
.space nn
.space 20
Vyhražení místa o délce nn bytů.
.ascii řetězec
.ascii "Ahoj"
Definice bytů, obsazených jednotlivými znaky řetězce.
.asciz řetězec
.asciz "Ahoj"
Definice bytů, obsazených jednotlivými znaky řetězce. Řetězec je zakončen bytem s obsahem 0x00.
.align výraz
.align 3
Zarovnání počítadla adres na hodnotu dělitelnou číslem 2 ^ výraz .
.equ symbol,výraz
.equ BASE,0x1234
Definuje symbol symbol s hodnotou výraz .
.extern jména
.extern VAR1,VAR2
Definuje symboly jména jako externí (tj. definované v jiném modulu).
.global jména
.global VAR3,VAR4
Definuje symboly jména jako globální (tj. známé i v jiných modulech).
.macro jméno
.macro SECTI
Začátek definice makra se jménem jméno.
.endm
.endm
Konec definice makra.
.altmacro
.altmacro
Začátek platnosti speciální syntaxe pro makra (dovoluje použití direktivy LOCAL) .
.noaltmakro
.noaltmakro
Konec platnosti speciální syntaxe pro makra.
LOCAL jména
LOCAL VAR5,VAR6
Definuje symboly jména jako lokální v makru. Použitelné jen při předchozím použití direktivy .altmacro .
.end
.end
Konec překladu. Řádky uvedené za .end nebudou překládány.
V následujícím velmi jednoduchém programu si uvedeme některá základní pravidla, která by měla být dodržena při psaní programů v asembleru.
|
Program sečte obsah proměnných VAR1 a VAR2 a výsledek uloží do proměnné VAR3.
Direktiva .h8300s na začátku programu je nutná pro generování výstupního kódu pro procesor H8S/2600.
Direktiva .data uvozuje datovou sekci, ve které jsou definovány dvě "proměnné" typu word se symbolickou adresou VAR1 a VAR2 a dále volné místo o velikosti 2 byty (odpovídá velikosti word) se symbolickou adresou VAR3.
Dále je v datové sekci vytvořeno volné místo o velikosti 100 bytů pro zásobník (potřebná velikost zásobníku závisí na hloubce vnoření procedur a počtu ukládaných registrů). Symbolická adresa STCK má hodnotu, která odpovídá adrese prvního bytu za zásobníkem a je použita k naplnění registru ER7, který je standardně používán jako SP.
Položky v zásobníku musí ležet na adrese zarovnané způsobem "word alignment". Proto je před definicí místa pro zásobník vložena direktiva .align 1, která zajistí zarovnání adresy začátku zásobníku. Protože se zásobník plní "shora dolů", tj. počínaje od nejvyšší adresy, musí být délka zásobníky sudé číslo, aby potřebné zarovnání bylo dosaženo i na konci zásobníku pro symbol STCK jehož hodnotou je inicializován SP.
Direktiva .text uvozuje sekci s kódem programu.
První instrukce programu je označena návěštím _start , které musí být definováno jako globální, tj. známé i mimo právě vytvářený modul. Jméno návěští _start koresponduje se symbolem, který je použit v modulu vects.c a umožňuje spuštění programu zavedeného do paměti simulátoru nebo skutečného procesoru. Při změně tohoto návěští je nutné příslušně upravit i soubor vects.c .
První instrukcí v programu je naplněn registr ER7 (tj. SP) hodnotou symbolické adresy STCK, která ukazuje na horní konec zásobníku (zásobník není v tomto programu dále využíván, naplnění SP je zde jen pro ilustraci postupu při inicializaci zásobníku).
Program je spuštěn na počítači bez jakéhokoliv operačního systému. Po provedení všech instrukcí programu proto nemůže být výpočet ukončen "předáním řízení operačnímu systému". Nekontrolovanému průběhu dalšího výpočtu je zabráněno nekonečným cyklem na návěští KON.
Direktiva .end na konci programu je nepovinná. Pokud není uvedena, končí překlad nalezením konce souboru.
Návrat na hlavní stránku POT.
Poslední změna stránky byla provedena 12.02.2008