ARM基礎學習-局部標號

局部標號主要用於在局部範圍內使用。他由兩部分組成:開頭是一個0~99的數字,後面緊跟着一個通常表示該局部變量作用範圍的符號。
局部變量的作用範圍通常爲當前段,也可以用僞操作ROUT來定義局部變量的作用範圍。

    局部標號定義格式:N{routname}
    其中:N 局部標號,爲0~99。
    routname 局部標號作用範圍的名稱,由ROUT 僞指令定義。
    局部標號引用格式:
    %{F|B}{A|T} N{routname}
    其中: % 表示局部標號引用操作。
    F 指示編譯器只向前搜索
    B 指示編譯器只向後搜索
    A 指示編譯器搜索宏的所有嵌套層次
    T 指示編譯器搜索宏的當前層

    如果F和B都沒有指定,則編譯器先向前搜索,再向後搜索。如果A和T 都沒有指定,編譯器搜索所有從宏的當前層次到宏的最高層次,比當前層次的層次不再搜索。
    如果指定了routname,編譯器向前搜索最近的ROUT 僞指令,若routname 與該ROUT僞指令定義的名稱不匹配,編譯器報告錯誤,彙編失敗。
memsetup:
    @ 設置存儲控制器以便使用SDRAM等外設

    mov r1,     #MEM_CTL_BASE   @ 存儲控制器的13個寄存器的開始地址
    adrl    r2, mem_cfg_val              @ 這13個值的起始存儲地址
    add r3,     r1, #52                       @ 13*4 = 54
1:  
    ldr r4,     [r2], #4            @ 讀取設置值,並讓r2加4
    str r4,     [r1], #4            @ 將此值寫入寄存器,並讓r1加4
    cmp r1,     r3                 @ 判斷是否設置完所有13個寄存器
    bne 1b                          @ 若沒有寫成,繼續
    mov pc,     lr                 @ 返回

上面bne 1b 的意思是,如果r1!=r3 即r1的地址的不等於r3的地址,也就是還沒設置完這13個寄存器,就要重新跳到:

1:  
    ldr r4,     [r2], #4            @ 讀取設置值,並讓r2加4
    str r4,     [r1], #4            @ 將此值寫入寄存器,並讓r1加4
    ......

處執行;直到r1=r3,即設置好這13個寄存器。纔會結束這個局部循環。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章