中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

關于重定位代碼的淺顯理解

發布時間:2020-06-28 15:06:07 來源:網絡 閱讀:1164 作者:liuxu112 欄目:開發技術

首先需要朱有鵬老師,這是在學習了朱老師的課程之后的一點理解,代碼是根據朱老師的源碼學習之后編寫的。

關于重定位代碼的淺顯理解

根據反匯編代碼  d0024010:     e24f0018       sub      r0, pc, #24 可以看出通過adr匯編偽指令將加載地址寫入r0寄存器,此時因為adr指令采用相對尋址的尋址方式所以adr實際寫入r0寄存器的地址為程序的加載地址而非反匯編代碼所指示的0xd0024000,通過ldr偽指令將所需重定位的地址寫入r1寄存器,此時r1所存的地址為0xd0024064,該地址的內容為d0024000即為重定位的起始地址.ldr偽指令將bss段的起始地址符號bss_start寫入r2寄存器,當r0r1相等時表示加載地址和重定位地址為同一地址,所以不會進行重定位的相關操作,而是跳轉到清理bss段為C代碼的運行建立環境:如果r0r1不相等,就表示加載地址與實際運行地址不同,所以需要進行重定位以保證代碼在運行時不會出現錯誤。所謂的重定位就是將加載地址處的代碼拷貝一份到實際運行位置處,所以在.S代碼的copy_loop就是將代碼從加載地址處拷貝到實際運行處。在清理完bssC代碼建立好運行環境后通過ldr pc, =led_flash ,ldr長跳轉到C代碼的流水燈程序中。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

龙泉市| 南华县| 金堂县| 杭锦旗| 卢湾区| 耿马| 旺苍县| 砚山县| 札达县| 滨州市| 工布江达县| 应城市| 长白| 邯郸县| 新竹市| 田林县| 濮阳市| 礼泉县| 敖汉旗| 察隅县| 融水| 黎平县| 峨山| 公主岭市| 原平市| 荆门市| 齐河县| 岳阳县| 白玉县| 双牌县| 封开县| 长海县| 报价| 万盛区| 奉化市| 文安县| 兴海县| 康定县| 赤城县| 凤翔县| 海淀区|