2016-02-22 1 views
0

de mon précédent doute - Difference between “mov eax, [num]” and “mov eax, num”à imprimer à la console -> ambuiguity pour les contenus dans ECX et EDX enregistre

Je suis venu à connaître "mov eax, num" stockera adresse num dans eax et "mov eax, [num] "va stocker valeur de num dans eax

Maintenant ICI!

mov  edx, strLen  ; Arg three: the length of the string 
    mov  ecx, str  ; Arg two: the address of the string 
    mov  ebx, 1   ; Arg one: file descriptor, in this case stdout 
    mov  eax, 4   ; Syscall number, in this case the write(2) 

    int  0x80   ; Interrupt 0x80 

section .data  
    str:  db 'Hello, world!',0xA 
    strLen: equ $-str 

registre Idéalement EDX doit avoir une longueur, de sorte

  • comme "mov ecx, str" - magasins adresse de str dans ecx
  • pas "mov edx, strlen "devrait également stocker l'adresse de strlen et non la valeur dans edx.
  • pour stocker valeur de strlen dans EDX, pourquoi nous n'utilisons "mov edx, [strlen]"

le code suivant est référencé à partir de ce lien - http://asm.sourceforge.net/intro/hello.html

Son meurtre moi !

Merci à l'avance ...

+0

est la déclaration dans la section .data et non à la section .bss a une pertinence à ma question! PS: Je connais la section .data, pour déclarer les constantes et la section .bss, pour déclarer les variables. – Sham

+0

* "mov eax, [num]" va stocker la valeur ** de ** num dans eax "* est probablement plus précisément indiqué comme, *" mov eax, [num] "va stocker la valeur ** à ** num dans eax "*, ce qui est probablement ce que vous vouliez dire. – lurker

+0

@lurker oui Lurker c'est ce que je voulais dire – Sham

Répondre

1

strLen est un assimilent (strLen: equ $-str). Donc ce qui se passe est juste une substitution textuelle à la compilation de mov edx, strLen à mov edx, 14. L'utilisation de parenthèses ici serait incorrecte, car cela vous donnerait mov edx, [14], ce qui n'est pas ce que vous voulez faire.

(voir la section 3.2.4 EQU: Définition Constantes dans le manuel MSNA)

+0

@Micheal hey Micheal merci pour cela, mais que diriez-vous de suivre! "nom_fichier" ci-dessous n'est pas un Equate section \t .data ** nom_fichier db 'myfile.txt' ** section .text mov eax, 8 mov ebx, ** nom_fichier * * mov ecx, 0777 int 0x80 – Sham

+0

Vous chargez ici l'adresse de 'file_name', comme la question à laquelle vous avez lié. – Michael