天天看點

【彙編語言/底層開發】7、更靈活的定位記憶體位址方法

1、[bx+idata]

通常情況下,我們使用ds和[bx]指定記憶體中的一個記憶體單元。而[bx+idata]所表示的是一種更加靈活的方式來定位記憶體位址,其表示的是段位址為DS,偏移位址為(bx)+idata的記憶體位置。通常idata為一個常量,表示一個固定的位址偏移量。如下面幾條指令實際上是等價的:

其中值得注意的是200[bx]這種方法。通常在給定的資料段中,ds的值通常在程式開始時确定,中間不會改動,此時m[bx]這種方法可以實作對數組的處理。即提前确定好針對某個數組相對于ds的位址偏移,并替換m。這樣通過改變bx的值就可以實作對數組元素的周遊。這種方法同進階語言的數組的實作思想類似,如C中表示數組的方法a[i],a也是表示首位址的常量,通過改變索引i的值對數組元素進行周遊。

2、si和di

這兩個寄存器的功能同bx類似,隻是不能拆成高低兩個8位寄存器。這兩個寄存器可以在bx被占用的時候作為輔助記憶體定址寄存器。引入了si和di後,可以使用更加靈活的記憶體定址方式:[bx+si],以及更加複雜的:[bx+si+idata]。

各種定位記憶體位址的方法比較:

(1):[idata]:使用一個常量表示位址,可直接定義一個記憶體單元;

(2):[bx]:使用一個變量表示位址,間接定義一個記憶體單元;

(3):[bx+idata]:使用一個常量+一個變量表示位址,可以在一個常量基礎位址上用變量間接定義記憶體單元;

(4):[bx+si]:用兩個變量表示位址;

(5):[bx+si+idata]:兩個變量+一個常量表示位址。

繼續閱讀