2013-02-27 2 views
12

J'utilise des programmes MSNA bébé pour m'aider à apprendre la langue. D'après ce que j'ai lu, les programmes MSNA peuvent avoir trois sections; le .data, le .bss, et le .text qui est obligatoire. Cependant, je trouve très souvent que parfois les noms des divisions sont section et d'autres fois segment.Différence entre "section" et "segment" dans MSNA

Par exemple, avec ce « Bonjour tout le monde » J'ai trouvé en ligne:

; hello.asm a first program for nasm for Linux, Intel, gcc 
; 
; assemble: nasm -f elf -l hello.lst hello.asm 
; link:  gcc -o hello hello.o 
; run:   hello 
; output is: Hello World 

    SECTION .data  ; data section 
msg: db "Hello World",10 ; the string to print, 10=cr 
len: equ $-msg  ; "$" means "here" 
       ; len is a value, not an address 

    SECTION .text  ; code section 
     global main  ; make label available to linker 
main:    ; standard gcc entry point 

    mov edx,len  ; arg3, length of string to print 
    mov ecx,msg  ; arg2, pointer to string 
    mov ebx,1  ; arg1, where to write, screen 
    mov eax,4  ; write sysout command to int 80 hex 
    int 0x80  ; interrupt 80 hex, call kernel 

    mov ebx,0  ; exit code, 0=normal 
    mov eax,1  ; exit command to kernel 
    int 0x80  ; interrupt 80 hex, call kernel 

Si je change tous les cas de SECTION-SEGMENT il fonctionne toujours. Est-ce que quelqu'un peut expliquer la différence entre les deux, le cas échéant?

Répondre

22

De l'nasm documentation:

La directive SECTION (SEGMENT est exactement équivalent synonyme)

Nasm peut produire des données dans différents formats, dont certaines sections prennent en charge. Certains noms de section peuvent être arbitraires (comme les trois que vous avez listés), pour eux seuls les drapeaux de section comptent. Les codes prédéfinis ne sont que des raccourcis de commodité, .text est marqué comme contenant du code, .data comme des données initialisées en lecture-écriture et .bss comme des données de lecture-écriture initialisées à zéro. Vous pouvez mettre votre code dans une section nommée foo tant qu'il a été marqué comme une section de code, et vous pouvez utiliser plusieurs sections comme bon vous semble.

+0

J'ai fait beaucoup de googling et je n'ai rien trouvé ... J'aurais dû regarder dans la documentation aussi, je m'en excuse. Merci pour la réponse et pour le lien. Peut-être que ce fil sera utile aux futurs crétins au moins – CodyBugstein

Questions connexes