25

私は言語を学ぶのを助けるためにいくつかの赤ちゃん NASM プログラムを使用しています。

私が読んだことによると、NASM プログラムには 3 つのセクションがあります。必須の .data、.bss、および .text。しかし、部門の名前が である場合もあれば、 である場合もあることがよくありsectionますsegment

たとえば、オンラインで見つけたこの「Hello World」の場合:

;  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

のすべてのインスタンスを変更SECTIONSEGMENTても、引き続き機能します。

もしあれば、誰かが2つの違いを説明できますか?

4

2 に答える 2

32

nasmのドキュメントから:

SECTION ディレクティブ (SEGMENT はまったく同じ同義語です)

Nasm はさまざまな形式で出力を生成でき、その一部はセクションをサポートします。特定のセクション名は任意 (リストした 3 つなど) にすることができます。それらの場合、セクション フラグのみがカウントされます。定義済みのものは単なる便利なショートカットで.textあり、コードを含む、.data読み書き初期化データ、および.bssゼロ初期化読み書きデータとしてマークされています。fooコード セクションとしてマークされている限り、名前付きのセクションにコードを配置でき、必要に応じて複数のセクションを使用できます。

于 2013-02-27T23:21:43.130 に答える