鍍金池/ 教程/ Java/ Assembly 內(nèi)存段
Assembly 變量聲明
Assembly匯編 STOS指令
Assembly 條件
Assembly 尋址模式和MOV指令
Assembly匯編教程
Assembly - 什么是匯編語言
Assembly 循環(huán)
Assembly 內(nèi)存段
Assembly匯編 宏
Assembly 寄存器
Assembly匯編 遞歸
Assembly匯編 CMPS指令
Assembly匯編 內(nèi)存管理
Assembly匯編 LODS指令
Assembly 基本語法
Assembly匯編 過程
Assembly匯編 文件管理
Assembly匯編 數(shù)組
Assembly匯編 SCAS指令
Assembly 算術(shù)指令
Assembly 環(huán)境設(shè)置
Assembly匯編 字符串處理
Assembly 數(shù)字
Assembly 常量
Assembly匯編 MOVS指令
Assembly 邏輯指令
Assembly 系統(tǒng)調(diào)用

Assembly 內(nèi)存段

我們已經(jīng)討論了匯編程序的三個(gè)部分。這些部分代表不同的內(nèi)存段。

有趣的是,如果更換部分關(guān)鍵字段,會(huì)得到相同的結(jié)果。試試下面的代碼:

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

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

Hello, world!

內(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ù)段的用來聲明數(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ù)值。