Dalvik技術揭秘之四-Dalvik虛擬機器的指令格式

來源:互聯網
上載者:User

在分析Dalvik虛擬機器運行之前,先要瞭解Davlik指令,但是瞭解Davlik指令之前又要先懂得指令的格式,才能看得懂指令是怎麼樣構成,怎麼樣表達,怎麼樣查看,下面就來仔細地學習指令格式,這樣在代碼裡看到指令時,就會很自然而然知道這條指令是幹什麼用了。在Dalvik虛擬機器的目錄下面有這樣一份文檔,我們來仔細學習它,如下:

本文描述了在Dalvik虛擬機器裡位元組碼的指令格式,這種指令格式是使用在另一個文檔《指令位元組碼參考》文檔裡。

指令的位描述

下表第一列裡說明了每個指令位的布局情況,每16位的字採用空格分隔開來,每個字母表示四位,每個字母按順序從高節開始,排列到低位元組。每四位之間可能使用豎線(|)來表示不同的內容,提高對指令的可讀性。採用大寫字母A、B等來表示每四位意義,op來表示八位作業碼,0來表示這欄位所有位為0值。

比如指令格式為“B|A|opCCCC”,就是表示這條指令有兩個16位的字組成,因為中間有空格分隔,每個分開的表示16位字。第一個16位,就是“B|A|op”,高位元組由B和A組成,低位元組由作業碼op組成。第二個16位是由CCCC組成,它是表示一個16位的值。

指令格式的標識

下表第二列裡是指令的格式編碼,它用在別的文檔和代碼裡來說明指令的格式。指令的格式編碼是由三個字元組成,前兩個是數字,最後一個是字母。第一個數字是表示有多少個16位的字組成這條指令。第二個數字是表示這條指令最多使用多少個寄存器。最後一個字母表示指令另外的資料處理。比如“21t”格式就是表示有兩個16位字組成,使用一個寄存器,t表示有一個分支。有可能後面添加一個字母s在後面,表示靜態串連。

下面表格式就定義了後面出現字母和相關含義:

字母

位元

意義

b

8

立即無符號位元組。(byte)

c

16,32

常量池索引

f

16

介面常量

h

16

表示高位上的值。

i

32

立即不帶正負號的整數,或32位浮點數。

l

64

立即無符號長整數,或者64位雙精確度浮點數。

m

16

方法常量。

n

4

立即無符號半位元組數。

s

16

立即無符號短整數。

t

8,16,32

跳轉,分支。

x

0

沒有另外資料。

文法說明

在下表第三列裡使用人們熟悉的文法來描述指令的工作過程。每條指令從作業碼開始,接著緊跟後面的參數,參數的個數是不定的,每個參數使用逗號分開。無論在第一列裡那一個欄位,如果使用4位來表達的字母,在這裡也是採用這樣的方法的。比如8位在第一列裡表示為“BB”,那麼在文法說明裡也是採用“BB”的方式來說明。當一個參數是寄存器表示時,採用“vX”的方式,這裡採用v而不採用r是避免與代碼裡表示有衝突。

當參數是一個常量數字時表示為“#+X”方式,當參數是訪問相對位址表示為“+X”方式,當參數是表法常量池索引表示為“kind@X”方式,其中kind表示那一個常量池被使用。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.