IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

x86 16-bits Assembleur Discussion :

[Débutant] Compréhension de code


Sujet :

x86 16-bits Assembleur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 174
    Par défaut [Débutant] Compréhension de code
    Bonsoir, je tente d'apprendre l'assembleur et il y a deux chose que je ne comprend pas dans le code suivant:
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    ;-----------------------------------------------------------------------------
    %define ORG 0x00007C00
     
    org ORG ; binary image loaded by BIOS at 07C0:0000
     
    bits 16 ; startup is done in real mode
     
    ;-----------------------------------------------------------------------------
    boot:
    	xor	ax,ax		; set data segments to 0
    	mov	ds,ax
    	mov	es,ax
    	mov	fs,ax
    	mov	gs,ax
    	mov	ax,0x9000	; create stack under segment 0xA000
    	mov	ss,ax
    	mov	sp,0xFFF0
     
    	xor	ah,ah
    	int	0x16		; await keypress
     
    	mov	ax,0x0003	; switch to 80x25
    	int	0x10
     
    	xor	ah,ah
    	int	0x16		; await keypress
     
    	mov	si,msg1		; display msg1 [ds:si]
    .l1
    	lodsb
    	or	al,al
    	jz	.e1
    	mov	ah,0x0E		; BIOS teletype
    	mov	bh,0x00		; display page 0
    	mov	bl,0x07		; text attribute
    	int	0x10		; invoke BIOS
    	jmp	.l1
    .e1
    	xor	ah,ah
    	int	0x16		; await keypress
     
    	mov	ax,0xB800
    	mov	es,ax		; write to [es:di]
    	mov	di,((80*5+8)*2)
    	mov	si,msg2		; display msg2 [ds:si]
    .l2
    	lodsb
    	or	al,al
    	jz	.e2
    	stosb
    	inc	edi
    	jmp	.l2
    .e2
    	xor	ah,ah
    	int	0x16		; await keypress
     
    	int	0x19		; warm boot computer
     
    msg1	db 0x0D,0x0A,"Bios message !",0x0D,0x0A,0x00
    msg2	db "Raw message !",0x00
     
    ;-----------------------------------------------------------------------------
    	times 510-($-$$) db 0	; the boot sector (512 bytes) must end with
    	db 0x55, 0xAA		; 55 AA to be loaded by BIOS
    ;-----------------------------------------------------------------------------
    Déja je ne vois pas la diference entre un label tel que ''boot:'', ''.l1'' et ''msg1''.
    Je ne comprend pas non plus cette ligne(notament avec le symbole $) :Pouvez vous m'aiclairer sur ces points?
    merci d'avance

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 169
    Par défaut
    Il me semble qu'en assembleur, un label n'est utilisé que par le logiciel d'assemblage et qu'il n'y a donc pas de différence entre un label de variable ou de position.

    Le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    times 510-($-$$) db 0
    indique au logiciel d'assemblage de combler le fichier produit avec des 0 jusqu'à ce qu'il fasse 510 octest exactement. On rajoute ensuite les deux octets 55h et AAh, et on arrive à 512 octets, ce qui est la taille d'un secteur d'une disquette, et donc par extension celui d'un secteur de boot comme celui-ci. Le 55AA à la fin servent à indiquer au BIOS que ce secteur est bootable.

    En espérant avoir pu t'aider !

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 174
    Par défaut
    Merci ça m'éclaire un peu .
    Mais pourrais tu me dire la signification exacte des symboles $?
    merci

  4. #4
    Membre Expert
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Par défaut
    $ renvoit la valeur de l'adresse courante (je ne suis pas sur que mon explication
    soit exacte, mais en gros c'est ça)

    Par contre, je ne sais pas ce que fait $$

    DAPOUNET T'ES OU ???!!

    a+ François

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 169
    Par défaut
    $ renvoit l'adresse de début de ligne, et $$ l'adresse de début de section. Donc $-$$ permet donc de calculer l'adresse effective de l'endroit ou tu places ces expressions par rapport au début de la section.

    NASM supports two special tokens in expressions, allowing calculations to involve the current assembly position: the $ and $$ tokens. $ evaluates to the assembly position at the beginning of the line containing the expression; so you can code an infinite loop using JMP $. $$ evaluates to the beginning of the current section; so you can tell how far into the section you are by using ($-$$).

  6. #6
    Membre confirmé
    Inscrit en
    Décembre 2004
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 33
    Par défaut
    Symbole De Ce Qui Est Le Dollar $

    Il Sert A Montrer Au Micro Que Le Numero Qui Va A Continuacion
    Est En Numeracion Hexadecimal

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 18/02/2014, 11h29
  2. Débutant: compréhension code et conversion en VB
    Par Casey_ dans le forum Langage
    Réponses: 4
    Dernier message: 02/02/2011, 09h18
  3. [débutant] Compréhension de code II
    Par isarian dans le forum C#
    Réponses: 19
    Dernier message: 07/03/2008, 10h27
  4. [débutant] Compréhension de code
    Par isarian dans le forum C#
    Réponses: 8
    Dernier message: 05/03/2008, 11h30
  5. Réponses: 4
    Dernier message: 06/11/2003, 10h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo