Dit is de opdrachtcrasm die kan worden uitgevoerd in de gratis hostingprovider van OnWorks met behulp van een van onze meerdere gratis online werkstations zoals Ubuntu Online, Fedora Online, Windows online emulator of MAC OS online emulator
PROGRAMMA:
NAAM
crasm - Cross-assembler voor 6800/6801/6803/6502/65C02/Z80
KORTE INHOUD
gek [-of codebestand] [-slx] asmbestand
Stel het microprocessorprogramma samen asmbestand en maak een uitvoerbestand codebestand bij Intel HEX
of Motorola S Code-formaat. Er worden ook een programmaoverzicht en een symbolentabel geproduceerd op de
standaard uitvoer. De huidige versie van gek kan programma's samenstellen voor de 6800, 6801,
6803, 6502, 65C02, en Z80 verwerkers. De volledige lijst wordt afgedrukt wanneer u een beroep doet gek
zonder argumenten.
OPTIES
-o codebestand
Geef de naam van het uitvoerbestand op. Zonder dit wordt er geen uitvoerbestand geproduceerd
optie.
-s Schakel waarschuwingen uit.
-l Schakel de uitvoer van programmalijsten uit.
-x Schakel de uitvoer van symbooltabellen uit.
SYNTAXIS
Elke regel van het montageprogramma moet een van de volgende sjablonen volgen, waarbij de
haakjes geven optionele onderdelen aan.
[;commentaar]
label = uitdrukking [;commentaar]
[label] ezelsbruggetje operand [;commentaar]
Opmerkingen worden ingeleid door een puntkomma (;) en strek uit tot het einde van de regel. Etiketten zijn
ID's met maximaal 36 alfanumerieke tekens (inclusief punt en onderstrepingsteken).
Etiketten mogen niet beginnen met een cijfer. Het formaat van het geheugensteuntjes- en operandenveld hangt ervan af
op de geselecteerde microprocessor. Een paar geheugensteuntjes zijn geldig voor alle processors en dat zijn ze ook
gebruikt om richtlijnen te geven aan de aanwezigen. Deze staan bekend als "pseudo-ezelsbruggetjes".
labels
Labels zijn identificatiegegevens die vertegenwoordigen
— een absoluut adres,
— een relatief adres (positie-onafhankelijke code),
— een register,
— een lijst met registers,
— een specifiek bit op een specifiek adres,
– of een geheugensteuntje.
De meeste labels bestaan uit maximaal 36 alfanumerieke tekens, punten (.) Of
onderstreept (_). Etiketten mogen niet beginnen met een cijfer. Ze zijn hoofdletterongevoelig.
Etiketten die beginnen met een punt (.) zijn lokale labels waarvan de reikwijdte beperkt is tot de
macro waarin ze zijn gedefinieerd, of op het codesegment dat wordt begrensd door de pseudo-ezelsbruggetjes
CODE or DUMMY.
Het vooraf gedefinieerde "ster"-label (*) vertegenwoordigt de huidige programmateller, dat wil zeggen:
het adres waar de volgende assemblagecode-instructie zal worden gecodeerd. Andere vooraf gedefinieerd
labels omvatten alle pseudo-ezelsbruggetjes, microprocessorspecifieke geheugensteuntjes en register
namen.
constanten
Het verzamelde herkent numerieke constanten, uitgedrukt in decimaal, hexadecimaal, octaal,
binair of ascii.
┌─────────────────────────────────────── ────────── ─────────┐
│Type Formaat Voorbeelden │
├─────────────────────────────────────── ────────── ─────────┤
│decimaal dddd 1234, 675, 12, 1, Maar niet 0.12.
├─────────────────────────────────────── ────────── ─────────┤
│hexadecimaal $dddd $fd12, $ 2AC, $0.
│ ddddH 03H, 2da7H, 0FC84H, Maar niet FC84H.
│ 0Xdddd 0x03, 0x2 AC, 0Xfc84.
├─────────────────────────────────────── ────────── ─────────┤
│octaal ddddQ 377Q, 012412Q.
├─────────────────────────────────────── ────────── ─────────┤
│binair %dddd % 01110110, % 1100.
│ ddddB 01110110B, 1100B.
│ 0Bdddd 0b1100 │
├─────────────────────────────────────── ────────── ─────────┤
│ascii 'cccc' 'A', 'AB', ''', '\n', '\''.
│ "cccc" "\t", "\"", "a'b".
└─────────────────────────────────────── ────────── ─────────┘
Uitdrukkingen
Net als labels kunnen expressies een absoluut adres vertegenwoordigen (abs), een relatief adres voor
positie-onafhankelijke code (rel), een register (reg), of een lijst met registers (inschrijven), Of a
verwijzing naar een specifiek bit op een specifiek adres (bspec).
De volgende operators worden herkend in expressies.
┌───────────────────────────────────────────────── ──────────┐
│Syntaxis Resultaat Omschrijving │
├─────────────────────────────────────── ────────── ──────────┤
│ abs{abs} bspec bitreferentie, bijv pia{3} │
│ ADRES(abs) abs adres uit een bitreferentie │
│ BEETJE(abs) abs bitnummer uit een bitreferentie │
├─────────────────────────────────────── ────────── ──────────┤
│ - abs abs twee-complement │
│ ~ abs abs iemands complement │
├─────────────────────────────────────── ────────── ──────────┤
│ abs << abs abs links verschuiven │
│ abs >> abs abs rechterverschuiving │
├─────────────────────────────────────── ────────── ──────────┤
│ abs | abs abs bitsgewijs of │
│ abs & abs abs bitgewijs en │
│ abs ^ abs abs bitsgewijze xor │
├─────────────────────────────────────── ────────── ──────────┤
│ abs * abs abs vermenigvuldiging │
│ abs * abs abs divisie │
├─────────────────────────────────────── ────────── ──────────┤
│ abs + abs abs toevoeging │
│ rel + abs rel toevoeging │
│ abs - abs abs aftrekken │
│ rel - abs rel aftrekken │
│ rel - rel abs aftrekken │
├─────────────────────────────────────── ────────── ──────────┤
│ reg - reg inschrijven registerbereik │
│ inschrijven \ reg inschrijven registratielijst │
└───────────────────────────────────────────────── ──────────┘
In de tabel worden operators weergegeven in volgorde van afnemende prioriteit. Er kan gebruik worden gemaakt van haakjes
vermijd onduidelijkheden. Er wordt een waarschuwing gegenereerd wanneer een volledige uitdrukking wordt omgeven door
tussen haakjes en kan worden verward met een microprocessor-adresseringsmodus.
Voorbeelden:
(basis+$12) >> 8 & 0xff00
'A'-80H
(basis+0x12)
Het laatste voorbeeld veroorzaakt een waarschuwing omdat de haakjes niet nodig waren en misschien wel
suggereren een microprocessor-adresseringsmodus.
Alle rekenkundige uitdrukkingen worden geëvalueerd op 32 bits. Rekenkundige bewerkingen lopen over
stil. De rekenkundige waarden worden vervolgens afgekapt tot de grootte die wordt geïmpliceerd door de micro-
processor geheugensteuntje. Deze afkapping kan een waarschuwingsbericht veroorzaken.
Voorbeelden: alle volgende instructies
(6502) lda # $ 1234
(6800) Idaa $1234,x
(Z80) ld (ix+0C2H),b
een waarschuwing veroorzaken
>>> WAARSCHUWING: operand overloop
Maar expressie
$1123454 * 1298992
stroomt geruisloos over.
Pseudo-ezelsbruggetjes
De volgende pseudo-ezelsbruggetjes worden altijd herkend.
CPU cpunaam
Geeft het geselecteerde microprocessortype aan. Dit moet verschijnen voordat een micro-
processorspecifieke instructie. De mogelijke waarden van cpunaam worden vermeld wanneer u
inroepen gek zonder argumenten. De huidige lijst bevat 6800, 6801, 6803, 6502,
65C02, en Z80
OUTPUT binformaat
Geeft het formaat van het uitvoerbestand aan. Argument binformaat waarden kan aannemen SCODE
voor het produceren van een uitvoerbestand met behulp van de S-code van Motorola, of HEX voor Intel's Hex
formaat. De standaardwaarde hangt af van de geselecteerde microprocessor.
CODE
Baken de reikwijdte van lokale labels af en introduceer een programmaonderdeel.
DUMMY Beperk de reikwijdte van lokale labels en introduceer een nepprogramma-onderdeel waarvan de enige
Het effect is dat labels worden gedefinieerd zonder code te genereren.
label UITRUSTEN uitdrukking
label = uitdrukking
Definieer de waarde van het label label. Labels die met deze richtlijnen zijn gedefinieerd, kunnen dat zijn
later in het programma opnieuw gedefinieerd.
[label] DB uitdrukking[,...,uitdrukking]
Voeg de opgegeven databytes in (8 bits).
[label] DW uitdrukking[,...,uitdrukking]
Voer de opgegeven datawoorden in (16 bits). De bytevolgorde is afhankelijk van de
geselecteerde microprocessor.
[label] DL uitdrukking[,...,uitdrukking]
Voer de opgegeven data longs in (32 bits). De bytevolgorde is afhankelijk van de
geselecteerde microprocessor.
[label] DDB uitdrukking[,...,uitdrukking]
Voeg de opgegeven dubbele bytes in (16 bits). De bytevolgorde is het tegenovergestelde van
de gebruikelijke bytevolgorde voor de geselecteerde microprocessor.
[label] ASC tekenreeksconstante
Voeg de ascii-weergave van de string in tekenreeksconstante . De tekenreeks moet zijn
gescheiden door dubbele aanhalingstekens. De C-ontsnappingssequenties \r, \n, \t, \0, \', \" en \\
worden erkend.
[label] DS tegenexpr,[valexpr]
Invoegen tegenexpr bytes met waarde valexpr. De standaardwaarde is nul.
[label] ALIGN ZELFS
[label] ALIGN ODD
Voeg een null-byte in om de programmateller even of oneven te maken.
IF condexpr
...
ELSE
...
ENDC
Voorwaardelijke assemblage: If-expressie condexpr niet nul is, verwerk dan de gevonden lijnen
tussen de IF en ELSE pseudo-ezelsbruggetjes. Anders verwerkt u de gevonden lijnen
tussen de ELSE en ENDC pseudo-ezelsbruggetjes. Voorwaardelijke montage-instructies
kan worden genest. De ELSE een deel kan worden weggelaten.
label MACRO
...
ENDM
Definieer een nieuw geheugensteuntje label gelijk aan alle instructies tussen de
MACRO en ENDM pseudo-ezelsbruggetjes. Aanroepen van de macro kunnen een lijst opgeven van
door komma's gescheiden operanden. De karakterreeksen \1, \2, ... \N in de macro
definitie worden vervangen door de opgegeven operanden. De tekenvolgorde \0 is
vervangen door het aantal geleverde operanden.
EXITM
Dit pseudo-ezelsbruggetje kan binnen een macrodefinitie worden gebruikt om de macro af te sluiten. Dit
is nuttig in combinatie met de voorwaardelijke assemblage-pseudo-ezelsbruggetjes.
BEVATTEN bestandsnaam
Forceer de assembler om het bestand genaamd bestandsnaam op het huidige punt.
LIJST ON
LIJST UIT
De productie van een vermelding in- of uitschakelen (standaard is ingeschakeld).
KLIST ON
KLIST UIT
In- of uitschakelen van de productie van een vermelding voor de niet-actieve vestigingen van a
voorwaardelijke assemblageconstructie (standaard is ingeschakeld.)
ILIST ON
ILIST UIT
Schakel de productie van een lijst voor opgenomen bestanden in of uit (standaard is uitgeschakeld).
MLIST ON
MLIST UIT
Schakel de productie van een lijst voor de macro-uitbreidingen in of uit (standaard is
uit.)
NAM titel
Geef naam op titel voor de koptekst van de aanbiedingspagina's.
PAGINA
Start een nieuwe vermeldingspagina.
PAGINA kolommen,rijen
Geef de grootte van een vermeldingspagina op.
SKIP aantal
overslaan aantal lijnen.
FAIL Bericht
Genereer een foutmelding Bericht.
VOORBEELD
Hier is een klein 6502-programma:
cpu 6502
cout = $fd ; tonen a karakter
* = $300 ; monteren at $300
code
pstring LDY #0
.1 lda bericht, j
BEQ .2
jr cout
ins
.2 goed .1
rts
Bericht asc "Deze is de Bericht "
code
CREDITS
Léon Bottou, september 1987.
Gebruik crasm online met behulp van onworks.net-services