1拥娄、編譯報(bào)錯(cuò):
Fatal: attempt to generate unsupported relocation type `R_HEX_32_6_X' for symbol `R5', recompile with -fPIC
這個(gè)說明 R5 這個(gè)寄存器用的有問題,才發(fā)現(xiàn)寫的時(shí)候 memw 把寄存器當(dāng)立即數(shù)用了
2瞳筏、多次遇到加了編譯器優(yōu)化選項(xiàng)之后就報(bào)錯(cuò)的問題稚瘾,不加就能正常執(zhí)行,記得之前有一次是在匯編代碼里面換了一個(gè)使用的寄存器就解決了姚炕,這次是不是也是這個(gè)問題摊欠?
事實(shí)證明確實(shí)是類似的問題,但是看不到程序內(nèi)部的情況柱宦,所以我猜測(cè)是加了編譯器優(yōu)化選項(xiàng)之后發(fā)生了寄存器踩踏的行為些椒,因?yàn)槲以趨R編代碼里面加了寄存器壓棧出棧的操作之后問題就解決了。
3掸刊、使用memw指令時(shí)遇到一個(gè)問題摊沉,就是要訪問的地址沒有按照 word 對(duì)齊的時(shí)候會(huì)出錯(cuò),程序會(huì)crush痒给。所以使用這類指令的時(shí)候要注意字節(jié)對(duì)齊说墨。沒辦法只能改用 memub了。
4苍柏、匯編里面如果入?yún)⑹莻€(gè)地址尼斧,而匯編代碼中需要改變改地址的值,不能直接在該入?yún)⒌募拇嫫魃线M(jìn)行操作试吁,最好是將該地址的值先賦值給其它寄存器棺棵,再進(jìn)行對(duì)應(yīng)的操作楼咳。