Sujet :
Assembleur
-
Petit challenge : coder sans compilateur ?
Voila une petite question pour une sorte de challenge, comment compiler sans compilo? ou peut etre comment coder en binaire?^^
Je sais ça sert completement a rien c'est juste pour savoir
l'assembleur est très proche du langage machine, est il donc possible de traduire les fonctionnalités directement en binaire (et realiser un .exe pour autre pour le lire) ?
ou un alternative qui donnerai le même effet
vila vilou juste pour savoir^^
-
C'est effectivement possible, en effectuant le travail du compilateur à la main. Il va sans dire que cela devient vite très fastidieux, mais ça s'est fait à une époque. Moi-même, j'ai programmé mon premier PIC en écrivant le programme sur papier, en l'assemblant à la main avec la liste des codes à côté, et en transposant le tout dans un fichier hexadécimal avant de l'envoyer au programmateur.
À chaque micro-processeur correspond sa table des instructions, lequelles sont déclinées dans toutes les versions possibles en fonction des modes d'adressage. Tu n'as qu'à relever (parfois calculer) les bonnes valeur et les aligner les unes après les autres.
Ça, c'est dans le principe. Après, pour faire un programme qui s'épanouisse pleinement au sein d'un système d'exploitation moderne, il faut qu'il puisse interagir avec et connaître à un moment t tous les points d'entrées relève de la gageure. Ensuite, le format *.exe sous Windows est assez compliqué en lui-même. C'est en soi un travail à temps plein que de vouloir le définir à la main, presque autant que la compilation proprement dite.
Cela dit, les programmes *.COM étaient faits, eux, pour être une image stricte, monolithique et sans aucune structure d'un petit programme. Ils se prêtaient assez bien à ce genre d'exercice. En convertissant les codes hexadécimaux obtenus en codes ASCII, on arrivait à créer un programme exécutable avec le bloc-notes.
Par exemple, pour faire facilement un programme qui se contentait de ressortir, on pouvait utiliser l'instruction « INT 20h » sur PC. Une fois assemblé, on obtenait CD 20. Traduit en décimal, ça faisait 205 32. Après avoir ouvert un bloc-notes, 205 s'obtenait avec Alt+2+0+5, et 32, c'était l'espace, tout simplement. Une fois saisi ces deux caractères, on sauvait le tout sous « prog.com » et on avait un exécutable en bonne et due forme.
-
très sympa tout ça!
donc voici pour voir si j'ai bien compris, voici un code tout bete tirer d'un site pris au hasard qui affiche un Z avec des couleurs;
J'ouvre un fichier bloc note et je traduit ceci en decimal à l'aide de l'ASCII, de la technique "alt+"
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| .model small ;faut il trouver des valeurs decimal pour ceci où on laisse ?
.stack 100h ; par exemple ceci donnerai: .stack 256 ?
.486
.data
.code
main proc
mov ax,@data
mov ds,ax ; donc ici faut que je trouve la correspondance adequoite? d'ailleur je ne sais pas où trouver ça....
mov ah,09h
mov bh,0
mov cx,1
mov al,'Z'
mov bl,11111001b
int 10h
mov ax,04C00h
int 21h
main endp
end main |
mmmh ça m'interesse beaucoup, j'aimerai savoir comment faire (bien sûr je sais que cela ne sert pas mais bon, c'est interessant
)
(aussi il est donc impossible de coder directement en binaire ? puisque sur un bloc note on ne peut qu'ecrire en decimal)
transposant le tout dans un fichier hexadécimal
Il existe un moyen de lire et ecrire de l'hexadecimal ?
Merci beaucoups pour les infos
-
Pour le format des instructions sur les processeur x86 en 32bits et la traduction asm/machine: http://en.wikibooks.org/wiki/X86_Ass...age_Conversion
Sinon, pour les format des fichiers exécutables Windowb, regarde du côté des "PE File"; il y avait une traduction d'une série de tutoriels sur ce format qui était pas mal fait du tout, une petite recherche sur Googel devrait t'aider
Pour le format des exécutables sous Linux, il faut regarder du côté elf. Là aussi y a moyen de trouver la doc....
À partir de là, tu ouvres ton éditeur hexa préféré, et tu fais du hard-coding 
Il existe un moyen de lire et ecrire de l'hexadecimal ?
Tu utilise un éditeur hexadécimal... Y en a des pas mal sur Internet, en cherchant un peu...
Sinon, ce que peut être très enrichissant, c'est faire un petit compilo toi-même...
-
merci beaucoups, je vais voir ça de suite
-
Mais franchement, laisse tomber l'idée de coder, déjà rien que pour coder en hexa avec les formats elf ou pe, tu vas vraiment t'amuser... C'est du suicide
-

Envoyé par
Lord BlackFox
Mais franchement, laisse tomber l'idée de coder, déjà rien que pour coder en hexa avec les formats elf ou pe, tu vas vraiment t'amuser... C'est du suicide

Parfois tu n'a pas le choix, c'est en général quand tu écrit un driver pour une carte et tu le mixe avec un langage de plus haut niveau pour ce qui n'est pas spécifique à ta carte.
-
et tu code directement en hexa?
Pourquoi ne pas utiliser l'asm alors?
-

Envoyé par
Lord BlackFox
laisse tomber l'idée de coder
oui ne t'inquiete pas, mon but n'étais pas de coder, mais surtout de comprendre
Donc c'est bon, grâve à vous j'ai compris que c'étais possible mais surtout comment ça l'étais
Discussions similaires
-
Réponses: 3
Dernier message: 11/02/2014, 10h19
-
Réponses: 4
Dernier message: 11/02/2009, 04h58
-
Réponses: 5
Dernier message: 28/10/2007, 11h04
-
Réponses: 6
Dernier message: 03/06/2007, 11h57
-
Réponses: 5
Dernier message: 11/04/2004, 23h07
Partager