Win3x.Org

Windows & DOS Community

Version bridée de macro-assembleur ?

Post Reply   Page 1 of 2  [ 11 posts ]
Jump to page 1 2 »
Author Message
gm86
Post subject: Version bridée de macro-assembleur ?
Posted: 01 December, 14:41
Membre inscrit
User avatar
Offline
 
Posts: 676
Joined: 01 September, 19:07
 
Dans la rubrique Requêtes, j'avais demandé si une section rassemblant les copies de disquettes d'ouvrages pouvaient être créée. J'ai signalé que j'en avais deux à proposer en rapport avec la programmation. Or, parfois, les sources de programme contiennent des erreurs dues aux longueurs des chaînes après traduction. Je ne peux tout vérifier pour trois raisons :
- le nombre important de programmes et routines ;
- les différents compilateurs à manipuler ;
- les différences de fonctionnement parmi la forêt d'interpréteurs BASIC existant.
Par contre, j'ai pu constater une bizarrerie à l'intérieur d'un de mes outils d'assemblage.
Il s'agit du macro-assembleur IBM version 2.00 pour PC. Je voudrait savoir s'il n'y a pas eu deux sous-versions.
Je m'explique. Je me le suis procuré via Internet à cette adresse :
http://www.retroarchive.org/dos/lang/index.html
On peut aussi trouver la moitié de l'archive sur Vetusware mais avec la date que je sais originale :
18/07/84.
L'heure indiqué est 12:01:00 : on trouve souvent midi pour les outils IBM.
Cette version comporte un macro-assembleur et un simple assembleur 8086.
MASM supportent les directives de processeurs .186, .286C (286 mode réel donc idem .186), .8086 (pour dire fin de 186 ou 286) et de coprocesseurs .8087, .287.
ASM les reconnaît puisqu'il affiche le code d'erreur 84 alors qu'une erreur de syntaxe est indiquée par 10. ASM n'assemble que le langage 8086, ne supporte pas les macros et ne possède pas le texte des messages d'erreurs, ce qui diminue ses besoins en mémoire.
Le problème est que ces utilitaires sont bridés. La directive .286P est manquante alors que MASM contient les instructions 80286 du mode protégée : il suffit de le vérifier avec un éditeur hexadécimal (les données sont sans doute au format MSF pour Modula System File ou MicroSoft...). Avec ce même éditeur, on voit que l'emplacement où devrait se trouver la directive affiche quatre têtes de bonhomme (caractère 2) !
J'ai corrigé cela et les outils ont l'air de remplir leur rôle :
- ASM affiche l'erreur 84 lorsqu'il rencontre la directive .286P ;
- MASM assemble les instructions spécifiques au mode protégé du 80286.

Voici mes trois suppositions à propos de ce bridage :
- il ne s'agit pas d'une version professionnelle ;
- le support des instructions du mode protégé est défaillant ;
- l'équipe Microsoft pour IBM ne savait pas quelle désignation donner à la directive !
Je serai gré à quiconque m'apportera des informations sur l'IBM MACRO Assembler Version 2.00 et ses outils, par exemple les paramètres de commande ou les différentes variantes de la version.

Last edited by gm86 on 01 November, 13:20, edited 5 times in total.

_________________

C:\ONGRTLNS.W95


Top
Quote
attilavv
Post subject: Re: Version bridée de macro-assembleur ?
Posted: 01 December, 18:28
Membre inscrit
Offline
 
Posts: 536
Joined: 26 December, 13:22
 
J'ai trouvé cela à) l'intérieur :
IBM Personal Computer Assembler Version 2.00 ..... BW ....... PS1

Une version low cost pour IBM et pour le PS1 ?
J'ai des doutes sur ce point ...

Une mauvaise copie me parait plus plausible, car il apparait des ".PAS".
Il manque les librairies, un fichier pour certaines fonctionnalités.
Et oui, à l'époque une installation pouvait se faire sur un XT et pour gagner de la place lors de l'installation le type de machine était demandé.

Par exemple, une version de Windows 95 sous forme déjà installé fonctionne "très" bien ... sauf si il manque des fichiers qui n'ont pas été installé.

_________________

-----------------------------------------
Alienware M18x i7 3840 / CF 7970 / 32Gb 1866Mhz / SSD 256 + Raid 512Gox2
Serveur Minecraft : ASUS portable W90VP T9400 3Ghz CF 4870.


Top
Quote
gm86
Post subject: Re: Version bridée de macro-assembleur ?
Posted: 01 December, 20:54
Membre inscrit
User avatar
Offline
 
Posts: 676
Joined: 01 September, 19:07
 
L'assembleur 1.00d de Arrowsoft qui est compatible MASM 3 contient aussi ces inscriptions PS1 & .MSF. Quant à l'archive, l'ensemble des fichiers ne peut dépasser la taille d'une disquette de 320 Ko (compatible DOS 1.1). De plus, le fichier .PAS constitue un exemple d'appel de routine d'assemblage dans un langage de haut niveau, ici le PASCAL. Le seul fichier un tant soi peu suspect est LINK.EXE qui possède beaucoup d'octets nuls.
Par contre, j'ai remarqué de grandes ressemblances entre IBM MASM 2 et la version 1.00d de Arrowsoft. Les données sont issues des mêmes fichiers .MSF. La correction est en adéquation avec l'exécutable d'origine.
Quoi qu'il en soit, cet assembleur me semble être un outil correct. Lors d'essais, je n'ai guère eu à modifier les fichiers sources destinés à MASM 4, juste eu besoin de savoir que l'apostrophe (caractère 39) ne peut être doublée pour être représentée dans une chaîne de caractères. La différence principale entre les deux est leur manière d'ordonner les segments par défaut :
- alphabétiquement (/A) pour IBM MASM 2 ;
- par ordre d'apparition dans le fichier source (/S) avec les versions suivantes.


----
Publié : Mardi 07 Décembre 2010 15:31:41

Voici la syntaxe des outils fournis dans l'archive :
MASM asm,obj,lst,crf [options][;]
/A      Range les segments par ordre alphabétique
/D      Liste la première passe (pour trouver les erreurs de phase)
/E      Assemble en vue de l'émulation du coprocesseur arithmétique
/N      Supprime la table des symboles du listing
/O      Notation octale et non hexadécimale dans le listing
/R      Usage des réels du coprocesseur arithmétique
/S      Range les segments par ordre d'apparition
/X      Inclut les assemblages conditionnels faux dans le listing
Option par défaut : /A (et non /S) 
Options non supportées par ASM : /E & /R

CREF crf,ref
LINK [options] objets,exe,map,libs[;]
Les différents objets et bibliothèques doivent être séparés par le signe +
ou par un blanc.
/DSALLOCATE
/HIGH
/LINENUMBERS
/MAP[:symboles_max]
/NODEFAULTLIBRARYSEARCH
/NOGROUPASSOCIATION
/PAUSE
/QQDEBUG
/STACK:octets
Chaque option peut être abrégée tant que cela n'apporte aucune ambiguïté.

LIB lib [opérations],lst,nouvelle lib
Opérations :    -objet  Supprimer le module de la bibliothèque
                +objet  Ajouter le module dans la bibliothèque
                *objet  Placer le module de la bibliothèque dans un fichier objet
Vu que le petit assembleur ASM (the small assembler) n'indique que les numéros d'erreurs,
il est bon d'avoir la liste des messages du macro-assembleur MASM (IBM Personal Computer MACRO Assembler Version 2.00 précisément) :
00	Block nesting error
01	Extra characters on line
02	Register already defined
03	Unknown symbol type
04	Redefinition of symbol
05	Symbol is multi-defined
06	Phase error between passes
07	Already had ELSE clause
08	Not in conditional block
09	Symbol not defined
10	Syntax error
11	Type illegal in context
12	Should have been group name
13	Must be declared in pass 1
14	Symbol type usage illegal
15	Symbol already different kind
16	Symbol is reserved word
17	Forward reference is illegal
18	Must be register
19	Wrong type of register
20	Must be segment or group
21	Symbol has no segment
22	Must be symbol type
23	Already defined locally
24	Segment parameters are changed
25	Not proper align/combine/class
26	Reference to mult defined
27	Operand was expected
28	Operator was expected
29	Division by 0 or overflow
30	Shift count is negative
31	Operand types must match
32	Illegal use of external
33	Must be record field name
34	Must be record or fieldname
35	Operand must have size
36	Must be var, label or constant
37	Must be structure field name
38	Left operand must have segment
39	One operand must be const
40	Operands must be same or 1 abs
41	Normal type operand expected
42	Constant was expected
43	Operand must have segment
44	Must be associated with data
45	Must be associated with code
46	Already have base register
47	Already have index register
48	Must be index or base register
49	Illegal use of register
50	Value is out of range
51	Operand not in IP segment
52	Improper operand type
53	Relative jump out of range
54	Index displ. must be constant
54	Illegal register value
56	No immediate mode
57	Illegal size for item
58	Byte register is illegal
59	CS register illegal usage
60	Must be AX or AL
61	Improper use of segment reg.
62	No or unreachable CS
63	Operand combination illegal
64	Near JMP/CALL to different CS
65	Label can't have seg. override
66	Must have opcode after prefix
67	Can't override ES segment
68	Can't reach with segment reg
69	Must be in segment block
70	Can't use EVEN on BYTE seg.
71	Forward needs override or far
72	Illegal value for DUP count
73	Symbol is already external
74	DUP is too large for linker
75	Usage of ?(indeterminate) bad
76	More values than defined with
77	Only initialize list legal
78	Directive illegal in STRUC
79	Override with DUP is illegal
80	Field cannot be overridden
81	Override is of wrong type
82	Register can't be forward ref
83	Circular chain of EQU aliases
84	8087 opcode can't be emulated               (MASM)
  	Feature not supported by the small Assembler (ASM)
85	End of file, no END directive
Comme on le constate, si le code d'erreur 84 émane du simple assembleur ASM, il indique une fonction supportée par le macro-assembleur MASM seulement.



P.S. : l'archive contient aussi le linker. Il s'agit de la version 2.2 de LINK.EXE.
Néanmoins, deux choses me chagrinent :
- les premiers assembleurs n'étaient pas livrés avec un linker car celui-ci se trouvait sur la disquette système du DOS ;
- ASM est moins sophistiqué que MASM pour fonctionner dans moins de 64 Ko (bien qu'une plus grande mémoire soit souhaitable avec la version 2), or LINK en demande plus.
MASM 2 date de l'époque où arriva le DOS 3 destiné au PC/AT d'IBM. Je ne sais pas s'il était fourni avec un linker. En tout cas, le fichier SAMPLE2.BAT de l'archive avertit de ne pas oublier d'introduire la disquette système sous DOS 1.1 pour pouvoir utiliser LINK (DOS 1.x ne pouvant être installé sur un disque dur).
D'ailleurs, dans PC-DOS 2.1, on peut récupérer la version 2.1 de LINK qui est moins gourmande en mémoire -- et dans laquelle les options NOGROUPASSOCIATION et QQDEBUG n'existent pas.
Je vois donc deux possibilité à la présence de la version 2.2 de LINK :
- elle a été ajoutée à l'archive de l'assembleur ;
- elle était livrée avec l'assembleur au cas où l'utilisateur posséderait une version récente de DOS sans linker donc un matériel récent avec suffisamment de mémoire pour son usage.

Je voudrais donc savoir si PC/DOS 3.0 était livré avec LINK.EXE et, comme il n'a pas été jugé utile de l'inclure dans l'archive, avec l'utilitaire EXE2BIN.


----
Publié : Vendredi 10 Décembre 2010 21:22:49

Le hasard fait bien les choses, je suis tombé ici :
http://winworldpc.com/downloads_mu.shtml
La version 2.2 de LINK.EXE provient de PC/DOS 3.0. Ce n'est que par la suite que LINK et EXE2BIN disparurent de PC/DOS. C'est pourquoi LINK était vendu avec MASM 4 et suivants -- je ne sais pas pour MASM 3.
Néanmoins, ce ne fut pas le cas de EXE2BIN pourtant indispensable dans la création de gestionnaires mais surtout de programmes au format COM. En effet, Microsoft cherchait à abandonner ces derniers au profit des exécutables de type EXE. D'ailleurs, les dernières versions de EXE2BIN issues de Microsoft vérifient la version du DOS qui les lancent dans le but d'être inutilisables avec les DOS suivants.

P.S. : ASM & MASM 2 sont conçus pour toutes les versions. Ainsi, ils savent gérer l'arborescence des répertoires existant depuis DOS 2 tout en étant exploitables sous un système antérieur. De même pour CREF, qui transforme le fichier CRF issu de MASM en fichier REF.
Quant à LIB, qui est complémentaire à LINK, il 'agit d'une version IBM livrée avec certaines distributions DOS. Contrairement à LINK, cet outil a la bonté de signaler qu'il ne supporte pas DOS 1. Néanmoins, il existe une version livrée avec MS/DOS 1.25 qui ne peut travailler, en conséquence, que dans le répertoire courant.
Notons que les derniers utilitaires EXE2BIN risquent de surestimer la taille du fichier COM résultant d'un fichier EXE créé par une version de LINK pour DOS 1.


----
Publié : Jeudi 27 Janvier 2011 14:13:20

Finalement, il semble que MASM 2.00 limitait les programmeurs au mode réel du 80286. Au lien suivant, l'auteur du programme a été obligé de créer des macros en vue d'utiliser les instructions LGDT et LMSW du mode protégé :
http://www.programmersheaven.com/download/1295/1/ZipView.aspx
Or, si on applique la correction que je préconise à l'assembleur, ces instructions sont bel et bien disponibles. Pour s'en convaincre, il suffit de modifier le programme avant de l'assembler avec MASM 2.00 ainsi corrigé :
- remplacer .286C par .286P ;
- supprimer les macros LGDT et LMSW ;
- ajouter QWORD PTR dans l'instruction LGDT GDT.
A propos de cet ajout, une version de MASM ultérieure à la 5.00 préférera FWORD (6 octets) à QWORD (8 octets) :
http://support.microsoft.com/kb/67439/en-us
lien de remplacement.

Des questions demeurent.
D'où vient ce bridage ? Etait-il appliqué au fichier original ?

Last edited by gm86 on 16 March, 19:36, edited 2 times in total.

_________________

C:\ONGRTLNS.W95


Top
Quote
attilavv
Post subject: Re: Version bridée de macro-assembleur ?
Posted: 27 January, 16:55
Membre inscrit
Offline
 
Posts: 536
Joined: 26 December, 13:22
 
MASM c'est Microsoft ...
Le bridage doit venir d'une sorte de version OEM pour IBM.

Microsoft avant le même problème qu'aujourd'hui avec Mozilla / Firefox ... une position dominante, un produit que certains n'aimaient pas comparer aux produits Borland.
Alors ce style de promo ... surtout que le DOS, oups PC était encore plus fonctionnel avec un CP/M.

Pour la petite histoire, j'ai commencé ( à l'école, 10 ans de retard ) avec des PC sous CP/M ( j'ai que 40 ans :lol: ).
Puis par la suite, 15 ans d'évolution ... Turbo Pascal ... Turbo C ...

IBM ne devait pas faire de support sur le MASM et donc à part faire des petits programmes, en cas de réel besoin, tout le monde s'achetait le gros packaging Microsoft avec toutes les documentations et le reste, c'est à dire un support téléphonique, des disquettes de mise à jour et j'en passe.


Prend de nos jours le Windows 7 Starter. C'est que pour les OEM et les clients peuvent facilement évoluer vers une version Home.

_________________

-----------------------------------------
Alienware M18x i7 3840 / CF 7970 / 32Gb 1866Mhz / SSD 256 + Raid 512Gox2
Serveur Minecraft : ASUS portable W90VP T9400 3Ghz CF 4870.


Top
Quote
gm86
Post subject: Re: Version bridée de macro-assembleur ?
Posted: 27 January, 21:00
Membre inscrit
User avatar
Offline
 
Posts: 676
Joined: 01 September, 19:07
 
Il est vrai que ce produit, à l'image de PC/DOS et MS/DOS, était disponible avec ou sans la référence à IBM -- en faisant fi des produits Microsoft pour machines partiellement compatibles IBM.
Ainsi, la version 3 de MASM date elle aussi de 1984 :
http://www.emsps.com/oldtools/msasmv.htm#masm20
La version pour IBM comporte un minimum de documentation. Voir aussi les photographies au lien suivant :
http://cgi.ebay.fr/IBM-Macro-Assembler-Version-2-0-1984-/190487131152
IBM était connu pour ses manuels précis. En revanche, comme vous le dites, Microsoft fournissait beaucoup de documentation avec ses outils de programmation (un manuel sur le langage, un sur son usage mixte, un sur le débogueur, un guide de référence, etc.).

D'ailleurs, lors de la réalisation de son PC, IBM demandait un système d'exploitation où les applications CP/M pouvaient être facilement portées ainsi que plusieurs outils de programmation (compilateurs, BASIC et assembleur). Le logo IBM était omniprésent.
Au fil des années, la licence et la taxe pour MS/DOS ont amené au monopole de Microsoft...


----
Publié : Samedi 26 Février 2011 14:32:06

Voici ce qu'on peut lire au lien suivant :
http://www.computercrowd.com/Itm2607326 ... _20__.aspx

The Programmer's Manual tells specific information how to use:
>Macro Assembler (MASM)
>Small Assembler (ASM)
>Structured Assembly Language Utilities (SALUT)
>Cross Reference Utility (CREF)
>Library Manager (LIB)
>Linker (LINK)


Peut-être LINK était-il fourni avec le macro-assembleur en prévision des machines avec DOS 2 et munies, par conséquent, de suffisamment de mémoire pour lancer la version 2.2. De toute façon, il faut bien expliquer l'usage de cet outil fourni, à l'époque, avec les disquettes du DOS et indispensable à la programmation.
A l'heure présente, je n'en sais pas plus.


P.S. : A ceux qui liront le sujet au bout de quatre mois.
attilavv wrote:
Il manque les librairies, un fichier pour certaines fonctionnalités.
Oui, une librairie d'émulation du coprocesseur arithmétique aurait été la bienvenue.

_________________

C:\ONGRTLNS.W95


Top
Quote
attilavv
Post subject: Re: Version bridée de macro-assembleur ?
Posted: 19 October, 08:58
Membre inscrit
Offline
 
Posts: 536
Joined: 26 December, 13:22
 
Je viens de tomber sur cette page :

http://www.retroarchive.org/dos/lang/index.html

ibm_asm1.zip IBM Assembler v1.00
ibm_asm2.zip IBM Assembler v2.00

Voir si c'est encore bridée ...

_________________

-----------------------------------------
Alienware M18x i7 3840 / CF 7970 / 32Gb 1866Mhz / SSD 256 + Raid 512Gox2
Serveur Minecraft : ASUS portable W90VP T9400 3Ghz CF 4870.


Top
Quote
gm86
Post subject: Re: Version bridée de macro-assembleur ?
Posted: 01 November, 00:12
Membre inscrit
User avatar
Offline
 
Posts: 676
Joined: 01 September, 19:07
 
Justement, il s'agit du lien cité dans le premier message.

Depuis, cet outil m'apporte toujours satisfaction. Le seul bug que j'ai eu à lui reprocher est que l'affichage de son mode interactif s'altère sur les petites configurations mémoire. Quant à LINK, je lui préfère la version 2.3, écrite en C, fourni avec le compilateur IBM PROFORT de Ryan-McFarland (que le site Retroarchive.org confond avec l'IBM FORTRAN 1.00). En effet, ce dernier produit quelquefois des fichiers objets incompatibles avec la version 2.2 de LINK.

Il est intéressant de voir que ce vieil assembleur ignore la dernière ligne du code source si celle-ci ne se termine pas par un retour à la ligne, à l'instar des interprètes BASIC lorsqu'ils lancent un programme au format ASCII depuis la ligne de commande. C'est le genre de détail qu'on aimerait n'avoir pas à connaître.

Un autre signe de sa rusticité est qu'il ne peut calculer les branchements courts (JMP SHORT) que vers l'arrière. Pas d'optimisation multi-passes : un classique double-passe.
Néanmoins, faut-il ajouter que le plus modeste assembleur qu'on maîtrise permet de résoudre la plupart des limitations qu'on rencontre sous DOS. Ainsi, du côté de Digital Research, j'aimerais aussi me servir de RASM86 1.3 à qui il faut préciser tout saut court mais qui remplit le même travail que MASM 2.00 tout en étant aussi petit que ASM.

_________________

C:\ONGRTLNS.W95


Top
Quote
attilavv
Post subject: Re: Version bridée de macro-assembleur ?
Posted: 01 November, 02:58
Membre inscrit
Offline
 
Posts: 536
Joined: 26 December, 13:22
 
Oups ... juste qu'en cherchant sur internet, je me suis rappelé de cette demande. :D

Au moins à l'époque il était possible de s'engager et de "signer" un programme. C'est à dire accepter de le valider.
De nos jours, il y a que les fous qui acceptent de le faire !

C'est pour cette raison que l'informatique se dirige vers l'Art avec un grand A car l'art reste l'art et il y a que les fous qui l'utilisent. L'autre solution étant d'avoir la même assurance qu'un chirurgien et cela sur 20 ans après la "mort" d'un programme.

J'ai fini par comprendre pourquoi il y a vingt ans j'avais des cours de droits en ... informatique :shock: !

_________________

-----------------------------------------
Alienware M18x i7 3840 / CF 7970 / 32Gb 1866Mhz / SSD 256 + Raid 512Gox2
Serveur Minecraft : ASUS portable W90VP T9400 3Ghz CF 4870.


Top
Quote
gm86
Post subject: Re: Version bridée de macro-assembleur ?
Posted: 17 November, 18:05
Membre inscrit
User avatar
Offline
 
Posts: 676
Joined: 01 September, 19:07
 
attilavv wrote:
MASM c'est Microsoft ...
Le bridage doit venir d'une sorte de version OEM pour IBM.
Effectivement, le fichier exécutable de MASM 2.00 de IBM est très similaire à celui de MASM 3.00 de Microsoft.

_________________

C:\ONGRTLNS.W95


Top
Quote
gm86
Post subject: Re: Version bridée de macro-assembleur ?
Posted: 11 September, 15:22
Membre inscrit
User avatar
Offline
 
Posts: 676
Joined: 01 September, 19:07
 
Je remonte ce sujet vu que je replonge dans la programmation en langage d'assemblage.
J'ai cherché des informations sur les bugs de MASM 5.1 et je suis tombé sur le site BYTEPOINTER. Il est question de descriptifs des différentes versions de macro-assembleur de Microsoft. On peut y lire que MASM 2 pour IBM contient bien les instructions pour le mode protégé du micro-processeur 80286, mais que la directive .286P est manquante :
http://bytepointer.com/masm/index.htm#MASM_2.0%20IBM
Ce site m'a appris que la version 3, sortie peu après et qui ne masque pas cette directive, était livrée avec d'intéressants utilitaires : un débogueur symbolique et un outil de maintenance.
Pour souvenir, j'avais donné les options de ligne de commande dans cette section :
viewtopic.php?f=2&t=13263

Cela a excité ma curiosité ; j'ai donc regardé ce qu'il y avait de nouveau sur le site de Vetusware.
En début d'année, l'image de la disquette du macro-assembleur 3.00 a été mis en ligne accompagnée du scan du manuel :
http://vetusware.com/download/Macro%20Assembler%203.0
Demain et après-demain, je téléchargerai aussi les images des disques de la version 2 ainsi que MASM/2 pour IBM à l'époque d'OS/2 et du PS/2 :
http://vetusware.com/download/IBM%20Per ... ler%202.00
http://vetusware.com/download/IBM%20Mac ... ion%201.00

_________________

C:\ONGRTLNS.W95


Top
Quote
Display: Sort by: Direction:
Post Reply   Page 1 of 2  [ 11 posts ]
Return to “Documentations et tutoriels” | Jump to page 1 2 »
Jump to: