Assembly 內存段
我們已經討論了彙編程序的三個部分。這些部分代表不同的內存段。
有趣的是,如果更換部分關鍵字段,會得到相同的結果。試試下麵的代碼:
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部分是靜態內存部分,其中包含的緩衝區進行數據宣布以後在程序。這個緩衝存儲器是零填充。
-
代碼段 - 它表示文字部分。這定義的區域在存儲器中存儲的指令代碼。這也是一個固定的區域。
-
堆 - 此段包含傳遞給程序的功能和程序內的數據值。