Version imprimable du sujet

Cliquez ici pour voir ce sujet dans son format original

Forums MacBidouille _ La Programmation En Général _ Langage assembleur

Écrit par : TrouthyMcBidouille 8 Jan 2019, 21:08

Bonjour ,
Ce mac book que j'attendais est enfin arrivé aussi Chess me plait bien mais un générateur de cheat code en assembleur serait top. Avec quel assembleur est-il possible de programmer sur Mac Os? Trouthie

Écrit par : yponomeute 8 Jan 2019, 22:31

nasm s'installe avec homebrew par exemple https://formulae.brew.sh/formula/nasm

Écrit par : Jaypee 9 Jan 2019, 10:54

Bienvenue Trouthie,

Pour éviter de "polluer" la machine de tous les jours avec des bibliothèques utilisées une fois puis oubliées, il peut parfois être bon de considérer Docker. (une possibilité, pas une obligation).

Dans mes investigations récentes, j'ai eu besoin d'utiliser un script Python dont les prérequis étaient très différents de la version macOS installée. A partir d'une image Docker encapsulant la version qui allait bien, j'ai pu utiliser le script sans difficulté et sans déstabiliser mon macOS.

@+JP

Écrit par : TrouthyMcBidouille 9 Jan 2019, 13:21

Citation (yponomeute @ 8 Jan 2019, 22:31) *
nasm s'installe avec homebrew par exemple https://formulae.brew.sh/formula/nasm


Ok! C'est sympa, merci! Je vais voir, les similitudes sont énormes je pense car Intel oblige, plus rien à voir avec l'époque des Apples équipés de Motorola...
Développez-vous avec l'assembleur?
A plus. Trouthie

Écrit par : audionuma 9 Jan 2019, 14:07

Juste par curiosité :
Qu'est-ce qu'un générateur de cheat code pour un jeu d'échec ?
Pourquoi de l'assembleur pour une application dont le code source est public et sous licence libre ? (https://opensource.apple.com/source/Chess/Chess-318/Sources/)

Écrit par : baron 9 Jan 2019, 14:56

Citation (audionuma @ 9 Jan 2019, 14:07) *
Juste par curiosité :
Qu'est-ce qu'un générateur de cheat code pour un jeu d'échec ?

Je suppose que c'est pour gagner des pièces supplémentaires…  biggrin.gif

Écrit par : TrouthyMcBidouille 9 Jan 2019, 16:04

Le C H E A T C O D E, il a deux fonctions principales, la première d'introduire un sujet de conversation dans le forum et ainsi d'échanger des informations avec des développeurs le cas échéants de prendre des contacts pour bosser en groupe sur un ou plusieurs projets, la deuxième fonction lorsqu'il est correctement programmé est de vous afficher un message codé sur votre écran qui n'a rien de dévastateur rassurez-vous, une fois lu il provoquera chez le joueur des effets semblables aux ptits éléphants roses qui se promènent dans la tête de celui-ci et de la sorte lui fera oublier la branlée qu'il se prend à Chess! Fonction cachée voir le Dark net peut-être...
Je n'ai plus de chocolats ici!
Trouthie

Citation (baron @ 9 Jan 2019, 14:56) *
Citation (audionuma @ 9 Jan 2019, 14:07) *
Juste par curiosité :
Qu'est-ce qu'un générateur de cheat code pour un jeu d'échec ?

Je suppose que c'est pour gagner des pièces supplémentaires…  biggrin.gif


Pour les pièces supplémentaires c'est bien vu mais je crois qu'elles se négocient en AppleCoin, non?

Écrit par : TrouthyMcBidouille 9 Jan 2019, 20:29

Citation (Jaypee @ 9 Jan 2019, 10:54) *
Bienvenue Trouthie,

Pour éviter de "polluer" la machine de tous les jours avec des bibliothèques utilisées une fois puis oubliées, il peut parfois être bon de considérer Docker. (une possibilité, pas une obligation).

Dans mes investigations récentes, j'ai eu besoin d'utiliser un script Python dont les prérequis étaient très différents de la version macOS installée. A partir d'une image Docker encapsulant la version qui allait bien, j'ai pu utiliser le script sans difficulté et sans déstabiliser mon macOS.

@+JP

Bonsoir, Docker j´ai lu qqchose dessus, je le télécharge l´ínstalle et vois ce que je peux faire avec.
Merci.
A +.

Écrit par : Jaypee 12 Jan 2019, 10:37

Il existe une image Docker:

https://github.com/vladfau/nasm32

Pour l'utiliser, il faut :
- Un compte (gratuit) sur Docker Hub qui est un repo d'images
- docker pull vladfau/nasm32
- docker run -it vladfau/nasm32 bash
exemples dans /usr/share/doc/examples/nasm

Il faut environ 15 minutes départ-arrêté entre démarrer docker et essayer la commande nasm.
Je n'ai pas trouvé les bonnes options de génération du code pour essayer par exemple /usr/share/doc/examples/nasm/lnxhello.asm mais je n'ai aucune expérience pratique dans cet environnement.

Code
root@e8ae58fc3611:~# nasm -f elf ./lnxhello.asm
root@e8ae58fc3611:~# ld -m elf_i386 -o hello lnxhello.o
root@e8ae58fc3611:~# chmod +x ./hello
root@e8ae58fc3611:~# ./hello
Hello, World!

Pour interagir avec des fichiers sur le mac, il faut "mapper" un répertoire du mac avec un chemin existant dans l'image, par exemple /home existe mais est vide
et la syntaxe est:
Code
docker run ... -v /Users/moi/mon répertoire de bidouille:/home ... comme :
docker run -it -v/Users/jaypee/workspaces/Nasm:/home --entrypoint=nasm vladfau/nasm32  -f macho -o /home/hello.o /home/helloWorld.asm

Cela dit, je n'ai pas trouvé les bonnes options pour cross-compiler pour le Mac.

@+ JP

Écrit par : TrouthyMcBidouille 13 Jan 2019, 20:29

Bonsoir, actuellement un sigle docker dans la barre du finder me dit que je suis loggé sur le Docker Hub, la page nasm32 de Vladfau est bien présente mais ensuite...? Le core I7 du mac book ne pourra pas accepter de mover un qword dans rax non?

Écrit par : TrouthyMcBidouille 13 Jan 2019, 21:03

Je me demandais justement si Masm était disponible avec Visual Studio 2017 Mac?

Écrit par : Jaypee 14 Jan 2019, 10:35

Citation (TrouthyMcBidouille @ 13 Jan 2019, 20:29) *
Bonsoir, actuellement un sigle docker dans la barre du finder me dit que je suis loggé sur le Docker Hub, la page nasm32 de Vladfau est bien présente mais ensuite...?

... suivre les instructions du cadre à droite: git pull vladfau/nasm32 puis git run -it vladfau/nasm32 bash comme dans ma réponse.
Citation
Le core I7 du mac book ne pourra pas accepter de mover un qword dans rax non?
L'assembleur dispose de directives d'assemblage, des instructions avent le début du code pour définir le contexte, il existe une directive CPU https://www.nasm.us/doc/nasmdoc6.html
On retrouve certaine des directives dans les options comme le -f macho32 ou -f macho64 Apparemment, la documentation de NASM a des chapitre vide pour ces formats MACH-O pour Mac. Soit ils ne sont pas encore supportés, soit les détails sont encore dans la tête des concepteurs.

Note que les exemples de codes sur Développez.com ne sont pas des code génériques, mais des codes liés à MS-DOS (même pas Windows) basés sur l'interruption n°21 qui sur un IBM PC de 1981, permettait d'appeler l'OS, après avoir chargé un numéro de fonction dans le registre ah (la bible pour ce type de code était le Livre du MS/PC-DOS de F.Piette dans les années 80)

Au final, il faudra bien comprendre comment le code produit sera utilisé, et peut-être qu'il faut émuler un PC pour arriver à ses fins...
Quelques réponses dans ce poste sur StackOverflow: https://stackoverflow.com/questions/52563618/how-does-one-compile-a-64-bit-macos-application-with-nasm-application-using-cmak
@+JP

Écrit par : TrouthyMcBidouille 14 Jan 2019, 20:36

Je vais suivre précisément toutes vos indications, ce n'est pas simple de passer sur Mac après 30 années passés sur Pc...ah ah les livres des années 80-90 comme PSI des mines d'or! Mon impression est que la programmation est rendue compliquée de nos jours, bref du rétro pédalage en quelque sorte! Voir ce lien : https://flatassembler.net/download.php

Écrit par : TrouthyMcBidouille 14 Jan 2019, 21:32

Citation (Jaypee @ 12 Jan 2019, 10:37) *
Il existe une image Docker:

https://github.com/vladfau/nasm32

Pour l'utiliser, il faut :
- Un compte (gratuit) sur Docker Hub qui est un repo d'images
- docker pull vladfau/nasm32
- docker run -it vladfau/nasm32 bash
exemples dans /usr/share/doc/examples/nasm

les deux commandes ont été exécutées dans terminal par contre il est impossible de trouver le répertoire examples et encore moins de le créer!

Écrit par : Jaypee 16 Jan 2019, 09:24

oui, j'ai interverti deux niveaux de répertoires, désolé :

Code
root@4ec88d7655c0:/# ls -l /usr/share/doc/nasm/examples
total 592
-rw-r--r-- 1 root root   144 May 24  2012 _file_.asm
-rw-r--r-- 1 root root    84 May 24  2012 _version.asm
-rw-r--r-- 1 root root   273 May 24  2012 a32offs.asm
-rw-r--r-- 1 root root   336 May 24  2012 absolute.asm
....

Idem pour fasm, il existe une image docker : https://hub.docker.com/r/guitmz/fasm/

Bonne bidouille !
J-P
PS: Deux commandes de remise à zéro des données docker : plus d'images, ni de process qui tournent, plus d'image en cache, retour à l'état "juste après l'install", avant d'arrêter le service (l'icône de la baleine):
1. docker rm -f $(docker ps -aq)
2. docker rmi -f $(docker images -aq)

Écrit par : TrouthyMcBidouille 16 Jan 2019, 23:26

Citation (Jaypee @ 12 Jan 2019, 10:37) *
Il existe une image Docker:

https://github.com/vladfau/nasm32

Pour l'utiliser, il faut :
- Un compte (gratuit) sur Docker Hub qui est un repo d'images
- docker pull vladfau/nasm32
- docker run -it vladfau/nasm32 bash
exemples dans /usr/share/doc/examples/nasm <= /usr/share/doc/nasm/examples : ok pour les répertoires

Il faut environ 15 minutes départ-arrêté entre démarrer docker et essayer la commande nasm.
Je n'ai pas trouvé les bonnes options de génération du code pour essayer par exemple /usr/share/doc/examples/nasm/lnxhello.asm mais je n'ai aucune expérience pratique dans cet environnement.
Code
root@e8ae58fc3611:~# nasm -f elf ./lnxhello.asm
root@e8ae58fc3611:~# ld -m elf_i386 -o hello lnxhello.o
root@e8ae58fc3611:~# chmod +x ./hello
root@e8ae58fc3611:~# ./hello
Hello, World!

Pour interagir avec des fichiers sur le mac, il faut "mapper" un répertoire du mac avec un chemin existant dans l'image, par exemple /home existe mais est vide
et la syntaxe est:
Code
docker run ... -v /Users/moi/mon répertoire de bidouille:/home ... comme :
docker run -it -v/Users/jaypee/workspaces/Nasm:/home --entrypoint=nasm vladfau/nasm32  -f macho -o /home/hello.o /home/helloWorld.asm

Cela dit, je n'ai pas trouvé les bonnes options pour cross-compiler pour le Mac.

@+ JP

root@e8ae58fc3611:~# nasm -f elf ./lnxhello.asm <= nasm: fatal: unable to open input file `./lnxhello.asm
Pour le mappage avec des répertoires personalisés il me retourne une erreur! le fichier hello.asm doit se trouver dans quel répertoire en fait?
Désolé pour le temps passé la-dessus.
J suis un boulet...

Écrit par : TrouthyMcBidouille 17 Jan 2019, 11:35

je ne suis pas encore familiarisé avec Terminal, l'époque du shell de cet Amiga 3000 remonte maintenant à une trentaine d'années...vive unix!
Voilà ce que j'obtiens:

Code
Admins-Air:~ admin$ docker run -it -v/Users/admin/RepBidouilles/Nasm:/home --entrypoint=nasm vladfau/nasm32 -f macho -o /home/hello.o /home/helloWorld.asm
nasm: fatal: unable to open input file `/home/helloWorld.asm'


Je pense que le fichier helloWorld.asm n'est pas dans le répertoire souhaité! Mais comment l'y mettre?
à plus, Trouhie

Écrit par : Jaypee 17 Jan 2019, 12:52

On fait un pas en arrière et on admire le tableau smile.gif
- L'objectif c'est d'assembler des fichiers sources qui existent sur le mac
- On ne veut pas polluer le mac avec les dépendances requises par un outil spécifique, donc on utilise une image Docker qui tourne dans un process isolé appelé container.

Donc le besoin est de permettre à ce process d'accéder aux fichiers du mac. Heureusement il existe une option du démarrage du container qui permet ça. Et il se trouve que l'image a été définie avec un répertoire vide /home.

Donc, imaginons que tu travailles dans un répertoire /Users/admin/RepBidouilles/Nasm, grâce à cette option de démarrage, ce répertoire du mac va être associée à /home dans l'image. Donc ce sera le répertoire partagé entre le mac et le container.

1. On va récupérer le fichier lnxhello.asm. On démarre le container simplement avec l'option -v qui partage le dossier, et on invoque "bash" pour avoir un shell, qui nécessite l'option -i et -t ou -it.

Code
docker run -it -v /Users/admin/RepBidouilles/Nasm:/home vladfau/nasm32 bash
# maintenant on est dans le shell du container
cp /usr/share/doc/nasm/examples/lnxhello.asm /home/helloWorld.asm ==> on copie et on renomme le source de l'exemple dans le dossier partagé
ctrl-D ==> pour quitter

2. On examine que le fichier est bien disponible sur le mac dans le répertoire de bidouille :
Code
cd /Users/admin/RepBidouilles/Nasm
ls -l ./helloWorld.asm

3. On est prêt à appliquer la recette

Là on a vu comment sortir un fichier source du container pour le rendre visible sur le mac. A l'inverse, si tu crées un nouveau source .asm dans ton répertoire sur mac, l'assembleur qui tourne dans le container le verra comme un des fichiers de son /home
J-P

Écrit par : TrouthyMcBidouille 17 Jan 2019, 14:20

C'est pédagogique! rolleyes.gif

Voualà à quel stade de la recette j'en suis:

Code
Admins-Air:Nasm admin$ cd /Users/admin/RepBidouilles/Nasm
Admins-Air:Nasm admin$ ls -l
total 32
-rw-r--r--  1 admin  staff   972 17 Jan 12:54 helloWorld.asm
-rw-r--r--@ 1 admin  staff  9087 17 Jan 11:12 helloworld.asm.rtf
Admins-Air:Nasm admin$ nasm -f elf ./helloWorld.asm
nasm: error: unable to find utility "nasm", not a developer tool or in PATH

Une recette mouuuai...
Code
Admins-Air:Nasm admin$ docker run -it -v /Users/admin/RepBidouilles/Nasm:/home vladfau/nasm32 bash
root@689b5c1e9a57:/# nasm -f elf ./helloWorld.asm
nasm: fatal: unable to open input file `./helloWorld.asm'


Je pensais que deux shell ouverts cela était possible!
Pour la recette ici son nom se laisse presque deviner... en 5 lettres: L.... blink.gif

Écrit par : TrouthyMcBidouille 17 Jan 2019, 16:39

Bonne nouvelle, c'est tout bon!

Code
root@ed2aac7c2b4d:/# exit
Admins-MacBook-Air:Nasm admin$ docker run -it -v /Users/admin/RepBidouilles/Nasm:/home vladfau/nasm32 bash
root@480da47c4874:/# cd /Users/admin/RepBidouilles/Nasm
bash: cd: /Users/admin/RepBidouilles/Nasm: No such file or directory
root@480da47c4874:/# ls
bin  boot  dev    etc  home  lib    lib32  lib64  media  mnt  opt  proc  root  run    sbin  selinux  srv  sys  tmp  usr  var
root@480da47c4874:/# cd ..
root@480da47c4874:/# cd ..
root@480da47c4874:/# ls
bin  boot  dev    etc  home  lib    lib32  lib64  media  mnt  opt  proc  root  run    sbin  selinux  srv  sys  tmp  usr  var
root@480da47c4874:/# cd /home/
root@480da47c4874:/home# ls
helloWorld.asm    helloworld.asm.rtf
root@480da47c4874:/home# nasm -f elf ./lnxhello.asm
nasm: fatal: unable to open input file `./lnxhello.asm'
root@480da47c4874:/home# nasm -f elf ./helloWorld.asm
root@480da47c4874:/home# ld -m elf_i386 -o hello helloWorld.o
root@480da47c4874:/home# chmod +x ./hello
root@480da47c4874:/home# ./hello
Hello, World!
root@480da47c4874:/home#


La recette dans le bon récipient!
Pour la L..... à voir!
A plus et merci.
Trouthie


Écrit par : Jaypee 17 Jan 2019, 20:29

Bravo ! Je garderai un œil sur cette discussion au cas où tu aurais d'autres questions.

@+JP

Écrit par : TrouthyMcBidouille 18 Jan 2019, 08:33

Citation (Jaypee @ 17 Jan 2019, 20:29) *
Bravo ! Je garderai un œil sur cette discussion au cas où tu aurais d'autres questions.

@+JP


Oui car il va y en avoir d'autres c'est certain!

Propulsé par Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)