Qui sait programmer en Assembleur ?
Modérateurs : Papy.G, fneck, Carl
Re: Qui sait programmer en Assembleur ?
d'abords créons un mot FORTH passant en octal (comme le fait le mot DECIMAL et HEX) :
: OCTAL DECIMAL 8 BASE ! ;
Et hop, OCTAL est un mot qui met 8 dans la base. Le mot DECIMAL permet de d'être sûr que le 8 saisi est bien en base 10.
OCTAL 3316 DECIMAL .
affiche alors 1742 !
(on est peut être un peu éloigné de l'asm, non ?)
: OCTAL DECIMAL 8 BASE ! ;
Et hop, OCTAL est un mot qui met 8 dans la base. Le mot DECIMAL permet de d'être sûr que le 8 saisi est bien en base 10.
OCTAL 3316 DECIMAL .
affiche alors 1742 !
(on est peut être un peu éloigné de l'asm, non ?)
Re: Qui sait programmer en Assembleur ?
Pas du tout, on est en plein dedans puisque les conversions sont indispensables pour avancer en assembleur.yo_fr a écrit :(on est peut être un peu éloigné de l'asm, non ?)
Ton deuligne en FORTH a bien fait la conversion, mais je ne peux pas l'accepter finalement.
Le but étant d'écrire la routine de calcul pour faire soi-même la conversion, afin de bien en comprendre le principe.
Il ne te reste plus qu'a le refaire,
mais sans utiliser l'instruction BASE cette fois. (ce qui te permettra de trouver quels sont les calculs à faire.)
p.s: Peu importe si ça ne rentre pas dans un deuligne, c'est sympa de revoir du FORTH. octal -> décimal
Re: Qui sait programmer en Assembleur ?
OK, alors un petit pour la route :
on crée un mot pour l'affichage du digit faible courant, puis décalage de 3 bits :
ensuite on appel la fonction tant que le sommet de la pile n'est pas nul (ce qui signifierait que la conversion est finie) à l'aide d'un 2eme mot :
et on lance une conversion :
1750 TRANS
nous donne :
6 2 3 3
2 mots de chacun 1 ligne mission accomplie
ps : en poussant un peu on peu le faire en une ligne :
on crée un mot pour l'affichage du digit faible courant, puis décalage de 3 bits :
Code : Tout sélectionner
: OCTAL DUP DUP -8 AND - . 8 / ;
ensuite on appel la fonction tant que le sommet de la pile n'est pas nul (ce qui signifierait que la conversion est finie) à l'aide d'un 2eme mot :
Code : Tout sélectionner
: TRANS BEGIN OCTAL DUP 0= UNTIL ;
1750 TRANS
nous donne :
6 2 3 3
2 mots de chacun 1 ligne mission accomplie
ps : en poussant un peu on peu le faire en une ligne :
Code : Tout sélectionner
: TRANS BEGIN DUP DUP -8 AND - . 8 / DUP 0= UNTIL ;
Re: Qui sait programmer en Assembleur ?
Ca fait plaisir de revoir du FORTH, d'autant plus avec les explications de la routine.yo_fr a écrit :1750 TRANS nous donne : 6 2 3 3
(Je m'y mettrai un de ces 4, et peut-être bien sur ZX81, j'ai vu qu'il y a un FORTH dispo)
Ton calcul est juste, 6233 étant l'ordre de la pile. Validé.
Même s'il eût été préférable de remettre le résultat à l'endroit.
-
- Messages : 128
- Inscription : 31 juil. 2008 14:02
- Localisation : la cadiere d'azur - var (83)
Re: Qui sait programmer en Assembleur ?
Bonjour Daniel , pourquoi , pour de petits programmes , tu prefere écrire le code directement en hexa ?Daniel : Mais à vrai dire, pour tous les micros 8 bits de collection, je n'utilise pas souvent de véritable assembleur. Je trouve plus rapide, pour de petits programmes, d'écrire le code machine directement en hexadécimal. Dans les années 1990, sur PC (à l'époque des 386) j'avais souvent quelques routines en assembleur dans des programmes C. Avec la rapidité des processeurs actuels ce n'est plus nécessaire.
Est-ce le fait de passer pas un assembleur qui te dérange (perte de temps , puis utilisation de mnenoniques différentes d'un assembleur a l'autre ) ou est-ce parce que tu trouve le code généré par l'assembleur perfectible ? (ou est-ce pour le fun ).
A bientôt.
Re: Qui sait programmer en Assembleur ?
Il y a plusieurs raisons, à la fois historiques et pratiques :
- Beaucoup de machines, au début de leur commercialisation, n'avaient pas encore d'assembleur.
- Quand un assembleur était publié, il était souvent vendu très cher.
- Pour un code de quelques lignes il est plus rapide d'écrire directement en langage machine que d'utiliser l'assembleur. Il y a aussi moins de caractères à taper.
En revanche, dès que le programme est un peu plus long, l'assembleur devient très utile. Le code généré par un assembleur est strictement équivalent au code écrit directement en langage machine. Il n'y a pas d'optimisation possible, contrairement aux langages évolués compilés.
- Beaucoup de machines, au début de leur commercialisation, n'avaient pas encore d'assembleur.
- Quand un assembleur était publié, il était souvent vendu très cher.
- Pour un code de quelques lignes il est plus rapide d'écrire directement en langage machine que d'utiliser l'assembleur. Il y a aussi moins de caractères à taper.
En revanche, dès que le programme est un peu plus long, l'assembleur devient très utile. Le code généré par un assembleur est strictement équivalent au code écrit directement en langage machine. Il n'y a pas d'optimisation possible, contrairement aux langages évolués compilés.
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
Re: Qui sait programmer en Assembleur ?
...Sauf en de très rares cas ou l'on fait du code auto-modifié...Daniel a écrit :Il n'y a pas d'optimisation possible
(à bannir de tous, en toutes circonstances, c'est vraiment trop horrible...)
-
- Messages : 128
- Inscription : 31 juil. 2008 14:02
- Localisation : la cadiere d'azur - var (83)
Re: Qui sait programmer en Assembleur ?
Merci pour ta réponce je comprend mieux , nous n'avons en effet pas commencé la programmation ASM à la même époque (jai débuté sur 286sx16 , je garde de très bons souvenirs avec turbo profiler/turbo debuger puis gametoosl ).
(j'ai débuté l'asm en écrivant des 'unités' pour le turbo pascal , ca faisait gagner beaucoup de place dans le code généré par le compilateur).
Je suggerais l'optimisation car il arrive par exemple qu'un mov ax,0 soit optimisé en xor ax,ax par certains assembleurs (c'est un exemple parmis quelques autres).
Il est vraie que maintenant , avec la venue d'internet , on peut trouver facilement et gratuitement des assembleurs.
A bientôt.
(j'ai débuté l'asm en écrivant des 'unités' pour le turbo pascal , ca faisait gagner beaucoup de place dans le code généré par le compilateur).
Je suggerais l'optimisation car il arrive par exemple qu'un mov ax,0 soit optimisé en xor ax,ax par certains assembleurs (c'est un exemple parmis quelques autres).
Il est vraie que maintenant , avec la venue d'internet , on peut trouver facilement et gratuitement des assembleurs.
A bientôt.
Re: Qui sait programmer en Assembleur ?
Des assembleurs oui... des assembleur/linkeur NON !gatesbillou a écrit : Il est vraie que maintenant , avec la venue d'internet , on peut trouver facilement et gratuitement des assembleurs.
A bientôt.
Si quelqu'un connait un assembleur/linker qui prend en charge le TMS7000 ou qui permet d'ajouter un nouveau processeur, ça m'intéresse très beaucoup. Le linker étant la partie difficile à coder, j'aimerais bien gérer mes fonctions proprement (même si j'ai une astuce acceptable). Attention, ne pas répondre l'outil d'époque fournit par TI... inutilisable en pratique.
Re: Qui sait programmer en Assembleur ?
Effectivement, sur PC il est difficile de se passer de l'assembleur. Je n'ai jamais programmé directement en hexadécimal sur des ordinateurs de plus de 8 bits, sauf peut-être pour déjouer des protections de logiciels dont je n'avais pas les sources.gatesbillou a écrit :jai débuté sur 286sx16
En Turbo C on pouvait intégrer des séquences d'assembleur directement dans le programme source. Je ne me souviens plus si s'était possible en Turbo Pascal. Le 286sx16 ne m'évoque rien. Ce n'était pas plutôt un 386sx16 C'est sur cette machine qu'a été programmée, en 1992, la première version de dcmo5 (Turbo C + assembleur).
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
Re: Qui sait programmer en Assembleur ?
c'était possible d'intégrer de l'asm avec turbo pascal
Re: Qui sait programmer en Assembleur ?
Comme dit Daniel, on ne peut pas optimiser en assembleur comme on le fait avec un langage évolué compilé.
La conversion : mnémoniques -> instructions Processeur en hexa, doit être fidèlement reproduite: à l'identique.
Mais on peut bien sûr optimiser sa façon de programmer, en choississant par exemple l'adressage indexé
au lieu de l'adressage étendu quand on le peut, les registres 16 bits, la pile, les boucles à 0, etc...
Un jeu d'arcade sera ainsi bien plus rapide ou plus richement garni grâce à la place sauvée.
Ca m'est arrivé à l'époque de refaire 10 fois une routine pour gratter un cycle!
Quand à "l'optimisation" que tenterait de faire lui-même un Editeur-assembleur, s'il touche quoi que ce soit à mon code,
c'est direct à la poubelle. Avec une machine 8 bits, on peut se coder son propre Editeur assembleur/désassembleur,
et ça c'est sympa!
Voici 2 programmes qui font strictement la même chose: afficher la lettre d à l'écran.
Celui de gauche fait 26 octets, celui de droite est ramené à 17, soit un gain de près de 30% !
[le langage machine est en bleu, on peut compter les octets]
Pour ceux qui ne comprennent pas le langage assembleur, au lieu de dire :
"Porte ce paquet-ci au 22 avenue Victor Hugo, puis porte ce paquet-là au 26 avenue Victor Hugo, puis porte ce paquet-là au... etc."
le programme optimisé dit : "Porte ces paquets au 22,26,27,28 avenue Victor Hugo"
La conversion : mnémoniques -> instructions Processeur en hexa, doit être fidèlement reproduite: à l'identique.
Mais on peut bien sûr optimiser sa façon de programmer, en choississant par exemple l'adressage indexé
au lieu de l'adressage étendu quand on le peut, les registres 16 bits, la pile, les boucles à 0, etc...
Un jeu d'arcade sera ainsi bien plus rapide ou plus richement garni grâce à la place sauvée.
Ca m'est arrivé à l'époque de refaire 10 fois une routine pour gratter un cycle!
Quand à "l'optimisation" que tenterait de faire lui-même un Editeur-assembleur, s'il touche quoi que ce soit à mon code,
c'est direct à la poubelle. Avec une machine 8 bits, on peut se coder son propre Editeur assembleur/désassembleur,
et ça c'est sympa!
Voici 2 programmes qui font strictement la même chose: afficher la lettre d à l'écran.
Celui de gauche fait 26 octets, celui de droite est ramené à 17, soit un gain de près de 30% !
[le langage machine est en bleu, on peut compter les octets]
Pour ceux qui ne comprennent pas le langage assembleur, au lieu de dire :
"Porte ce paquet-ci au 22 avenue Victor Hugo, puis porte ce paquet-là au 26 avenue Victor Hugo, puis porte ce paquet-là au... etc."
le programme optimisé dit : "Porte ces paquets au 22,26,27,28 avenue Victor Hugo"
- Pièces jointes
-
- source-asm.png (13.36 Kio) Consulté 4335 fois
-
- Messages : 128
- Inscription : 31 juil. 2008 14:02
- Localisation : la cadiere d'azur - var (83)
Re: Qui sait programmer en Assembleur ?
En turbo pascal c'est possible d'integrer de l'assembleur de differentes facons ; voici un exemple ->
http://www.gladir.com/CODER/TPASCAL7/asm.htm
Le 80286 sx 16 a existé (Marque commodor acheté a la fnac , mais sans coprocesseur mathématique (en option) , avec dd de 40Mo , 1 Mo de ram il me semble ). Installé de base : MSDOS 5 (avec le dosshell) , aucun windows , rien , la zone ...
C'était le bon temps quand même , je ne regrette pas du tout d'avoir connue cette époque.
jester : Cross-32 Meta-Assembler c'est pas bon ?("•Creates hex file, listing and symbol table") ou alors ("Code Composer Studio v.3.3") ? Si c'est bon fais moi signe.
http://www.gladir.com/CODER/TPASCAL7/asm.htm
Le 80286 sx 16 a existé (Marque commodor acheté a la fnac , mais sans coprocesseur mathématique (en option) , avec dd de 40Mo , 1 Mo de ram il me semble ). Installé de base : MSDOS 5 (avec le dosshell) , aucun windows , rien , la zone ...
C'était le bon temps quand même , je ne regrette pas du tout d'avoir connue cette époque.
jester : Cross-32 Meta-Assembler c'est pas bon ?("•Creates hex file, listing and symbol table") ou alors ("Code Composer Studio v.3.3") ? Si c'est bon fais moi signe.
Re: Qui sait programmer en Assembleur ?
Vraiment, je n'ai aucun souvenir d'un i286SX.
Étaient désignés "SX" les microprocesseurs Intel (tels les i386SX, 486SX) n'embarquant pas de FPU, ayant un FPU défectueux désactivé ou même disposant d'un FPU OK mais désactivé pour des raisons commerciales.
Le microprocesseur i286, quant à lui, n'intégrait pas de FPU, ce dernier étant proposé dans un boitier à part (co-processeur 80287).
J'ai été revendeur Commodore, je n'ai jamais vendu de PC à base de 286SX.
De mémoire,un tel processeur n'a pas existé.
Étaient désignés "SX" les microprocesseurs Intel (tels les i386SX, 486SX) n'embarquant pas de FPU, ayant un FPU défectueux désactivé ou même disposant d'un FPU OK mais désactivé pour des raisons commerciales.
Le microprocesseur i286, quant à lui, n'intégrait pas de FPU, ce dernier étant proposé dans un boitier à part (co-processeur 80287).
J'ai été revendeur Commodore, je n'ai jamais vendu de PC à base de 286SX.
De mémoire,un tel processeur n'a pas existé.
-
- Messages : 128
- Inscription : 31 juil. 2008 14:02
- Localisation : la cadiere d'azur - var (83)
Re: Qui sait programmer en Assembleur ?
Un tel processeur n'a pas existé
http://fr.wikipedia.org/wiki/Intel_80286
http://fr.wikipedia.org/wiki/Intel_80287
Voici la photo exacte de l'ordi que j'avais : http://home.planet.nl/~spijk336/gal1/c286.jpg
http://fr.wikipedia.org/wiki/Intel_80286
http://fr.wikipedia.org/wiki/Intel_80287
Voici la photo exacte de l'ordi que j'avais : http://home.planet.nl/~spijk336/gal1/c286.jpg