Bonjour !
Je suis débutant en assembleur (j'ai commencé hier, avec un passif de programmation en C) et j'aurais plusieurs questions. Une réponse même partielle, j'apprécierais beaucoup !!
Je programme avec TASM. Après avoir réussi plusieurs programmes faciles je me suis intéressé à ce qu'il se passait réellement quand le programme était exécuté. Ainsi j'ai compilé et exécuté, puis désassemblé un "hello world".
Et j'obtiens au désassemblage avec Hackman
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 .386 unique segment use16 assume cs:unique, ds:unique org 100h debut: mov ah, 09h mov dx, offset message int 21h message db 'Hello World$' unique ends end debut
Hackman Disassembler
Starting from offset 00000000
Ending at offset 00000012
Virtual address 00000000
Signed/Unsigned arithmetic Unsigned
Une foule de questions sur un si petit exemple:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 ******************************************************* Adress Hex Command Flags 00000000 B409 MOV ah,0x09 00000002 BA0701CD21 MOV edx,0x21CD0107 00000007 48 DEC eax 00000008 65 GS: 00000009 6C INSB esi,dx 0000000A 6C INSB esi,dx 0000000B 6F OUTSD esi 0000000C 20576F AND [edi+0x6F],dl 0000000F 726C JB [0x7D] 00000011 64 FS: 00000012 2400 AND al,0x00 *******************************************************
-JB et GS sont-ils des marqueurs de segmentation de la mémoire ? Si oui, comment celà se fait-il ? Je suis en .com il ne devrait y avoir qu'un seul segment non ? J'ai lu que JB et GS sont des registres de données dans un programme multi-segments or ils ne sont pas utilisés comme des registres. Ils sont interdits de manipulation par le programme ? Réservés à l'OS ? (comme tout ce qui touche à la segmentation)
-En supposant qu'il s'agisse bien de "marqueurs" de segmentation pour permettre au processeur de s'y retrouver, j'aimerais bien plus d'informations à ce sujet évidemment. Pourquoi on les utilise, qui les manipule, les opérations qu'on peut ou ne peut pas faire avec etc... Si vous avez une bonne page web (ou un site plus globalement) susceptible de m'éclairer ça je suis preneur car je n'ai rien trouvé pour le moment.
-Si j'ai raison... De l'adresse 7 à F, celà correspond à la fonction 0x02 de l'interruption 21 ? Il s'agit d'une série d'instructions que je ne semble pas avoir programmées et qui s'achèvent par un branchement (?) donc je suppose, je suppose...
-Si j'ai bien calculé le JB en F branche en A (il fait décaller ip de -4).
1) Le calcul est-il correct ?
2) Pourquoi ce saut ? (si c'est lié à l'int 21 ou pas)
-A quoi sert ce "And" sans branchement derrière, à l'adresse 12 ?
J'ai l'impression que mes questions sont ridicules, mais j'ai l'impression aussi qu'en assembleur il est enfin permis de comprendre ce qu'on fait et pourquoi on le fait, car le langage est poussé et il a de nombreux vétérans qui l'emploient depuis longtemps (donc le comprennent). J'espère que je serai pas déçu :p
Merci d'avance en tout cas =)
Partager