Jste zde

Srovnávací test assemblerů pro MCS-51

<

I>Pro připravované prostředí LAB-51 hledáme vhodný kompilátor. Přijeho hledání vlastně vznikl tento článek. Popisujeme zde, co jsme naąli.Pokud někdo víte o daląím dobrém assembleru, napiąte nám.

V druhém díle, který bude navazovat, popíąeme moľnosti citovanéhooriginálu od INTELu, protoľe se na ně často odkazujeme. Pro zájemce o popiskódu procesorů rodiny x51, přikládám ZDE.pdf soubor, staľený z WWW.ATMEL.COM, kde je popsán v angličtině kompletní zdrojový kód.
 

Na úvod

Toto srovnání vzniklo vlastně náhodou, potřeboval jsem totiľ rychle přeloľitprogram pro Atmel 89C2051 a neměl jsem překladač. Při hledání jsem narazilna různé přístupy a tak jsem se posléze snaľil vybrat ten nejlepąí promé potřeby.

Překladače jsou řazeny abecedně podle jmen. U kaľdého je přiloľen krátkýprogram na blikání diody připojené na P1.0. Na konci jsou vąechny údajeshrnuty do přehledné tabulky.

8051 CrossAssembler

Tento cross assembler je dílem firmy Metalink. Testoval jsem jeho verzi1.2h. Assembler podporuje standardní Intelskou syntaxi. Má podporu pro21 klonů procesoru 51 definovanou pomocí souborů. Výstupní formát je IntelHex. Program při chybě nevrací errorlevel a popis chyby se objeví pouzev listingu, coľ ztěľuje zakomponování do integrovaných prostředí. K assembleruje velmi rozsáhlý manuál (200kB) a assembler jako jeden z mála podporujemakra.

Příklad

        $MOD51        LEDPIN BIT P1.0        START CODE 0000H        TIME EQU 8        ORG STARTBLINK:  CPL LEDPIN        MOV R3,#TIME        MOV R2,#0        MOV R1,#0LOOP:   DJNZ R1,LOOP        DJNZ R2,LOOP        DJNZ R3,LOOP        SJMP BLINK        END

as31 -An 8031/8051 assembler

Tento assembler je dílem KenaStauffera. Lze jej získat pouze jako zdrojové soubory pro yacc a jazykC. Přeloľit tyto zdrojové kódy pomocí DJGPP pod MS DOSem dá trochu prácikvůli absenci dlouhých jmen a drobné nepřesnosti v souboru lexer.c. Výhodoutohoto asembleru je právě moľnost provozování assembleru na různých platformách.Při chybě assembler hlásí nic neříkající hláąku "Parse error on line XX".Výstupní formát je jakýsi podivný nedodělek Hex formátu (s příponou obj).Pseudopříkazy mají tečkovou notaci, zápis číselných konstant je stejnýjako v jazyce C. Vstupní soubor musí mít povinně příponu asm.

Příklad

        .EQU TIME, 8        .ORG 0BLINK:  CPL P1.0         MOV R3,#TIME        MOV R2,#0        MOV R1,#0LOOP:   DJNZ R1,LOOP        DJNZ R2,LOOP        DJNZ R3,LOOP        SJMP BLINK.END

ASEM-51

Testoval jsem verzi 1.2 tohoto assembleru od W.W. Heinze. Assembler má předdefinované symboly, ale pouľívá i mcu tabulky.Součástí balíku jsou tabulky pro 35 klonů procesoru 51 včetně Philips 83C75x.Zápis assembleru má Intelskou syntaxi, je moľné vkládat soubory pomocídirektivy $INCLUDE. Výstupní formát je Intel Hex a součástí balíku je programhexbin pro převod na binární formát. Program vrací errorlevel a chyby vypisujena standardní výstup ve tvaru podobném překladačům firmy Borland. Obsahujedokonce program asem2msg pro plné integrování překladače do IDE Turbo Pascalu.

Příklad

        LEDPIN BIT P1.0        START CODE 0000H        TIME EQU 8        ORG STARTBLINK:  CPL LEDPIN        MOV R3,#TIME        MOV R2,#0        MOV R1,#0LOOP:   DJNZ R1,LOOP        DJNZ R2,LOOP        DJNZ R3,LOOP        SJMP BLINK        END

Macrocross assembler

Velmi pěkný shareware assembler. Výpis chyb je na obrazovku, podporujemakra, podmíněný překlad. Má varianty pro procesory 8044, 8048, 8051, 8080,8085, 8096 a Z80. Pokud si je vąak budete chtít registrovat zaplatíte zakaľdý z nich 20 $. Autorem je Micept InstrumentsINC.. Neregistrovaná verze dvakrát čeká na stisk klávesy.
START data 0000HTIME data 8LED data P1.0        ORG STARTBLINK:  CPL LED        MOV R3,#TIME        MOV R2,#0        MOV R1,#0LOOP:   DJNZ R1,LOOP        DJNZ R2,LOOP        DJNZ R3,LOOP        SJMP BLINK        END

MCS-51 Macro Assembler A51

Testoval jsem verzi 5.28 tohoto assembleru firmy KeilSoftware, Inc.. Assembler je součástí celého vývojového prostředí proMCS-51. Assembler podporuje makra a podle údajů výrobce je moľné překládatprogramy s těmito omezeními: nejsou předdefinovány symboly přeruąovacíchvektorů (RESET, EXTI0, EXTI1, SINT, TIMER0 a TIMER1), vzhledem k daląímrezervovaným slovům (např. IF) je nutná případná změna uľivatelem definovanýchsymbolů a výstupní soubor má některá roząíření (ladicí informace). Nedostatkemtohoto assembleru je výpis chybových hláąení pouze do list souboru, errorlevelje vąak nastavováno. Výstupní formát je roząířený OMF-51, coľ je objektovýsoubor, umoľňující následné linkování několika modulů při větąích projektech.Výstupní formát linkeru je ovąem opět OMF-51. Tento formát je moľné dodávanýmprogramem konverovat na Intel HEX. Zkuąební verze tohoto assembleru jek dispozici na http://www.keil.com/demo/ek51.htmnebo u prodejců (seznam je na www serveru firmy). Pokud vám nevadí vývojprogramů pod Windows, je k dispozici pěkné integrované prostředí, kterébohuľel umí syntax highlight pouze pro C.

Příklad

        $MOD51        LEDPIN BIT P1.0        START CODE 0000H        TIME EQU 8        ORG STARTBLINK:  CPL LEDPIN        MOV R3,#TIME        MOV R2,#0        MOV R1,#0LOOP:   DJNZ R1,LOOP        DJNZ R2,LOOP        DJNZ R3,LOOP        SJMP BLINK        END

PseudoSam 51 assembler

Tento překladač je dílem firmy PseudoCorp. Autoři sami jej označují jakoLevel I. K dispozici jsem měl verze 1.2.03, 1.4.09 a 1.6.00. Rozdíl mezinimi byl v mnoľství a úrovni dokumentace a příkladů, kdy v nejnovějąímbalíku nebyla dokumentace skoro ľádná a příklad chyběl vůbec. K překladačije ale nabízen placený upgrade na Level II, která je roząířena o makra,bitovou aritmetiku při překladu a podobně (vąe podle dokumentace, protoľejsem Level II neměl k dispozici). Velkou nevýhodou tohoto překladače jetečková notace zápisu pseudo-instrukcí, jak je ostatně vidět na příkladěa podivný zápis binárních a hexadecimálních číslic (b'1001 resp. h'1A).Program chyby vypisuje na standardní výstup i s číslem řádku a sloupce.Nevrací errorlevel.

Příklad

        .EQU TIME, 8        .ORG 0BLINK:  CPL P1.0         MOV R3,#TIME        MOV R2,#0        MOV R1,#0LOOP:   DJNZ R1,LOOP        DJNZ R2,LOOP        DJNZ R3,LOOP        SJMP BLINK.END

TASM

TASM je tabulkami řízený assembler podporující kromě 51 také procesory8048, Z80, 6800, 8080, TMS32010 a TMS7000. Autorem je Thomas N. Anderson,Speech Technology Incorporated. Výstupní formát je Intel Hex (default),MOS Technology Hex, Motorola Hex a binární. Program má tečkovou notacizápisu pseudo-instrukcí, podporuje makra. Program při chybě vrací errorlevela popis chyby vypisuje na standardní výstup. Program nemá předdefinovanésymboly, uľivatel si je můľe sám dodělat, v nejnovějąí verzi 3 jsou k dispozicipouze pro 8051 a Motorolu. Registrovaní uľivatelé dostanou zdrojové kódy.

Příklad

        .ORG 0000BLINK:  CPL 90h        MOV R3,#8        MOV R2,#0        MOV R1,#0LOOP:   DJNZ R1,LOOP        DJNZ R2,LOOP        DJNZ R3,LOOP        SJMP BLINK        .END

UASM -Universal Cross Assembler

UASM je shareware, jeho autorem je Bruce Graham, Custom Computer Consultants.Assembler podporuje Intel 8051/8031, Motorola 6805 a Zilog Z8. Jsou dodáványzdrojové soubory v jazyce C, program opět nemá předdefinovány symboly.Výstupní formát je buď Intel Hex nebo listing. Popis chyb je pouze v listingu,program nevrací errorlevel.

Příklad

        ORG 0BLINK:  CPL 90h        MOV R3,#8        MOV R2,#0        MOV R1,#0LOOP:   DJNZ R1,LOOP        DJNZ R2,LOOP        DJNZ R3,LOOP        SJMP BLINK

XASM- Universal Cross Assembler

XASM je cross assembler, jeho autorem je Dave Dunfield. Assembler podporujeIntel 8051/8031, 8086, 8096 a Motorola 680x. Nejsou předdefinovány symboly,a nepodařilo se mi napsat číselnou konstantu hexadecimálně. Výstupní formátje buď Intel nebo Motorola Hex. Popis chyb je pouze v listingu, programvrací errorlevel při chybě překladu.

Příklad

        ORG 0BLINK   CPL 144        MOV R3,#8        MOV R2,#0        MOV R1,#0LOOP    DJNZ R1,LOOP        DJNZ R2,LOOP        DJNZ R3,LOOP        SJMP BLINK

Srovnávací tabulka

Autor Výstupní formát Chybová hláąení Cena Pseudoinstrukce 
a konstanty
Makra
8051 cross assembler Intel Hex listing ? Intel Ano
as31 Podivnost standardní výstup Public domain Tečková notace Ne
ASEM-51 Intel Hex standardní výstup Freeware Intel Ne
Macro cross assembler Intel Hex standardní výstup 20 $ Intel Ano
MCS-51 Macro Assembler A51 OMF-51 listing Komerční 11 600,- Kč (IDE+debbuger) Intel - úplná kompatibilita Ano
PseudoSam 51 assembler Intel Hex standardní výstup Freeware Tečková notace 
nezvyklý zápis čísel
Ne
TASM Intel, Motorola, 
MOS Hex, binární
standardní výstup 40 $ Tečková notace Ano
UASM Intel Hex listing 20 $ Intel ?Ne
XASM Intel, Motorola Hex listing ? Intel ?Ne


Na závěr

Je vidět, ľe mnoho autorů si vytvořilo vlastní definici, jak psát programypro 8051, to velice ztěľuje přechod mezi jednotlivými assemblery. Protoje vhodné si vybrat jeden a ten pak stále pouľívat.

Pokud pouľíváte jeątě nějaký jiný assembler pro 51 a máte pocit, ľeje vhodné, aby o něm věděli i ostatní, napiąte mi o něm více.

Firma Intel dává volně k dispoziciprogram ApBuilder,coľ je skoro integrované prostředí pro psaní programů pod Windows 3.1.Je to kombinace elektronického manuálu a klikacího průvodce, kde např.nastavení sériového kanálu se nakliká a přes clipboard přesune zdrojovýkód v assembleru nebo C do editoru. Hlavní výhodou je podpora asi vąechintelských procesorů (natěstí ne najednou na disku) a podpora vývojovýchdesek firmy Intel, kde je moľnost program krokovat, spouątět a podobně.
 



 

Napsal : Tomáą Kouba
Doplnil : Jan Řehák
Hodnocení článku: