彙編指令小結

2021-09-20 21:21:46 字數 1731 閱讀 4520

彙編指令小結/#more

本文主要是記錄一些遇到的arm彙編知識。

彙編**以韋東山老師的 第7章nand flash實驗配套**13th_link_4096 中的start.s為例:

.globl _start

_start:

/* 硬體相關的設定 : 把外設的基位址告訴cpu*/

/* 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依次壓...