如何閱讀反彙編檔案? 以下是乙個例子
4bc: e3a0244e mov r2, #1308622848
4c0: e3a0344e mov r3, #1308622848
4c4: e5933000 ldr r3, [r3]
像4bc這些是**執行的位址, e3a0244e是機器碼
那常用的彙編指令有哪些?
b, bl
這兩條指令為跳轉指令,不同之處在於bl指令除了跳轉之外,還將返回位址儲存在lr暫存器中。
mov這個指令可以把乙個暫存器的值賦給另乙個暫存器,或者把乙個常熟賦給暫存器。常數必須能用立即數來表示
當不能用立即數來表示時可以使用ldr命令來賦值。ldr是偽指令,它不是真實存在的指令,編譯器會把它擴充套件成真正的命令。
ldr r1, =label
當它的第二個引數前有=號時,表示偽指令,否則表示記憶體訪問指令
ldr r1, [r2, #4] 將位址r2+4的記憶體單元資料讀取到r1中
ldr r1, [r2] 將位址為r2的記憶體單元的資料讀取到r1中
ldr r1, [r2], #4 將位址為r2的記憶體單元資料讀取到r1中,然後r2 = r2+4
str r1, [r2, #4] 將r1的資料儲存到位址為r2+4的記憶體單元中
str r1, [r2] 將r1的資料儲存到位址為r2的記憶體單元中
str r1, [r2], #4 將r1的資料儲存在位址為r2的記憶體單元中,然後r2=r2+4
add、sub
add r1, r2, #1 r1=r2+1
sub r1, r2, #1 r1=r2-1
msr mrs
msr cpsr, r0 複製r0到cpsr中
mrs r0, cpsr 複製cpsr到r0
arm有r0-r15 16個暫存器
r15 表示程式計數器,也就是pc
r14表示lr,連線暫存器
r13表示sp,資料棧指標
一般來說,當引數不超過4個時,使用r0-r3這4個暫存器來傳遞引數;如果引數個數超過4個,剩餘的引數通過資料棧來傳遞
對於一般的返回結果用a0-a3來傳遞
彙編指令msr STM 常用彙編指令
在嵌入式開發中,匯程式設計序常常用於非常關鍵的地方,比如系統啟動時初始化,進出中斷時 的環境保護,恢復等對效能有要求的地方。arm指令集可以分為六大類,分別為資料處理指令 load store 指令 跳轉指令 程式狀態 暫存器處理指令 協處理器指令和異常產生指令。arm指令使用的基本格式如下 opc...
常用彙編指令
1 加減指令 2 adr指令 adr是小範圍的位址讀取偽指令,ldr是大範圍的讀取位址偽指令。可實際上adr是將基於pc相對偏移的位址值或基於暫存器相對位址值讀取的為指令,而ldr用於載入32為立即數或乙個位址到指定的暫存器中。到這兒就會看到其中的區別了。如果在程式中想載入某個函式或者某個在聯接時候...
常用彙編指令
一 資料傳輸指令 它們在存貯器和 暫存器 寄存 器和輸入輸出埠之間傳送資料.1.通用資料傳送指令.mov 傳送字或位元組.movsx 先符號擴充套件,再傳送.movzx 先零擴充套件,再傳送.push 把字壓入堆疊.pop 把字彈出堆疊.pusha 把ax,cx,dx,bx,sp,bp,si,di依...