Assembly 內(nèi)存段

2018-02-06 11:26 更新

我們已經(jīng)討論了匯編程序的三個(gè)部分。這些部分代表不同的內(nèi)存段。有趣的是,如果更換部分關(guān)鍵字段,會(huì)得到相同的結(jié)果。試試下面的代碼:

segment  .text		        ;code segment
    global _start		        ;must be declared for linker 
_start:	 ;tell linker entry w3cschool
	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, w3cschool!',0xa   ;our dear string
len	equ	$ - msg         ;length of our dear string


上面的代碼編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生以下結(jié)果:

Hello, w3cschool!

Assembly 內(nèi)存段

內(nèi)存段

分段存儲(chǔ)模型的系統(tǒng)內(nèi)存劃分成獨(dú)立的段,引用指針位于段寄存器組。每個(gè)段是指包含特定類型的數(shù)據(jù)。一個(gè)段被用于包含指令代碼,另一個(gè)段存儲(chǔ)的數(shù)據(jù)元素,和第三個(gè)分部保持程序堆棧。


根據(jù)上面的討論,我們可以指定不同的內(nèi)存段:

  • 數(shù)據(jù)段 - 它由數(shù)據(jù)段的和bss段。數(shù)據(jù)段的用來(lái)聲明數(shù)據(jù)元素的存儲(chǔ)程序的內(nèi)存區(qū)域。本節(jié)不能擴(kuò)大后的數(shù)據(jù)元素的聲明,并在整個(gè)程序中它仍保持不變。

    bbs部分是靜態(tài)內(nèi)存部分,其中包含的緩沖區(qū)進(jìn)行數(shù)據(jù)宣布以后在程序。這個(gè)緩沖存儲(chǔ)器是零填充。

  • 代碼段 - 它表示文字部分。這定義的區(qū)域在存儲(chǔ)器中存儲(chǔ)的指令代碼。這也是一個(gè)固定的區(qū)域。

  •  - 此段包含傳遞給程序的功能和程序內(nèi)的數(shù)據(jù)值。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)