Assembly 記憶體段

我們已經討論了組合語言程式的三個部分。這些部分代表不同的記憶體段。

有趣的是,如果更換部分關鍵字段,會得到相同的結果。試試下麵的代碼:

segment  .text		        ;code segment
    global _start		        ;must be declared for linker
_start:	 ;tell linker entry zaixian
	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部分是靜態記憶體部分,其中包含的緩衝區進行數據宣佈以後在程式。這個緩衝記憶體是零填充。

  • 代碼段它表示文字部分。這定義的區域在記憶體中存儲的指令代碼。這也是一個固定的區域。

  •  - 此段包含傳遞給程式的功能和程式內的數據值。


上一篇: Assembly 基本語法 下一篇: Assembly 寄存器