Qui sait programmer en Assembleur ?

Cette catégorie traite de développements récents destinés à nos vieilles machines, applications, jeux ou démos... Amis programmeurs, c'est ici que vous pourrez enfin devenir célèbres!

Modérateurs : Papy.G, fneck, Carl

Avatar de l’utilisateur
yo_fr
Messages : 1337
Inscription : 13 août 2009 18:24
Localisation : 78...
Contact :

Re: Qui sait programmer en Assembleur ?

Message par yo_fr »

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 ?)
Avatar de l’utilisateur
Eric_80
Messages : 184
Inscription : 31 mars 2011 16:52

Re: Qui sait programmer en Assembleur ?

Message par Eric_80 »

yo_fr a écrit :(on est peut être un peu éloigné de l'asm, non ?)
Pas du tout, on est en plein dedans puisque les conversions sont indispensables pour avancer en assembleur.

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, :shock:

mais sans utiliser l'instruction BASE cette fois. (ce qui te permettra de trouver quels sont les calculs à faire.) :wink:

p.s: Peu importe si ça ne rentre pas dans un deuligne, c'est sympa de revoir du FORTH. octal -> décimal
Avatar de l’utilisateur
yo_fr
Messages : 1337
Inscription : 13 août 2009 18:24
Localisation : 78...
Contact :

Re: Qui sait programmer en Assembleur ?

Message par yo_fr »

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 :

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 ;
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 :

Code : Tout sélectionner

: TRANS BEGIN DUP DUP  -8 AND - . 8 / DUP 0= UNTIL ;
:D
Avatar de l’utilisateur
Eric_80
Messages : 184
Inscription : 31 mars 2011 16:52

Re: Qui sait programmer en Assembleur ?

Message par Eric_80 »

yo_fr a écrit :1750 TRANS nous donne : 6 2 3 3
Ca fait plaisir de revoir du FORTH, d'autant plus avec les explications de la routine.
(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. :P
gatesbillou
Messages : 128
Inscription : 31 juil. 2008 14:02
Localisation : la cadiere d'azur - var (83)

Re: Qui sait programmer en Assembleur ?

Message par gatesbillou »

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.
Bonjour Daniel , pourquoi , pour de petits programmes , tu prefere écrire le code directement en hexa ?
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 8) ).

A bientôt.
Daniel
Messages : 17421
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Qui sait programmer en Assembleur ?

Message par Daniel »

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.
Daniel
L'obstacle augmente mon ardeur.
Avatar de l’utilisateur
yo_fr
Messages : 1337
Inscription : 13 août 2009 18:24
Localisation : 78...
Contact :

Re: Qui sait programmer en Assembleur ?

Message par yo_fr »

Daniel a écrit :Il n'y a pas d'optimisation possible
...Sauf en de très rares cas ou l'on fait du code auto-modifié...
(à bannir de tous, en toutes circonstances, c'est vraiment trop horrible...)
gatesbillou
Messages : 128
Inscription : 31 juil. 2008 14:02
Localisation : la cadiere d'azur - var (83)

Re: Qui sait programmer en Assembleur ?

Message par gatesbillou »

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 :D ).

(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.
jester
Messages : 2328
Inscription : 01 janv. 2009 23:16
Localisation : Grenoble

Re: Qui sait programmer en Assembleur ?

Message par jester »

gatesbillou a écrit : Il est vraie que maintenant , avec la venue d'internet , on peut trouver facilement et gratuitement des assembleurs.
A bientôt.
Des assembleurs oui... des assembleur/linkeur NON !
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.
Daniel
Messages : 17421
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Qui sait programmer en Assembleur ?

Message par Daniel »

gatesbillou a écrit :jai débuté sur 286sx16
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.
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.
Avatar de l’utilisateur
OlivierP
Messages : 711
Inscription : 21 sept. 2009 15:50
Localisation : IDF

Re: Qui sait programmer en Assembleur ?

Message par OlivierP »

c'était possible d'intégrer de l'asm avec turbo pascal
Avatar de l’utilisateur
Eric_80
Messages : 184
Inscription : 31 mars 2011 16:52

Re: Qui sait programmer en Assembleur ?

Message par Eric_80 »

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! :D

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
source-asm.png (13.36 Kio) Consulté 4335 fois
gatesbillou
Messages : 128
Inscription : 31 juil. 2008 14:02
Localisation : la cadiere d'azur - var (83)

Re: Qui sait programmer en Assembleur ?

Message par gatesbillou »

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.
Fabrice Montupet

Re: Qui sait programmer en Assembleur ?

Message par Fabrice Montupet »

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é.
gatesbillou
Messages : 128
Inscription : 31 juil. 2008 14:02
Localisation : la cadiere d'azur - var (83)

Re: Qui sait programmer en Assembleur ?

Message par gatesbillou »

Répondre