J'essaie de diviser un très grand fichier .ASM en plusieurs bibliothèques externes en ne laissant que mon programme principal dans main.asm.Comment j'utilise un EQU externe dans une expression dans MASM 5.10
C'est un jeu, donc j'espérais partager mon code d'entrée du clavier en input.asm, et mon code de carte son Adlib dans music.asm etc.
Quoi qu'il en soit, mon problème spécifique est que beaucoup de mes les procédures ont des lignes comme celle-ci qui utilisent EQU dans les expressions.
mov ax, ((scrWidth*YCoord)+XCoord)
Lorsque je déplace les procédures qui contiennent ces lignes dans une bibliothèque externe et tentent d'assembler cette bibliothèque externe, MASM me donne l'erreur suivante.
A2032: Illegal use of external
L'erreur a un sens pour moi. Comme ils sont externes, l'assembleur ne sait pas directement ce que scrWidth, YCoord ou XCoord sont, donc il ne peut pas les additionner ou les multiplier. Je suppose que c'est pourquoi il ne peut pas générer le fichier obj. Donc, juste pour clarifier les choses, voici deux exemples de fichiers complets.
main.asm
TheStack SEGMENT STACK
DB 64 DUP ('THESTACK')
TheStack ENDS
VarData SEGMENT PUBLIC
PUBLIC const1,const2
const1 EQU 1
const2 EQU 2
VarData ENDS
EXTRN Proc1:PROC
Code SEGMENT PUBLIC
assume cs:Code,ds:VarData
MAIN PROC
START:
mov ax, VarData ;load DS
mov ds, ax
call Proc1 ;call external procedure
mov ah,4ch ;exit to dos
mov al,0
int 21h
Main ENDP
Code ENDS
END Start
UTIL.ASM
VarData SEGMENT PUBLIC
EXTRN const1:ABS,const2:ABS
VarData ENDS
Code SEGMENT PUBLIC
PUBLIC Proc1
assume cs:Code,ds:VarData
Proc1 PROC
mov ax, (const1*const2) ;this generates the error
ret
Proc1 ENDP
Code ENDS
END
Je ne tente une solution de contournement en changeant les années EQU dans main.asm en variables au lieu des constantes, puis les importer dans UTIL.ASM comme octets réels. Puis, à partir de là, j'ai essayé de les mapper en arrière dans EQU dans Util.ASM, mais l'erreur est la même.
Quelqu'un sait-il d'une solution de contournement? Je sais que c'est un assembleur très obsolète, mais je ne sais vraiment pas si c'était une limitation connue qui a été corrigée dans les révisions ultérieures de MASM.
Cela ressemble à une utilisation parfaite de 'include'. Déplacez tous les communs 'equ' dans leur propre fichier. –
@David Eh bien, cela répond à cela. J'ai complètement oublié 'include'. –
Vous aurez peut-être aussi des moyens de réorganiser un peu votre code, donc toutes les parties du code ne devront pas comprendre les coordonnées/tailles d'affichage, etc ... mais seulement afficher les fonctions liées à la sortie, etc. (certaines constantes sera nécessaire dans plusieurs "modules" en même temps, il est donc nécessaire de l'inclure) – Ped7g