2017-01-21 4 views
-1

j'ai déclaré constantes au-dessus du programme, comme8086 ASM: constantes de lecture du fichier d'entrée dans DOSBox

cal   equ 16 
length  equ 1000 

Et ma question est la suivante: puis-je déclarer des constantes dans mes .txt fichiers comme ceci:

cal,cal,cal 

Pour lire le fichier que j'utilise

mov bx, ax  ;file handler 
mov ah, 3fh  ;interrupt number 
mov cx, length 
mov dx, offset music 
int 21h 

et je l'ai déclaré dans le segment de donnéesTout fonctionne correctement lors de la lecture, mais nous devons lire les constantes et non le nombre de caractères ASCII. Par exemple, si j'ai:

cal 

Il se lit comme suit:

tab[0]= ascii of c 
tab[1]= ascii of a etc 

mais je dois

tab[0]= 16 

Est-ce possible dans DOSBox avec ASM?
Désolé pour mon anglais et merci d'avance;).

+0

Ce sera votre travail de traduire la chaîne 'cal' dans la valeur. Juste comme dans n'importe quelle autre langue. Vous devrez coder quelque chose comme 'si (strcmp (token," cal ") == 0) tab [i] = cal;' – Jester

+0

Je ne suis pas sûr de ce que vous entendez par "constantes de lecture."Vous pouvez certainement utiliser les constantes pour vérifier des valeurs spécifiques:' cmp cx, cal' qui signifie fondamentalement 'cmp cx, 16' Mais je ne vois pas comment" la valeur ascii de c "(qui est 99) pourrait être mappé à 16? –

Répondre

0

Il semble que vous confondiez beaucoup de choses. Les constantes que vous avez définies ci-dessus sont traduites à partir des chaînes de texte via EQU en valeurs entières à l'heure d'assemblage (lorsque vous assemblez le programme). Les chaînes que vous essayez de lire à partir de votre fichier texte ne sont pas valeurs entières - elles sont toujours juste texte (sans mappage vers les valeurs entières souhaitées).

Reconstruire cette application à partir du fichier binaire serait très compliqué si cela était possible.

Je doute que cela est encore possible - à moins que, en créant un dictionnaire séparé avant l'assemblage - parce que la relation texte-> valeur entre cal et 16 est utilisé par le préprocesseur pour le remplacement de texte avant d'assembler et même pas l'assembleur sait de celui-ci. Par conséquent, il ne sera pas présent dans les informations de débogage (comme un fichier .PDB).

Même si les informations de débogage doivent être incluses dans le fichier binaire ou livrées avec, il serait très compliqué de reconstruire une telle relation.


Donc, la réponse courte est:
Vous devez créer un Dictionnaire ou une autre application de cal (string) à 16 (int) par vous-même pour analyser les .txt fichiers et obtenir vos valeurs souhaitées .