Questions ASM
-
Bonjour,
Je suis en train de me mettre Ă l’ASM 68k avec ASMOne sur un Ă©mulateur…
J’aurais une petite question :Qu’elle est la diffĂ©rence entre ces deux instructions :
move.w toto,a0
move.w (toto),a1quand je lance mon prog les registres a0 et a1 ont la mĂŞme valeur…. (j’ai mi toto dc.b $44 un peu plus bas)
autre question :
move.l 4.w,a6 ; Get base of exec libA quoi sert le « .w » sur cette ligne svp ?
Encore une autre question, quand j’assemble mon prog avec « a » et que je le lance avec « j », si je veux le relancer une deuxième fois je suis obligĂ© de le rĂ©assembler sinon il ne se lance pas (il m’affiche juste le contenu des registres)… comment ca se fait ?
Et une dernière question pour la route et je vous laisse tranquille :o)
Je ne comprend pas trop comment utiliser le debugger, est-ce que quelqu’un pourrais m’expliquer vite fait svp ? Comment mettre un point d’arrĂŞt et faire du pas Ă pas… La doc n’est pas très explicite je trouveMerci d’avance pour votre aide
pleins d’exemples ici :
http://obligement.free.fr/programmation.php
http://www.gurumed.net/index.php/Initiation_%C3%A0_l%27Assembleur_680X0et surtout les supers tuto/vidéos de Photon/Scoopex :
🙂
move.w a0,d0 -> copie le contenu de a0 dans d0
move.w (a0),d0 -> copie le contenu situĂ© Ă l’adresse mĂ©moire a0 dans d0ça ne devrait pas, thĂ©oriquement, te donner le mĂŞme rĂ©sultat (sauf coĂŻncidence).
Attention, en principe, les registre a0-a7 dont utilisés pour stocker des adresses mémoires. Les registres d0-d7 servent eux à stocker des données.
L’architecture du 68000 est tolĂ©rante, mais en fonction des instructions tu as des spĂ©cificitĂ©s qu’il faut Ă©tudier. Un bon manuel de 68000 (papier ou online) te seras sans doute utile.—-
Pour ton autre question :
move.l 4.w,a6Le .w signifie qu’on ne prends que les 16 premiers bits de la valeur « 4 » pour les copier en 32 bits dans le registre a6.
—-
Je suppose qu’on doit rĂ©assembler avant chaque execution afin de remettre Ă zĂ©ro toutes les data utilisateurs de ton programme (variables & autres).
—-
Pour le debugger, je passe … pas une grande expĂ©rience du debugger d’Asmone.
Mais en gros, si tu sais ce qu’est un breakpoint et du step by step, tu as dĂ©jĂ fait 80% du chemin :pBon courage!!!
move.w a0,d0 -> copie le contenu de a0 dans d0
move.w (a0),d0 -> copie le contenu situĂ© Ă l’adresse mĂ©moire a0 dans d0Oui pour ca je sais bien mais dans mon exemple c’Ă©tait un label que j’utilisais :
move.w toto,a0
move.w (toto),a1
toto dc.b $44
-> ici, a0 et a1 ont la mĂŞme valeur, comment ca se fait ? (j’aurais du utiliser plutĂ´t d0 et d1 mais bon)Pour ton autre question :
move.l 4.w,a6Le .w signifie qu’on ne prends que les 16 premiers bits de la valeur « 4? pour les copier en 32 bits dans le registre a6.
bizarre, pourquoi on n’utilise pas plutĂ´t move.w 4,a6 alors ? ca reviendrais Ă la mĂŞme chose non ? Je ne comprend pas l’interĂŞt de la chose…
Bonjour,
dans ton cas c’est normal, les deux instructions sont semblables, tu demande a copier le mot (.w) contenu Ă l’adresse toto dans les registre a0 et a1.
ça ne serait pas le cas si tu faisaislea toto,a2
move.w a2,a0
move.w (a2),a0là tu tomberais dans le cas décrit par astrofra
remarque en passant, tu défini ta variable par un dc.b donc un byte et tu transfert un mot vers les registres, tu va donc te récupérer ton $44 et autre chose derrière (chose non définie).
j’ai pas plus d’idĂ©e pour asm one, j’utilise Devpac de mon cotĂ©.
Bonne journée
Ok merci alors j’ai compris… donc c’est bien la mĂŞme chose…
remarque en passant, tu défini ta variable par un dc.b donc un byte et tu transfert un mot vers les registres, tu va donc te récupérer ton $44 et autre chose derrière (chose non définie).
Oui c’est vrai, mais bon c’Ă©tait juste un test vite fait…
Une autre question au passage, l’instruction lea (load effective adress) permet ici (lea toto,a2) de mettre l’adresse de toto dans a2.
qu’elle est la diffĂ©rence avec un move.l #toto, a2 ?
Apparement ca me ramènne la mĂŞme chose…
oui lea toto et move.l #toto, c’est la mĂŞme chose.
le # avant le symbole sert Ă prĂ©ciser qu’on veut l’adresse et non pas le contenu.
Je pense qu’il vaut mieux utiliser lea car c’est plus explicite et plus spĂ©cialisĂ© (donc plus rapide) qu’un move. Ă€ confirmer avec une table d’opcode qui donne les cycles d’horloge par instruction (j’avoue que j’ai pas ça sous la main).
Pour l’anecdote, sur 386/486, on faisait certaines multiplications avec lea, car on pouvait passer un index et une puissance qui couvraient pas mal de multiplicateurs. Le tout en un seul cycle (une mul, ça coĂ»tait cher Ă l’Ă©poque).
Mon Dieu, je suis tout rouillé en assembleur… je ne fais plus que du C, du C++ et du Lua.
Du Lua ?
Dans quel contexte, modulo ? ça m’intéresse 🙂
Ah Lua, je pourrais en parler des heures 🙂
Je l’utilise dans beaucoup de situations, mais notamment:
– pour faire des interfaces avec des bibliothèques en C, que j’appelle ensuite depuis un script Lua. Quand le wrapper est direct, on peut mĂŞme utiliser la lib FFI du projet LuaJIT (le compilo just-in-time qui fait rougir javascript V8).
Interfacer avec les bibliothèques me permet de faire du prototypage, des tests unitaires de mes libs, voire mĂŞme d’Ă©crire une appli complète.
– pour lire des fichiers Ă utiliser avec du C. Parser des tokens en C, c’est très pĂ©nible et sujet Ă erreurs. Note que depuis que je fais davantage de C++, l’intĂ©rĂŞt de lire un fichier en Lua s’estompe un peu devant les streams et les regex intĂ©grĂ©s Ă la libstdc++. MĂŞme si c’est plus pratique et plus lisible en Lua, il y a quand mĂŞme des inconvĂ©nients: notamment le fait d’ĂŞtre obligĂ© de maintenir une table d’index parallèle, pour ordonner les clĂ©s (chaque ligne du fichier part dans une table, mais Ă part utiliser des index, pas moyen de garder l’ordre si on veut utiliser les clĂ©s).
– pour faire de l’administration système. LĂ , c’est un Lua uniquement avec LFS (Lua File System) et LuaSocket. Par exemple, je surveille des fichiers et je reçois des rapports par mail. Ou encore, de la gĂ©nĂ©ration Ă la demande de rĂŞgles iptables, selon des sĂ©quences reçues sur les interfaces. De façon gĂ©nĂ©rale, et avec un module luaposix (en plus des modules citĂ©s auparavant), Lua remplace fort avantageusement le shell, sans tout ses inconvĂ©nients (notamment les sĂ©quences d’Ă©chappement pour les chaines, Lua traitant tous les caractères de façon Ă©galitaire avec la paire dĂ©limitante [[ … ]] )
– j’ai aussi un serveur web Ă©crit en Lua, pour traiter les donnĂ©es utilisateurs et servir des pages web. J’ai un serveur web en frontal qui ne fait que transmettre les requĂŞtes. Ici Ă©galement, tout est 100% Lua (de mon cĂ´tĂ©, car j’utilise LuaFCGI qui est une lib partiellement en C, pour implĂ©menter le FCGI).
Mes champs d’application sont l’administration système, la gestion commerciale et … le jeu video 🙂
J’aime beaucoup la simplicitĂ© biblique du langage qui n’exclue pas une belle conception (coroutines, fonctions lambda, interfaçage C aisĂ© et puissant avec les userdata et la gestion par pile, closures ! …). En plus c’est extrèmement rapide (et pour ceux qui en veulent plus, il y a LuaJIT).
Pour ĂŞtre honnĂŞte dans ce concert de louange, je dirais qu’il manque deux choses Ă Lua:
Une sĂ©paration index/hash dans les tables (partiellement rĂ©solu avec les metatables, mais c’est pas ça quand mĂŞme).
De vrais thread (les coroutines, c’est du multitache coopĂ©ratif). Bon lĂ , c’est un problème de conception insoluble, et avec des threads, Lua ne serait plus Lua. J’ai dĂ©jĂ fait des tests d’intĂ©grations de thread avec Lua, en bidouillant, mais ça ne marche pas très fort et si ça peut passer «en test», ça n’ira pas dans un vrai environnement oĂą le temps de rĂ©action est critique. Je me souviens que j’avais dĂ» d’ailleurs un peu modifier la lib lua pour faire ça, donc pas très conseillĂ© !
Voila 🙂
Ah, pas mal.
Le Lua te sert de c-shell, en fait.
Pour ton binding C/Lua, tu fais comment ? bindĂ© Ă la pogne, ou avec un outil ?L’Ă©tĂ© dernier j’ai prĂ©sentĂ© une dĂ©mo Ă la Evoke, qui est intĂ©gralement scriptĂ©e en Squirrel sur un moteur 3D C++ fait par un pote :
http://www.pouet.net/prod.php?which=61730Tu fais du Lua sur quelle plateforme ?
(désolé bombseb pour le hijack de topic :))
Me voilĂ de retour…
Je suis en train d’Ă©ssayer de comprendre la programmation du copper…
J’ai Ă peut près compris le principe des instructions WAIT, MOVE et SKIP, mais je ne trouve pas de site qui explique clairement les lignes du label cop: (voir ci dessous)Apparement cette ligne :
[code]dc.w $008e,$1a64,$0090,$ffc4 ; Setting up [/code]Sert Ă affecter une position et une taille Ă l’Ă©cran graphique, mais je ne comprend pas comment sont formĂ©es ces valeurs, est-ce que quelqu’un pourrait m’expliquer svp ?
[code]cop: dc.w $0106,$0000,$01fc,$0000 ; AGA compatible
dc.w $008e,$1a64,$0090,$ffc4 ; Setting up display,
dc.w $0092,$0038,$0094,$00d0 ; modulo and so on
dc.w $0102,$0000,$0104,$0000
dc.w $0106,$0000,$0108,$0000
dc.w $0120,$0000,$0122,$0000 ; Clear spriteptrs
dc.w $0124,$0000,$0126,$0000
dc.w $0128,$0000,$012a,$0000
dc.w $012c,$0000,$012e,$0000
dc.w $0130,$0000,$0132,$0000
dc.w $0134,$0000,$0136,$0000
dc.w $0138,$0000,$013a,$0000
dc.w $013c,$0000,$013e,$0000
dc.w $0100,$1200 ; 1 Bitplane
bplptr: dc.w $00e0,$0000 ; Adress of bpl
dc.w $00e2,$0000
dc.w $0180,$0000 ; Color00 = black
dc.w $0182,$0fff ; Color01 = white
dc.w $ffff,$fffe[/code]
- Vous devez être connecté pour répondre à ce sujet.
› Forums › AmigaOS, MorphOS et AROS › DĂ©veloppement › Questions ASM
