1. ; 文件名:TEST4.S 2. ; 功能:通过查表实现程序散转 3. ; 说明:使用ARMulate软件仿真调试 4. NumCon EQU 0x40003001 ; 定义变量NumCn 5. AREA Example4,CODE,READONLY 6. ENTRY 7. MAIN LDR R0,= NumCon 8. LDRB R2,[R0] ; 取得跳转控制变量值 9. MOV R2,R2,LSL #2 ; 功能号乘上4,以便查表 10. LDR PC,[PC,R2] ; 查表取得对应功能子程序地址,并跳转 11. NOP 12. FUN_TAB DCD FUN_SUB0 ; 跳转表 13. DCD FUN_SUB1 14. DCD FUN_SUB2 15. DCD FUN_SUB3 16.; 各功能分支 17. FUN_SUB0 B MAIN 18. FUN_SUB1 B MAIN 19. FUN_SUB2 B MAIN 20. FUN_SUB3 B MAIN END 程序运行到第9行时,PC值是0x0000800c,此时的R2我设的是0x00000004,但当我再往下运行到第10行时,PC变为0x00008028,并且下条指令指向FUN_SUB1,这个PC的变化我不是很理解,请大大帮忙解释下,谢谢 |