彙編基礎學習16

2021-05-02 03:40:26 字數 1127 閱讀 8869

文章** http://www.mcany.cn/article/291.htm

博主 沒落的殘陽

這節來學習下定址方式。

1.首先我們來看什麼是直接定址?

直接定址是我們建立乙個直接偏移的運算元。 舉例 mov eax, dword ptr [00403020h] ,那麼[00403020h]就是直接定址的形式。。加上dword ptr 表示獲取的是我們目標記憶體位址的內容, dowrd ptr 是強制獲取4個位元組。

2.間接定址

那什麼是間接定址呢?

用暫存器作為指標並操縱積存器的值,這稱為間接定址。存放位址的暫存器稱為間接運算元。在32位模式下間接運算元可以是任何用括起來的32位通用暫存器(eax, ebx, ecx, edx ,esi , edi ,ebp ,esp) ,(注意:16位的模式下只能使用bx si di bp 4個暫存器), 暫存器裡面放著資料的偏移。。

舉例: 此時00402030h中存放4個位元組資料。 00h 10h 40h 00h 。

執行 mov esi, 00402030h

mov eax, dowrd ptr [esi]

如果mov 指令使用「間接運算元」作為源運算元,那麼esi內的指標將被用來定址。該位址的4個位元組被傳送到目的運算元中。。 此時eax = 00401000h

3.變址定址

變址運算元將「常量」加到暫存器上以產生乙個有效位址,任何32位通用暫存器都可以作為指標暫存器。

格式:[constant + reg]  --- (constant:常量, reg:暫存器) 。這樣的形式被用到我們高階語言的陣列處理比較多。

舉例:

此時00403020h,存放8個位元組資料 00h 10h 40h 00h 15h 00h 40h 00h

那麼通過  

mov esi, 00403020h

mov eax, dword ptr [esi]

mov eax, dword ptr [esi+4]

這裡大家要注意下,避免使用ebp暫存器。因為ebp暫存器被常用於堆疊段,所以我們要避免這個情況。

這裡我們是依據80386的定址方式,例如80386還可以演化一些相對定址,變址定址等。其實這些也都是基於變址定址的,大家知道就可以了。 。

彙編基礎學習5

文章 http www.mcany.cn article 280.htm 博主 沒落的殘陽 今天我給大家來講解下我們記憶體中資料的儲存以及訪問。這節課的基礎也是非常重要的。因為80386的資料位址線是32根,所以它一次可以傳送資料是4個位元組。所以我們記憶體單元是按照4個位元組來對齊的。用高階語言的...

彙編基礎學習7

博主 沒落的殘陽 這節來講解一下棧的延伸,堆疊 算是把昨天的整個理論基礎概念,給大家講解下。執行時棧 runtime stack 我們通常稱為 堆疊 這是由我們cpu硬體直接支援的,也是實現過程的呼叫和過程返回機制的基本組成部分。不知道大家是否知道rtl是什麼意思。如果學過程式的人都應該知道這個就是...

彙編基礎學習11

文章 http www.mcany.cn article 286.htm 博主 沒落的殘陽 這節來學習下loop迴圈指令。我們高階語言的堆疊分配初始化可是靠它了呵呵。首先我們來看下它的指令格式。loop 標號 ecx不為零時跳轉至標號迴圈.標號只是寫匯程式設計序時用來表示乙個記憶體位址的。例如 to...