ARM指令解析
l偽指令
1、為什需要偽指令
要解決這個(gè)問(wèn)題我們先要了解一下機(jī)器碼,同樣我們要用到在arm寄存器解析那一節(jié)用到的《ARM Architecture Reference Manual》這本資料在我們學(xué)習(xí)arm的過(guò)程中十分重要。說(shuō)到機(jī)器碼我們必須要看看arm的機(jī)器編碼格式
28~31bits(cond):是條件碼,就是表明這條語(yǔ)句里是否有大于、等于、非零等的條件判斷,這4bits共有16種狀態(tài),分別為:
二進(jìn)制碼 | 指令符號(hào) | 含義 | 二進(jìn)制碼 | 指令符號(hào) | 含義 |
0 | EQ | 相等 | 1 | NE | 不等 |
0010 | CS/HS | 進(jìn)位/無(wú)符號(hào)數(shù)大于等于 | 0011 | CC/LO | 清進(jìn)位/無(wú)符號(hào)數(shù)小于 |
0100 | MI | 減/負(fù)數(shù) | 0101 | PL | 加/正數(shù)或0 |
0110 | VS | 溢出 | 0 | VC | 沒(méi)溢出 |
1 | HI | 無(wú)符號(hào)數(shù)大于 | 1001 | LS | 無(wú)符號(hào)數(shù)小于等于 |
1010 | GE | 有符號(hào)數(shù)大于等于 | 1011 | LT | 有符號(hào)數(shù)小于 |
1100 | GT | 有符號(hào)數(shù)大于 | 1101 | LE | 有符號(hào)數(shù)小于等于 |
0 | AL | 任何條件 | 1 | - | 未定義 |
21~24bits(opcode)是指令碼,用來(lái)表明這條指令是什么指令。
12~15bits(Rd)是指令中的目的寄存器,存放寄存器的4bits編號(hào)
0~11bits(shifter_operand)指令的操作數(shù)。
我們可以看到指令的操作數(shù)最多只能為12位(其實(shí)中間還有4位用作別的用途,因此只有8位來(lái)表示立即數(shù)或者寄存器),難以解決多余8位的數(shù),因此引入偽指令來(lái)解決。
2、偽指令解析:
偽指令主要在編譯的時(shí)候起作用,它本身不產(chǎn)生機(jī)器碼,而是在編譯的時(shí)候起作用,告訴編譯器如何編譯,另一種作用就是轉(zhuǎn)換為其他的實(shí)際的指令。
下面介紹幾個(gè)常見(jiàn)的GNU風(fēng)格的偽指令(一般會(huì)在前面加一個(gè)點(diǎn)’.’):
(1)global:把一個(gè)符號(hào)定義為全局的。
(2)data:用來(lái)定義數(shù)據(jù)段。
(3)ascii:字符串類型的數(shù)據(jù)。
(4)byte:字節(jié)型數(shù)據(jù)
(5)word:子數(shù)據(jù)
(6)equ:類似于C語(yǔ)言的宏定義
(7)align:控制對(duì)齊。加在需要被對(duì)齊(被調(diào)整)的標(biāo)號(hào)(地址/指令)之前
l協(xié)處理器指令
1.什么是協(xié)處理器
用于執(zhí)行特定的任務(wù),減輕處理器核的負(fù)擔(dān)。一共可以支持16個(gè)協(xié)處理器,cp15是最重要的一個(gè)協(xié)處理器。
2.CP15的作用
系統(tǒng)控制協(xié)處理器,提供了很多額外的寄存器,通過(guò)這些寄存器我們可以控制和配置cache,MMU,時(shí)鐘系統(tǒng)等。訪問(wèn)他主要是訪問(wèn)他的寄存器,從而達(dá)到對(duì)系統(tǒng)的控制。
3.CP15的寄存器訪問(wèn)
1.mcr:從通用寄存器到協(xié)處理器的寄存器
2.mrc:從協(xié)處理器的寄存器到通用寄存器
這里只是說(shuō)到他的簡(jiǎn)單用法,更多內(nèi)容參考《ARM Architecture Reference Manual》(一定要多讀英文文檔)。
以上是自己的arm指令的簡(jiǎn)單理解,希望各位提出寶貴意見(jiàn)。
評(píng)論