彙編指令小結/#more
本文主要是記錄一些遇到的arm彙編知識。
彙編**以韋東山老師的 第7章nand flash實驗配套**13th_link_4096 中的start.s為例:/* 硬體相關的設定 : 把外設的基位址告訴cpu*/.globl _start
_start:
/* peri port setup */
ldr r0, =0x70000000
orr r0, r0, #0x13
mcr p15,0,r0,c15,c2,4 @ 256m(0x70000000-0x7fffffff)
/* 關看門狗 /
/ 往wtcon(0x7e004000)寫0 */
ldr r0, =0x7e004000
mov r1, #0
str r1, [r0]
/* 重定位 /
adr r0, _start / _start當前指令位址 /
ldr r1, =_start / _start的編譯位址 */
ldr r2, =bss_start
cmp r0, r1
beq clean_bss
copy_loop:
ldr r3, [r0], #4
str r3, [r1], #4
cmp r1, r2
bne copy_loop
/* 清bss段 */
clean_bss:
ldr r0, =bss_start
ldr r1, =bss_end
mov r2, #0
clean_loop:
str r2, [r0], #4
cmp r0, r1
bne clean_loop
/* 設定棧 */
ldr sp, =8*1024
ldr pc, =main /* 重定位完後, 使用位置相關的指令跳轉 */
bl main
halt:
b halt
第六行:
ldr r0, =0x70000000
第七行:
orr r0, r0, #0x13
第八行:
mcr p15,0,r0,c15,c2,4
第十四行:
str r1, [r0]
作用:用於從源暫存器中將乙個32位的字資料傳送到儲存器中。在arm架構下, 資料從記憶體到cpu之間的移動只能通過ldr/str指令來完成。而mov只能在暫存器之間移動資料,或者把立即數移動到暫存器中,並且資料的長度不能超過8位。
第十七行:
adr r0, _start
第二十行:
cmp r0, r1
cpsr注:第二十一行:
beq clean_bss
第二十六行:
bne copy_loop
第四十一行:
bl main
arm處理器控制程式執行方式注:通過跳轉指令來控制程式執行:b-跳轉到指定的指令處執行;bl-跳轉執行,儲存子程式位址並返回;bx-跳轉執行並切換到thumb狀態;blx-三種方式組合。
PowerPC 彙編指令小結
1.暫存器模型 2.記憶體訪問 li r7,123 stw r7,0 r1 store register r7 to the stack lwz r3,0 r1 load register r3 from the stack blrstw r7,0 r1 儲存r7到stack中,如果用stwu在同時...
mo彙編指令 彙編指令大全
一 資料傳輸指令 它們在存貯器和暫存器 暫存器和輸入輸出埠之間傳送資料.1.通用資料傳送指令.mov 傳送字或位元組.movsx 先符號擴充套件,再傳送.movzx 先零擴充套件,再傳送.push 把字壓入堆疊.pop 把字彈出堆疊.pusha 把ax,cx,dx,bx,sp,bp,si,di依次壓...
彙編 彙編指令大全
一 資料傳輸指令 它們在存貯器和暫存器 暫存器和輸入輸出埠之間傳送資料.1.通用資料傳送指令.mov 傳送字或位元組.movsx 先符號擴充套件,再傳送.movzx 先零擴充套件,再傳送.push 把字壓入堆疊.pop 把字彈出堆疊.pusha 把ax,cx,dx,bx,sp,bp,si,di依次壓...