J'ai réussi à créer des segments de pile, de données et de code distincts sous TASM en utilisant la directive SEGMENT
, mais quelque chose me dérange toujours. Lorsque le code suivant est assemblé avec Turbo Assembler 2.0, TLINK produit un binaire dont la taille est de l'ordre de 90 Ko.Allocation de pile et de données en mode réel MZ .exe sous Turbo Assembler 2.0
.286
myStack segment para stack 'stack'
db 0FFFFh dup (?)
ends myStack
myData segment para 'data'
msg db 'Memes!$'
db 7FFFh dup (?)
ends myData
myCode segment para 'code'
assume cs:myCode
assume ss:myStack
start:
mov ax,myData
mov ds,ax
push offset msg
call write
add sp,2
mov ah,4ch
int 21h
write:
push bp
mov bp,sp
mov dx,[bp+4]
mov ah,9h
int 21h
pop bp
ret
ends myCode
end start
Maintenant, il me semble que le format de fichier MZ devrait permettre un .exe de préciser qu'il nécessite l'allocation de mémoire au-delà de ce qui est réellement contenue dans l'image binaire (via les min/paragraphes max de mémoire allouée en plus à l'entrée de la taille du code, je devine). Donc ma question est: comment est-ce qu'on amène l'assembleur/éditeur de liens à générer un fichier .exe avec l'en-tête approprié pour allouer de la mémoire sans inclure directement les valeurs d'espace réservé dans l'image binaire?
Cela a fonctionné. Chose amusante, je l'ai essayé moi-même il y a quelques heures à peine, et l'assembleur ne cessait de se plaindre de symboles inconnus pour les noms de segments! Je jure que c'était exactement la même chose que la vôtre, mais même avec le commutateur multipass/m2, il ne serait pas assemblé. Étrange. – chili
@chili Vous avez peut-être déplacé les segments ** après ** 'start fin' plutôt qu'avant? –
Je pense que vous pouvez avoir raison, o Merci l'homme! – chili