我們已經討論了組合程式的三個部分。這些部分代表不同的記憶體段。
有趣的是,如果更換部分關鍵欄位,會得到相同的結果。試試下面的程式碼:
segment .text ;code segment global _start ;must be declared for linker _start: ;tell linker entry yiibai 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!
分段儲存模型的系統記憶體劃分成獨立的段,參照指標位於段暫存器組。每個段是指包含特定型別的資料。一個段被用於包含指令程式碼,另一個段儲存的資料元素,和第三個分部保持程式堆疊。
根據上面的討論,我們可以指定不同的記憶體段:
資料段 - 它由資料段的和bss段。資料段的用來宣告資料元素的儲存程式的記憶體區域。本節不能擴大後的資料元素的宣告,並在整個程式中它仍保持不變。
bbs部分是靜態記憶體部分,其中包含的緩衝區進行資料宣布以後在程式。這個緩衝儲存器是零填充。
程式碼段 - 它表示文字部分。這定義的區域在儲存器中儲存的指令程式碼。這也是一個固定的區域。
堆 - 此段包含傳遞給程式的功能和程式內的資料值。