2013-02-27 6 views
12

Używam programów dla niemowląt NASM, aby pomóc mi w nauce języka.Różnica między "sekcją" a "segmentem" w NASM

Z tego co przeczytałem, programy NASM mogą mieć trzy sekcje; .data, .bss i .text, które są obowiązkowe. Jednak często stwierdzam, że czasami nazwy dywizji to section, a innym razem to segment.

Na przykład z tym „Hello World” Znalazłem w Internecie:

; 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 

Jeśli zmienić każde wystąpienie SECTION do SEGMENT będzie nadal działać.

Czy ktoś może wyjaśnić różnicę między tymi dwoma, jeśli takie istnieją?

Odpowiedz

22

Z nasm documentation:

Dyrektywa SEKCJA (segment jest dokładnie równoważne synonim)

nasm może produkować wydruki w różnych formatach, z których niektóre obsługują sekcje. Niektóre nazwy sekcji mogą być dowolne (np. Trzy wymienione na liście), dla nich liczą się tylko znaczniki sekcji. Te predefiniowane są po prostu skrótami wygody, .text jest oznaczony jako zawierający kod, .data jako dane inicjowane do odczytu i zapisu oraz .bss jako zinicjowane zerowo dane do odczytu i zapisu. Możesz umieścić swój kod w sekcji o nazwie foo, o ile został oznaczony jako sekcja kodu, i możesz użyć wielu sekcji, jak uważasz za stosowne.

+0

Zrobiłem dużo Googling i nie znalazłem nic ... Powinienem też zajrzeć do dokumentacji, przepraszam. Dziękuję za odpowiedź i za link. Być może ten wątek będzie pomocny przynajmniej przyszłym głupkom – CodyBugstein