linux net 伪指令码,1.2.2. ldr pWTCON
偽指令,就是“偽”的指令,是針對(duì)“真”的指令而言的。
真的指令就是那些常見(jiàn)的指令,比如上面說(shuō)的arm的ldr,bic,msr等等指令,是arm體系架構(gòu)中真正存在的指令,你在arm匯編指令集中找得到對(duì)應(yīng)的含義。
而偽指令是寫(xiě)出來(lái)給匯編程序看的,匯編程序能看的偽指令具體表示的是啥意思,然后將其翻譯成真正的指令或者進(jìn)行相應(yīng)的處理。
偽指令ldr語(yǔ)法和含義:
另外還有一個(gè)就是ldr偽指令,雖然ldr偽指令和ARM的ldr指令很像,但是作用不太一樣。ldr偽指令可以在立即數(shù)前加上=,以表示把一個(gè)地址寫(xiě)到某寄存器中,比如:
ldr r0, =0x12345678
這樣,就把0x12345678這個(gè)地址寫(xiě)到r0中了。所以,ldr偽指令和mov是比較相似的。
只不過(guò)mov指令后面的立即數(shù)是有限制的,這個(gè)立即數(shù),能夠必須由一個(gè)8位的二進(jìn)制數(shù),即屬于0x00-0xFF內(nèi)的某個(gè)值,經(jīng)過(guò)偶數(shù)次右移后得到,這樣才是合法數(shù)據(jù),而ldr偽指令沒(méi)有這個(gè)限制。
那為何ldr偽指令的操作數(shù)沒(méi)有限制呢,那是因?yàn)槠涫莻沃噶?#xff0c;寫(xiě)出來(lái)的偽指令,最終會(huì)被編譯器解釋成為真正的,合法的指令的,一般都是對(duì)應(yīng)的mov指令。
這樣的話,寫(xiě)匯編程序的時(shí)候,使用MOV指令是比較麻煩的,因?yàn)橛行┖?jiǎn)單的數(shù)據(jù)比較容易看出來(lái),有些數(shù)據(jù)即不容易看出來(lái)是否是合法數(shù)據(jù)。所以,對(duì)此,ldr偽指令的出現(xiàn),就是為了解決這個(gè)問(wèn)題的,你只管放心用ldr偽指令,不用關(guān)心操作數(shù),而寫(xiě)出的ldr偽指令,編譯器會(huì)幫你翻譯成對(duì)應(yīng)的真正的匯編指令的。
而關(guān)于編譯器是如何將這些ldr偽指令翻譯成為真正的匯編指令的,我的理解是,其自動(dòng)會(huì)去算出來(lái)對(duì)應(yīng)的操作數(shù),是否是合法的mov 的操作數(shù),如果是,就將該ldr偽指令翻譯成mov指令,否則就用別的方式處理,我所觀察到的,其中一種方式就是,單獨(dú)申請(qǐng)一個(gè)4字節(jié)的空間用于存放操作數(shù),然后用ldr指令實(shí)現(xiàn)。
在uboot中,最后make完畢之后,會(huì)生產(chǎn)u-boot,
通過(guò):arm-linux-objdump –d u-boot > dump_u-boot.txt
就可以把對(duì)應(yīng)的匯編代碼輸出到該txt文件了,其中就能找到偽指令:ldr r0, =0x53000000
所對(duì)應(yīng)的,真正的匯編代碼:33d00068:e3a00453 movr0, #1392508928; 0x53000000
所以被翻譯成了mov指令。
而經(jīng)過(guò)我的嘗試,故意將0x53000000改為0x53000010,對(duì)應(yīng)的生產(chǎn)的匯編代碼為:33d00068:e59f0408 ldrr0, [pc, #1032]; 33d00478
......
33d00478:53000010 .word0x53000010
其中可以看到,由于0x53000010不是有效的mov的操作數(shù),沒(méi)法找到合適的0x00-0Xff去通過(guò)偶數(shù)次循環(huán)右移而得到,所以只能換成此處這種方式,即在另外申請(qǐng)一個(gè)word的空間用于存放這個(gè)值:33d00478:53000010 .word0x53000010
然后通過(guò)計(jì)算出相對(duì)當(dāng)前PC的偏移,得到的地址,用ldr指令去除該地址中的值,即0x53000010,送給r0,比起mov指令,要復(fù)雜的多,也多消耗了一個(gè)word的空間。
對(duì)應(yīng)地,其他的方式,個(gè)人理解,好像也可以通過(guò)MVN指令來(lái)實(shí)現(xiàn),具體細(xì)節(jié),有待進(jìn)一步探索。
總結(jié)
以上是生活随笔為你收集整理的linux net 伪指令码,1.2.2. ldr pWTCON的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: samba安装_Centos安装Samb
- 下一篇: linux mysql安装_LINUX