Upload
kyle-freeman
View
57
Download
0
Embed Size (px)
DESCRIPTION
軟體工具學習與組合語言撰寫 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] ; - PowerPoint PPT Presentation
Citation preview
軟體工具學習與組合語言撰寫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] ; r1 = r1+ 4 • LDR r0, [r1], #4 ;r0 := mem32 [r1] r1 := r1 + 4
Why use stack instruction
• 一次存取多個 – loop + STR r0,[r1,#4]! VS STMIA
– loop + LDR r0,[r1,#4]! VS LDMIA
{ 先加後存 }
STMIB r9!,{r0,r1,r5}→mem[r9 + 4] = r0 mem[r9 + 8] = r1 mem[r9 + 12] = r5 r9 = r9 + 12
r5
r1
r0
r9’ →
r9 →
{ 先存後加 }
r5
r1
r0
r9’ →
r9 →
STMIA r9!,{r0,r1,r5}→mem[r9] = r0 mem[r9 + 4] = r1 mem[r9 + 8] = r5 r9 = r9 + 12
{ 先減後存 }
r5
r1
r0
r9 →
r9’ →
STMDB r9!,{r0,r1,r5}→mem[r9 - 4] = r5 mem[r9 - 8] = r1 mem[r9 - 12] = r0 r9 = r9 - 12
{ 先存後減 }
r5
r1
r0
r9 →
r9’ →
STMDA r9!,{r0,r1,r5}→mem[r9] = r5 mem[r9 - 4] = r1 mem[r9 - 8] = r0 r9 = r9 - 12
LDMIB r9!,{r0,r1,r5}→r0 = mem[r9 + 4] r1 = mem[r9 + 8] r5 = mem[r9 + 12] r9 = r9 + 12
→ r5
→ r1
→ r0
r9’→
r9 →
{ 先加後取 }
→ r5
→ r1
→ r0
r9’→
r9 →
{ 先取後加 }LDMIA r9!,{r0,r1,r5}→r0 = mem[r9] r1 = mem[r9 + 4] r5 = mem[r9 + 8] r9 = r9 + 12
→ r5
→ r1
→ r0
{ 先減後取 } 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’→
LDMDA r9!,{r0,r1,r5}→r5 = mem[r9] r1 = mem[r9 - 4] r0 = mem[r9 - 8] r9 = r9 - 12
Stack (example)
範例 (cont.)
• 當 store 為 STMIA 時, load 應選擇哪一個指令才能正確讀取數值 , 想想為什麼 ?
• Try it : 當 store 為 STMIB,STMDA,STMDB 應選擇哪一個 並觀察– data 在 memory 的 address 為何 ?– 指標 (R0)
• 在執行 store 之後跟 load 之後的變化• 在不同的堆疊指令的變化
範例 (cont.)
• Try it !!
• save– STMFD STMFA STMED STMEA
• load– LDMFD LDMFA LDMED LDMEA
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
SUB FUNCTION
• step– 利用 Branch 指令跳入 sub function– 並將 pc(R15) 存入於 R14 中 by branch and link
(BL)– 完成 sub function 的動作– 將下一步的 address 回存到 R15 (pc)– 回到主函式
SUB FUNCTION (example)
實習一 : 將起始位址為 100H的陣列的五筆資料 79H,500H,200H,30H,40H,使用 STM,LDM指令 , 將這五筆資料改存放在起始位址為 200H的記憶體空間
作完請找助教檢查
實習三 : 寫一迴圈 ,將陣列值 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
實習問題
實習二 : 使用 sub function 的方式寫出 R10=4!, 並且最後與main function 的 R11=10 做相加
加分題 : 將陣列五筆資料 79H 500H 200H 30H 40H由大到小排序