1. 程式人生 > 其它 >組合語言中的段(通過段去理解程式碼執行,資料儲存,棧)

組合語言中的段(通過段去理解程式碼執行,資料儲存,棧)

我們可以將一段記憶體定義為一個段,用一個段地址指示段,用偏移地址訪問段內的記憶體單元。我們想怎麼定義就怎麼定義。

1.我們可以定義一個段來存放資料,將他定義為“資料段”
2.我們可以定義一個段來存放程式碼,將他定義為“程式碼段”
3.我們可以定義一個段來當作棧,將他定義為段棧

對於資料段,我們通過普通暫存器AX,BX,CX,DX來給DS段儲存器賦值,將我們定義的資料段的段地址存放在DS中,再通過偏移地址去訪問資料段中的記憶體單元,CPU就將我們定義的資料段中的內容當作資料來訪問。
對於程式碼段,將他的段地址存放在CS程式碼段暫存器中,將第一條指令的偏移地址存放在IP指令指標暫存器中,這樣cpu就將執行我們的程式碼段中的指令。
對於棧段,將他的段地址存放在SS中,將棧頂單元的偏移地址放在SP中,這樣CPU在需要進行入棧出棧操作的時候,就將我們定義的段棧當作棧空間來用。

由此,相信大家一下就徹悟了,我們之前在學習組合語言的過程中,一段記憶體中存放的資料和指令其實都是二進位制的形式沒有區別,在於你把這些資料當作指令來用,還是當作資料來使用

總結:

一段記憶體,可以既是程式碼的儲存空間,又是資料的儲存空間,還可以是棧空間,也可以什麼都不是,就一段記憶體空間,之所以區分指令和資料,區分棧段,資料段,程式碼段,完全是因為CS,IP,SS,SP,DS暫存器的作用。