Assembly-programming-assembly-memory-segments
提供:Dev Guides
アセンブリ-メモリセグメント
アセンブリプログラムの3つのセクションについては既に説明しました。 これらのセクションは、さまざまなメモリセグメントも表します。
興味深いことに、セクションキーワードをセグメントに置き換えると、同じ結果が得られます。 次のコードを試してください-
segment .text ;code segment
global_start ;must be declared for linker
_start: ;tell linker entry point
mov edx,len ;message length
mov ecx,msg ;message to write
mov ebx,1 ;file descriptor (stdout)
mov eax,4 ;system call number (sys_write)
int 0x80 ;call kernel
mov eax,1 ;system call number (sys_exit)
int 0x80 ;call kernel
segment .data ;data segment
msg db 'Hello, world!',0xa ;our dear string
len equ $ - msg ;length of our dear string
上記のコードをコンパイルして実行すると、次の結果が生成されます-
Hello, world!
メモリセグメント
セグメントメモリモデルは、システムメモリを、セグメントレジスタにあるポインターによって参照される独立したセグメントのグループに分割します。 各セグメントは、特定のタイプのデータを含めるために使用されます。 1つのセグメントは命令コードを含むために使用され、別のセグメントはデータ要素を保存し、3番目のセグメントはプログラムスタックを保持します。
上記の議論に照らして、さまざまなメモリセグメントを次のように指定できます-
- データセグメント- .data セクションと .bss で表されます。 .dataセクションは、プログラムのデータ要素が保存されるメモリ領域を宣言するために使用されます。 このセクションは、データ要素が宣言された後は展開できず、プログラム全体で静的のままです。 + .bssセクションは、プログラムで後で宣言されるデータ用のバッファを含む静的メモリセクションでもあります。 このバッファメモリはゼロでいっぱいです。
- コードセグメント- .text セクションで表されます。 これは、命令コードを格納するメモリ内の領域を定義します。 これも固定領域です。
- スタック-このセグメントには、プログラム内の関数とプロシージャに渡されるデータ値が含まれます。