9
votes

Écrire un assembleur, Besoin d'aide

J'écris un assembleur 8086 pour un projet collégial. J'ai traversé du matériel sur la conception du compilateur sur Internet et je lis le «livre de dragon» des compilateurs. Mais le problème est que je n'ai pas pu trouver beaucoup sur l'assemblage (génération de code d'objet) ici. Existe-t-il des bons livres ou des liens pour la conception de l'assembleur. Où dois-je commencer?, Je suis passé par analyse lexicale, analyse et génération de code intermédiaire.


0 commentaires

5 Réponses :


7
votes

Pouvez-vous simplement punter et générer un fichier .com? Il est chargé dans un segment de code à: 0100 et exécuté avec CS, DS, ES et SS tout pointa sur ce segment.

Si vous pouviez le faire, la génération de code augmente beaucoup plus facilement.

Votre programme de test serait simple xxx


6 commentaires

Hmm. Les souvenirs du passé viennent de passer dans mon esprit en lisant votre code. Ça fait longtemps...


@Yves: Même ici, écrit le même programme en 80886, Z80, 6301, 6502 et 1802 au fil des ans, mais aucun au cours de la dernière décennie.


Une bonne réponse, mais vous devez peut-être indiquer que l'exemple ci-dessus nécessite des MS-DOS ou une coquille MS-DOS sous Windows. Dieu sait seulement où INT 21 vous conduirait dans d'autres systèmes d'exploitation


À droite, comme l'implique MacLaughlin, vous ne pouvez pas utiliser d'interruption en mode réel Windows, ce qui signifie que le code ci-dessus ne fonctionnera dans aucun système d'exploitation après Windows 98.


MDR! Les jours des programmes qui sont 5 instructions, sont partis depuis longtemps.


@ Doug65536: Ouais, c'est 6 ou peut-être même 7 instructions maintenant. PUSH, PUSH, PUSH, PUSH, Appelez Messageboxa , RET . (Les tuts de l'iczelion recommandent push 0 , exitecrocrocess plutôt que reta .) L'horreur!




1
votes

Vous avez besoin d'un mappage entre les instructions mnémoniques telles que MOV et OPCODES, voir OPCODEMAP . En outre, vous avez besoin d'informations combien d'arguments (et de largeur des opérateurs) une instruction nécessite (codés dans des champs de bits, qui vous feront économiser beaucoup de temps si vous obtenez ce droit).

Je doute que le livre Dragon vous aiderait beaucoup.

L'art de Langage de montage La programmation est une bonne référence.


1 commentaires

Le lien semble brisé. Est-ce le même: Cs.smith.edu/~thiebaut/artofassembly/artofasme. HTML



3
votes

Le livre de dragon est totalement la mauvaise source, car un assembleur n'est pas un compilateur. Le "grammer" d'une ligne d'assembleur est extrêmement simple (grammer régulier - pas sensible au contexte).

La partie de génération de code pour un assembleur est presque non existante. Obtenez un bon livre de référence sur les opcodes de votre processeur cible et générez simplement les octets comme expliqué.

Il y a quelques beaux assembleurs simples et vous devriez les regarder. L'apprentissage par la lecture du code est un moyen très efficace pour un projet collégial. Vous en aurez besoin car le code d'assembleur Intel est extrêmement moche au moins si vous souhaitez également cibler certaines des extensions.


0 commentaires

0
votes

Essayez d'utiliser l'infrastructure de compilateur LLVM.

http://llvm.org/projectwithllvm/


0 commentaires