Il s'agit de la commande as86 qui peut être exécutée dans le fournisseur d'hébergement gratuit OnWorks en utilisant l'un de nos multiples postes de travail en ligne gratuits tels que Ubuntu Online, Fedora Online, l'émulateur en ligne Windows ou l'émulateur en ligne MAC OS
PROGRAMME:
Nom
as86 - Assembleur pour processeurs 8086..80386
SYNOPSIS
as86 [-0123agjuw] [-lm[liste]] [-n prénom] [-o obj] [-b[coffre]] [-s sym] [-t texteseg] src
as86_encap prog.s prog.v [préfixe_] [as86_options]
DESCRIPTION
as86 est un assembleur pour les processeurs 8086..80386, sa syntaxe est plus proche de la
forme intel/microsoft plutôt que la forme générique plus normale du système unix
assembleur.
Le src fichier peut être '-' pour assembler l'entrée standard.
Cet assembleur peut être compilé pour prendre en charge le processeur 6809 et peut même fonctionner.
as86_encap est un script shell pour appeler as86 et convertir le binaire créé en un fichier C
prog.v être inclus dans ou lié à des programmes tels que les installateurs de blocs de démarrage. Les préfixe_
l'argument est un préfixe à ajouter à toutes les variables définies par la source, il vaut par défaut
le nom du fichier source. Les variables définies comprennent préfixe_début taille_préfixe ,
préfixe_données pour définir et contenir le code, plus des entiers contenant les valeurs de tous
étiquettes exportées. L'un ou les deux prog.s , prog.v les arguments peuvent être '-' pour la norme
entrée/sortie.
OPTIONS
-0 commencer avec un segment de code 16 bits, avertir pour toutes les instructions > 8086
-1 commencer avec un segment de code 16 bits, avertir pour toutes les instructions > 80186
-2 commencer avec un segment de code 16 bits, avertir pour toutes les instructions > 80286
-3 commencez par un segment de code 32 bits, ne prévenez aucune instruction. (même pas 486 ou
586)
-a activer la compatibilité partielle avec Minix asld. Cela change l'interprétation de
parenthèses rondes et crochets ainsi que d'apporter des modifications au code
génération et syntaxe pour les sauts et appels 16 bits. ("jmp @(bx)" est alors un
instruction)
-g mettre uniquement des symboles globaux dans un fichier objet ou symbole
-j remplacer tous les sauts courts par des sauts similaires de 16 ou 32 bits, le conditionnel de 16 bits
les branches sont codées comme une branche conditionnelle courte et une branche inconditionnelle longue.
-O cela oblige l'assembleur à ajouter des passes supplémentaires pour essayer d'utiliser des références directes à
réduire les octets nécessaires pour certaines instructions. Si les étiquettes bougent au dernier passage
l'assembleur continuera à ajouter des passes jusqu'à ce que les étiquettes se stabilisent toutes (jusqu'à un maximum
de 30 passes) Ce n'est probablement pas une bonne idée d'utiliser ceci avec un assembleur écrit à la main
utiliser l'explicite br bmi bcc opcodes de style pour le code 8086 ou le jmp près style pour
instructions conditionnelles i386 et assurez-vous que toutes les variables sont définies avant qu'elles
sont utilisés.
-l produire un fichier de liste, le nom du fichier peut suivre
-m imprimer les extensions de macro dans la liste
-n le nom du module suit (va dans l'objet au lieu du nom de la source)
-o produire un fichier objet, le nom du fichier suit
-b produire un fichier binaire brut, le nom du fichier peut suivre. Il s'agit d'un fichier binaire « brut » avec
pas d'en-tête, s'il n'y a pas -s option le fichier commence à l'emplacement 0.
-s produire un fichier de symboles ASCII, le nom du fichier suit. Le format de ce tableau est
conçu pour être facile à analyser pour l'encapsulation et les activités connexes en relation
aux fichiers binaires créés avec le -b option. Si un fichier binaire ne démarre pas à
emplacement zéro les deux premiers éléments du tableau sont les adresses de début et de fin de
le fichier binaire.
-u supposer que les symboles non définis sont importés avec un segment non spécifié.
-w- permettre à l'assembleur d'imprimer des messages d'avertissement.
-t n déplacer toutes les données de segment de texte dans le segment n+3.
AS86 SOURCE
Caractères spéciaux
* Adresse du début de la ligne courante.
; ! L'un ou l'autre marque le début d'un commentaire. De plus, tout « inattendu »
caractère au début d'une ligne est supposé être un commentaire (mais c'est aussi
affiché au terminal).
$ Préfixe pour les nombres hexadécimaux, la syntaxe 'C', par exemple 0x1234, est également acceptée.
% Préfixe des nombres binaires.
# Préfixe pour les opérandes immédiats.
[ ] Spécifie un opérande indirect.
Contrairement à MASM, l'assembleur n'a aucune information de type sur les étiquettes juste un segment et
décalage. Cela signifie que la façon dont cet opérateur et le préfixe immédiat fonctionnent sont
comme les assembleurs traditionnels.
Exemples :
hache mobile, bx
jmp bx
Adressage direct des registres, le saut copie BX dans PC.
hache de mouvement,[bx]
jmp [bx]
Adressage de registre indirect simple, le saut déplace le contenu de l'emplacement
spécifié par BX dans le PC.
hache de mouvement,#1234
Valeur immédiate, ax devient 1234.
hache de déménagement, 1234
mov hache,_bonjour
mov hache,[_hello]
Adressage absolu, ax est défini sur le contenu de l'emplacement 1234. Notez la troisième option
n'est pas strictement cohérent mais est en place principalement pour la compatibilité asld.
mov hache,_table[bx]
mov hache,_table[bx+si]
déplacer eax,_table[ebx*4]
mov hache,[bx+_table]
mov hache,[bx+si+_table]
déplacer eax,[ebx*4+_table]
Adressage indexé, les deux formats sont ok, je pense que le premier est plus correct mais je
ont tendance à utiliser la seconde. :-)
Conditionnel
SI, AUTRE, AUTREMENT, Endif
Condition numérique
SFI, ELSEIFC
Comparaison de chaînes (str1,str2)
FAIL .ÉCHOUER
Générer une erreur utilisateur.
Lié au segment
.TEXTE .CHAMBRE .LES DONNÉES .BSS
Définir le segment actuel. Ceux-ci peuvent être précédés du mot-clé .SECTE
LOC Définir le segment numérique 0=TEXTE, 3=DONNÉES,ROM,BSS, 14=MAX. L'ordre des segments défini par le
le linker est maintenant 0,4,5,6,7,8,9,A,B,C,D,E,1,2,3. Segment 0 et tous les segments supérieurs à 3
sont supposés être des segments de texte. Notez que les restrictions de taille de 64k ne sont pas imposées pour
segments 3 à 14.
Définition du type d'étiquette
EXPORTATION PUBLIC .DÉFINIR
Etiquette d'export définie dans cet objet
ENTRÉE Forcer l'éditeur de liens à inclure l'étiquette spécifiée dans a.out
.GLOBL .MONDIAL
Définissez l'étiquette comme externe et forcez l'importation même si elle n'est pas utilisée.
EXTERNE EXTERNE IMPORTER .EXTERNE
Importer la liste des étiquettes définies en externe
NB : cela n'a pas de sens d'utiliser des importations pour des fichiers binaires bruts.
.ENTRER Marquer l'entrée pour l'ancien fichier binaire (obs)
Définition des données
DB .DONNÉES1 .OCTET FCB
Liste d'objets à 1 octet.
DW .DONNÉES2 .COURT FDB .MOT
Liste d'objets à 2 octet.
DD .DONNÉES4 .LONGUE
Liste d'objets à 4 octet.
.ASCII FCC
Chaîne ASCII copiée dans la sortie.
.ASCIZ Chaîne ASCII copiée dans la sortie avec fin nul octet.
Définition de l'espace
.BLKB RMB .ESPACER
L'espace est compté en octets.
.BLKW .ZERO
L'espace se compte en mots. (2 octets chacun)
COMMUNICATION .COMM LCOMM .LCOMM
Définition des données de zone commune
Autres pseudo-opérations utiles.
.ALIGNER .MÊME
Alignement
ÉQU Définir l'étiquette
SET Définir une étiquette redéfinissable
ORG .ORG
Définir l'emplacement d'assemblage
BLOC Définir l'emplacement d'assemblage et empiler l'ancien
FINB Retour à l'emplacement d'assemblage empilé
ÉCONOMISEZ COMPRENDRE
Insérer un nouveau fichier (pas de guillemets sur le nom)
UTILISATION16 [cpu]
Définissez la taille d'opérande par défaut sur 16 bits, l'argument est le type de processeur que le code doit utiliser
exécuter sur (86, 186, 286, 386, 486, 586) instructions pour le processeur plus tard que spécifié
donner un avertissement.
UTILISATION32 [cpu]
Définissez la taille d'opérande par défaut sur 32 bits, l'argument est le type de processeur que le code doit utiliser
exécuter sur (86, 186, 286, 386, 486, 586) instructions pour le processeur plus tard que spécifié
donner un avertissement. Si le processeur n'est pas mentionné, l'assembleur s'assure qu'il est >= 80386.
FIN Fin de compilation pour ce fichier.
.AVERTIR Changer les avertissements
.LISTE Annonces activées/désactivées (1,-1)
.MACLISTE
Listes de macros activées/désactivées (1,-1)
Macros, qui fonctionnent maintenant, la forme générale est comme ça.
MACRO saxophone
mov hache,#?1
RÉPARER
saxo(1)
Non implémenté/inutilisé.
IDENT Définit la chaîne d'identité de l'objet.
SETDP Définir la valeur DP sur 6809
MAP Définir le numéro de carte de la table des symboles binaires.
Enregistre
BP BX DI SI
EAX EBP EBX ECX EDI EDX ESI ESP
AXE CX DX SP
AH AL BH BL CH CL DH DL
CS DS ES FS GS SS
CR0 CR2 CR3 DR0 DR1 DR2 DR3 DR6 DR7
TR3 TR4 TR5 TR6 TR7 ST
Spécificateurs de type d'opérande
BYTE DWORD FWORD LOIN PTR PWORD QWORD TBYTE MOT PRES
Le 'proche et 'loin' ne permettent pas la programmation multi-segments, toutes les opérations 'loin'
sont spécifiés explicitement par l'utilisation des instructions : jmpi, jmpf, callf,
retf, etc. L'opérateur 'Near' peut être utilisé pour forcer l'utilisation de 80386 16bit
branches conditionnelles. Les opérateurs 'Dword' et 'word' peuvent contrôler la taille de
opérandes sur les sauts éloignés et les appels.
Instructions générales.
Ce sont en général les mêmes que les instructions trouvées dans n'importe quel assembleur 8086, le
les principales exceptions étant quelques instructions « Bcc » (BCC, BNE, BGE, etc.) qui sont
raccourcis pour une branche courte plus un saut en longueur et 'BR' qui est le plus long
saut inconditionnel (16 ou 32 bits).
Longues branches
BCC BCS BEQ BGE BGT BHI BHIS BLE BLO BLOS BLT BMI BNE BPC BPL BPS BVC BVS BR
Intersegment
CALLI APPEL JMPI JMPF
Instructions du modificateur de segment
ESEG FSEG GSEG SSEG
Instructions d'opération d'octet
ADCB ADDB ANDB CMPB DECB DIVB IDIVB IMULB INB INCB MOVB MULB NEGB NOTB ORB SORTIE
RCLB RCRB ROLB RORB SALB SARB SHLB SHRB SBBB SUBB TESTB XCHGB XORB
Instructions standards
AAA AAD AAM AAS ADC ADD ET ARPL BOUND BSF BSR BSWAP BT BTC BTR BTS CALL CBW CDQ
CLC CLD CLI CLTS CMC CMP CMPS CMPSB CMPSD CMPSW CMPW CMPXCHG CSEG CWD CWDE DAA DAS
DEC DIV DSEG ENTRER HLT IDIV IMUL IN INC INS INSB INSD INSW INT INTO INVD INVLPG INW
IRET IRETD J JA JAE JB JBE JC JCXE JCXZ JE JECXE JECXZ JG JGE JL JLE JMP JNA JNAE
JNB JNBE JNC JNE JNG JNGE JNL JNLE JNO JNP JNS JNZ JO JP JPE JPO JS JZ LAHF LAR LDS
LEA LAISSER LES LFS LGDT LGS LIDT LLDT LMSW SERRURE LODB LODS LODSB LODSD LODSW LODW
LOOP LOOPE LOOPNE LOOPNZ LOOPZ LSL LSS LTR MOV MOVS MOVSB MOVSD MOVSW MOVSX MOVW
MOVZX MUL NEG NOP PAS OU SORTIE SORTIE SORTIE SORTIE SORTIE SORTIE SORTIE POP POPA POPAD POPF POPFD
POUSSER POUSSER POUSSER POUSSER POUSSER POUSSER RCL RCR RDMSR REP REPE REPNE REPNZ REPZ RET RETF
RETI ROL ROR SAHF SAL SAR SBB SCAB SCAS SCASB SCASD SCASW SCAW SEG SETA SETAE SETB
SETBE SETC SETE SETG SETGE SETL SETLE SETNA SETNAE SETNB SETNBE SETNC SETNE SETNG
SETNGE SETNL SETNLE SETNO SETNP SETNS SETNZ SETO SETP SETPE SETPO SETS SETZ SGDT
SHL SHLD SHR SHRD SIDT SLDT SMSW STC STD STI STOB STOS STOSB STOSD STOSW STOW STR
SUB TEST VERR VERW WAIT WBINVD WRMSR XADD XCHG XLAT XLATB XOR
Point flottant
F2XM1 FABS FADD FADDP FBLD FBSTP FCHS FCLEX FCOM FCOMP FCOMPP FCOS FDECSTP FDISI
FDIV FDIVP FDIVR FDIVRP FENI FFREE FIADD FICOM FICOMP FIDIV FIDIVR FILD FIMUL
FINCSTP FINIT FIST FISTP FISUB FISUBR FLD FLD1 FLDL2E FLDL2T FLDCW FLDENV FLDLG2
FLDLN2 FLDPI FLDZ FMUL FMULP FNCLEX FNDISI FNENI FNINIT FNOP FNSAVE FNSTCW FNSTENV
FNSTSW FPATAN FPREM FPREM1 FPTAN FRNDINT FRSTOR FSAVE FSCALE FSETPM FSIN FSINCOS
FSQRT FST FSTCW FSTENV FSTP FSTSW FSUB FSUBP FSUBR FSUBRP FTST FUCOM FUCOMP FUCOMPP
ATTENDRE FXAM FXCH FXTRACT FYL2X FYL2XP1
En utilisant GASP
Le préprocesseur assembleur Gnu fournit des implémentations raisonnables de biais utilisateur
pseudo-opcodes.
Il peut être invoqué sous une forme similaire à :
haleter [-une...] des dossiers [fichier2.s] |
as86 [...] - [-o obj] [-b coffre]
Sachez cependant que Gasp génère une erreur pour . Org commandes, si vous n'utilisez pas
syntaxe alternative que vous pouvez utiliser org à la place, sinon utilisez bloc , finb. La directive
Exporter est traduit en .global, qui force une importation, si vous créez un fichier en utilisant
-b utilisé public or .définir à la place.
Les options de la liste GASP n'ont pas de support dans as86.
Utilisez as86 en ligne en utilisant les services onworks.net