日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux net 伪指令码,1.2.2. ldr pWTCON

發布時間:2024/7/19 linux 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux net 伪指令码,1.2.2. ldr pWTCON 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

偽指令,就是“偽”的指令,是針對“真”的指令而言的。

真的指令就是那些常見的指令,比如上面說的arm的ldr,bic,msr等等指令,是arm體系架構中真正存在的指令,你在arm匯編指令集中找得到對應的含義。

而偽指令是寫出來給匯編程序看的,匯編程序能看的偽指令具體表示的是啥意思,然后將其翻譯成真正的指令或者進行相應的處理。

偽指令ldr語法和含義:

另外還有一個就是ldr偽指令,雖然ldr偽指令和ARM的ldr指令很像,但是作用不太一樣。ldr偽指令可以在立即數前加上=,以表示把一個地址寫到某寄存器中,比如:

ldr r0, =0x12345678

這樣,就把0x12345678這個地址寫到r0中了。所以,ldr偽指令和mov是比較相似的。

只不過mov指令后面的立即數是有限制的,這個立即數,能夠必須由一個8位的二進制數,即屬于0x00-0xFF內的某個值,經過偶數次右移后得到,這樣才是合法數據,而ldr偽指令沒有這個限制。

那為何ldr偽指令的操作數沒有限制呢,那是因為其是偽指令,寫出來的偽指令,最終會被編譯器解釋成為真正的,合法的指令的,一般都是對應的mov指令。

這樣的話,寫匯編程序的時候,使用MOV指令是比較麻煩的,因為有些簡單的數據比較容易看出來,有些數據即不容易看出來是否是合法數據。所以,對此,ldr偽指令的出現,就是為了解決這個問題的,你只管放心用ldr偽指令,不用關心操作數,而寫出的ldr偽指令,編譯器會幫你翻譯成對應的真正的匯編指令的。

而關于編譯器是如何將這些ldr偽指令翻譯成為真正的匯編指令的,我的理解是,其自動會去算出來對應的操作數,是否是合法的mov 的操作數,如果是,就將該ldr偽指令翻譯成mov指令,否則就用別的方式處理,我所觀察到的,其中一種方式就是,單獨申請一個4字節的空間用于存放操作數,然后用ldr指令實現。

在uboot中,最后make完畢之后,會生產u-boot,

通過:arm-linux-objdump –d u-boot > dump_u-boot.txt

就可以把對應的匯編代碼輸出到該txt文件了,其中就能找到偽指令:ldr r0, =0x53000000

所對應的,真正的匯編代碼:33d00068:e3a00453 movr0, #1392508928; 0x53000000

所以被翻譯成了mov指令。

而經過我的嘗試,故意將0x53000000改為0x53000010,對應的生產的匯編代碼為:33d00068:e59f0408 ldrr0, [pc, #1032]; 33d00478

......

33d00478:53000010 .word0x53000010

其中可以看到,由于0x53000010不是有效的mov的操作數,沒法找到合適的0x00-0Xff去通過偶數次循環右移而得到,所以只能換成此處這種方式,即在另外申請一個word的空間用于存放這個值:33d00478:53000010 .word0x53000010

然后通過計算出相對當前PC的偏移,得到的地址,用ldr指令去除該地址中的值,即0x53000010,送給r0,比起mov指令,要復雜的多,也多消耗了一個word的空間。

對應地,其他的方式,個人理解,好像也可以通過MVN指令來實現,具體細節,有待進一步探索。

總結

以上是生活随笔為你收集整理的linux net 伪指令码,1.2.2. ldr pWTCON的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。