200 MIPS assembleur s'il vous plaît aider

D

Deathlich

Guest
Bonjour à tous, J'ai des projets pour faire ac / c programme agit comme assembleur MIPS, en d'autres termes je dois mettre en oeuvre ISA en utilisant un logiciel.

Pour faire clair, l'utilisateur écrire un fichier. Txt, y compris des instructions MIPS (par exemple, "ADD T9 $, $ a0, $ T5»), et je dois lire les instructions et effectuer l'exécuter sur les registres (variables dans mon programme), Mon principal problème dans la branche et des instructions de saut.Aussi je ne le scanner, où je mets tous les fichiers utilisateur dans un tableau, mais je pense à changer cela prenne une instruction à la fois (une seule ligne).

Une dernière chose, les instructions de la mémoire.comment mettre en œuvre la mémoire?utilisant un tableau de struct?

aucune idée, aide, liens que ce soit clair.
merci d'avance

 
Deathlich,

Je fais comme ceci somethile pour le moment, je développe un composant pour C Builder qui peut exécut un script (programme), ce programme strict est généré anoder forme ....

Je préfère utiliser le spript au format hexadécimal, non ASCII.Avec Hex je peux déclarer ma mémoire, par exemple:

unsigned __int16 MemoryMap [64 * 1024]; / / Pour une mémoire de 64 Ko ...

Que je définir l'adresse (index du tableau) de 0x0000 à 0x0FFF à la mémoire de données et les autres (0x1000 à 0xFFFF) à la mémoire du programme.

Les registres a été déclarée comme ceci:
Règl Union typedef
(
__int16 B16;
__int8 b8 [2];
Tregs);

typedef struct registres
(
Tregs PC;
SP Tregs;
Tregs R2;
Tregs R3;
Tregs R4;
Treg R5;
Tregs R6;
Tregs R7;
Tregs R8;
Tregs R9;
Tregs R10;
Tregs R11;
Tregs R12;
Tregs R13;
Tregs R14;
Tregs R15;
TCPURegs);

Registres TCPURegs;

Avec cela, vous pouvez analize avec un commutateur de la valeur de MemoryMap [] Registers.PC, et Wat déci à faire, quelque chose de passer à un registre, somthin déplacer pour incrémenter la position de mémoire, diminution ou de test du registre position de mémoire /.

Pour moi, il fonctionne, mais le programme n'est pas écrit uning un éditeur de texte, vous devez vous fait un compilateur (vous écrivez l'assembleur et le compilateur Tho convertir en hexadécimal des valeurs, comme Borland TASM assembleur pour faire de 8088).

C'est, je voudrais vous a aidé ....

Deathlich a écrit:

Bonjour à tous, J'ai des projets pour faire ac / c programme agit comme assembleur MIPS, en d'autres termes je dois mettre en oeuvre ISA en utilisant un logiciel.Pour faire clair, l'utilisateur écrire un fichier. Txt, y compris des instructions MIPS (par exemple, "ADD T9 $, $ a0, $ T5»), et je dois lire les instructions et effectuer l'exécuter sur les registres (variables dans mon programme), Mon principal problème dans la branche et des instructions de saut.
Aussi je ne le scanner, où je mets tous les fichiers utilisateur dans un tableau, mais je pense à changer cela prenne une instruction à la fois (une seule ligne).Une dernière chose, les instructions de la mémoire.
comment mettre en œuvre la mémoire?
utilisant un tableau de struct?aucune idée, aide, liens que ce soit clair.

merci d'avance
 
thnx beaucoup, cela a été très utile pour moi, mais encore, la mise en œuvre de la JMP et instructions de branchement sont source de confusion, ou de son énorme quantité d'instructions m'embrouiller

<img src="http://www.edaboard.com/images/smiles/icon_razz.gif" alt="Razz" border="0" />
 
Eh bien ..L'instruction de saut est très simple, tout comme les autres ...

Code:# Define DIRECTION 0x0003

# Define JUMP 0x0004

# Define OTHER_INSTRUCION 0x0005/ / Mettez cette conde l'intérieur d'un Thread

while (1)

(

switch (MemoryMap [Registers.PC.b16])

(

DIRECTION cas:

Registers.PC.b16 = [MemoryMap Registers.PC.b16 1]; / / Ne l'instruction de branchement

break;JUMP cas:

Registers.PC.b16 = (int) MemoryMap [Registers.PC.b16 1]; / / Ne l'instruction de saut relative

break;OTHER_INSTRUCION cas:

/ / Placez le code d'une autre instruction ici (comme MOVE, BITCLEAR BitSet ...)Registers.PC.b16 = 3; / / Incrémente le nombre de mots de la présente instruction (Condé (un mot) Argument (0 ou 1 ou 2 ou ... ou n mots)

break;

)

)

 

Welcome to EDABoard.com

Sponsor

Back
Top