1 / 13

軟體工具學習與組合語言撰寫 STACK & SUB FUNCTION 2011/10/6

軟體工具學習與組合語言撰寫 STACK & SUB FUNCTION 2011/10/6. 微處理機 Microprocessor (100 上 ) ARM 內核嵌入式 SOC 原理. 資料傳送指令. LDR r0, [r1] ;r0 = mem32[r1] STR r0, [r1] ;mem32[r1] = r0 LDR r0,[r1,#4] ;r0 = men32[r1+ 4] LDR r0,[r1,#4]! ;r0 = mem32[r1+ 4] ;

Télécharger la présentation

軟體工具學習與組合語言撰寫 STACK & SUB FUNCTION 2011/10/6

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 軟體工具學習與組合語言撰寫STACK & SUB FUNCTION2011/10/6 微處理機 Microprocessor (100上) ARM 內核嵌入式SOC原理

  2. 資料傳送指令 • LDR r0, [r1] ;r0 = mem32[r1] • STR r0, [r1] ;mem32[r1] = r0 • LDR r0,[r1,#4] ;r0 = men32[r1+ 4] • LDR r0,[r1,#4]! ;r0 = mem32[r1+ 4] ; r1 = r1+ 4 • LDR r0, [r1], #4 ;r0 := mem32 [r1] r1 := r1 + 4

  3. Why use stack instruction • 一次存取多個 • loop + STR r0,[r1,#4]! VS STMIA • loop + LDR r0,[r1,#4]! VS LDMIA

  4. {先加後存} {先減後存} r9’ → r9 → STMIB r9!,{r0,r1,r5} →mem[r9 + 4] = r0 mem[r9 + 8] = r1 mem[r9 + 12] = r5 r9 = r9 + 12 STMDB r9!,{r0,r1,r5} →mem[r9 - 4] = r5 mem[r9 - 8] = r1 mem[r9 - 12] = r0 r9 = r9 - 12 r9 → r9’ → {先存後加} {先存後減} STMDA r9!,{r0,r1,r5} →mem[r9] = r5 mem[r9 - 4] = r1 mem[r9 - 8] = r0 r9 = r9 - 12 r9’ → r9 → STMIA r9!,{r0,r1,r5} →mem[r9] = r0 mem[r9 + 4] = r1 mem[r9 + 8] = r5 r9 = r9 + 12 r9 → r9’ →

  5. {先加後取} {先減後取} r9→ r9’→ → r5 → r1 → r0 LDMIB r9!,{r0,r1,r5} →r0 = mem[r9 + 4] r1 = mem[r9 + 8] r5 = mem[r9 + 12] r9 = r9 + 12 r9’→ r9 → LDMDB r9!,{r0,r1,r5} →r5 = mem[r9 - 4] r1 = mem[r9 - 8] r0 = mem[r9 - 12] r9 = r9 - 12 → r5 → r1 → r0 {先取後加} {先取後減} r9→ r9’→ → r5 → r1 → r0 LDMDA r9!,{r0,r1,r5} →r5 = mem[r9] r1 = mem[r9 - 4] r0 = mem[r9 - 8] r9 = r9 - 12 r9’→ r9 → LDMIA r9!,{r0,r1,r5} →r0 = mem[r9] r1 = mem[r9 + 4] r5 = mem[r9 + 8] r9 = r9 + 12 → r5 → r1 → r0

  6. Stack (example)

  7. 範例(cont.) • 當store為STMIA 時,load 應選擇哪一個指令才能正確讀取數值,想想為什麼 ? • Try it : 當store為STMIB,STMDA,STMDB 應選擇哪一個 並觀察 • data 在memory的address為何 ? • 指標(R0) • 在執行store之後跟load之後的變化 • 在不同的堆疊指令的變化

  8. 範例(cont.) • Try it !! • save • STMFD STMFA STMED STMEA • load • LDMFD LDMFA LDMED LDMEA

  9. SUB FUNCTION • A common requirement in a program is to be able to branch to a subroutine in a way • It possible to resume the original code sequence when the subroutine has completed

  10. SUB FUNCTION • step • 利用Branch 指令跳入 sub function • 並將pc(R15)存入於R14中 by branch and link (BL) • 完成sub function的動作 • 將下一步的address回存到R15 (pc) • 回到主函式

  11. SUB FUNCTION (example)

  12. 實習問題 實習一: 將起始位址為100H的陣列的五筆資料 79H,500H,200H,30H,40H,使用STM,LDM指令,將這五筆資料改存放在起始位址為200H的記憶體空間 實習二: 使用sub function 的方式寫出 R10=4!, 並且最後與main function 的 R11=10 做相加 實習三: 寫一迴圈,將陣列值 01H,02H,03H,04H,05H,06H,07H,08H,09H,0AH,0BH,0CH,0DH,0EH,0FH,10H 順序對調,為 0DH,0EH,0FH,10H,09H,0AH,0BH,0CH,05H,06H,07H,08H,01H,02H,03H,04H 加分題: 將陣列五筆資料79H 500H200H 30H 40H由大到小排序 作完請找助教檢查

More Related