13
軟軟軟軟軟軟軟軟軟軟軟 STACK & SUB FUNCTION 2011/10/6 軟軟軟軟 Microprocessor (100 上) ARM 軟軟軟軟軟 SOC 軟軟

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

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

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

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

2011/10/6

微處理機 Microprocessor (100 上 )

ARM 內核嵌入式 SOC原理

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

資料傳送指令• 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

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

Why use stack instruction

• 一次存取多個 – loop + STR r0,[r1,#4]! VS STMIA

– loop + LDR r0,[r1,#4]! VS LDMIA

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

{ 先加後存 }

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

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

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

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

Stack (example)

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

範例 (cont.)

• 當 store 為 STMIA 時, load 應選擇哪一個指令才能正確讀取數值 , 想想為什麼 ?

• Try it : 當 store 為 STMIB,STMDA,STMDB 應選擇哪一個 並觀察– data 在 memory 的 address 為何 ?– 指標 (R0)

• 在執行 store 之後跟 load 之後的變化• 在不同的堆疊指令的變化

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

範例 (cont.)

• Try it !!

• save– STMFD STMFA STMED STMEA

• load– LDMFD LDMFA LDMED LDMEA

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

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

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

SUB FUNCTION

• step– 利用 Branch 指令跳入 sub function– 並將 pc(R15) 存入於 R14 中 by branch and link

(BL)– 完成 sub function 的動作– 將下一步的 address 回存到 R15 (pc)– 回到主函式

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

SUB FUNCTION (example)

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

實習一 : 將起始位址為 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由大到小排序

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