ARM体系结构与编程》原书第14页,PDF电子版第27页,有这么一段代码:
SUB R1,PC,#4 ;R1中存放下面STR指令的地址
STR PC,[R0] ;将PC=STR地址+offset保存到R0中
LDR R0,[R0] ;
SUB R0,R0,R1 ;offset=PC-STR地址
原文解释:
1.(原文代码上面两行)假设R0指向可用的一个内存字,下面的代码可以在R0指向的内存字中返回该芯片所采用的地址偏移量。
2.(原文代码下面两行)在上面的讨论中,都是针对指令返回的值。该值并非在指令读取期间出现在数据总线上的值。在指令读取期间出现在数据总线上的值取决于芯片的具体实现方式。
本人存在以下疑问:
1.SUB R1,PC,#4 ;R1中存放下面STR指令的地址,也就是说,PC-4的值就是下一条语句的地址,则PC当前指向上面代码第三句,默认偏移量是8。既然要求地址偏移量,为什么还要默认偏移量是8呢?
2.针对于原文解释1,原文说“R0指向的内存字中”返回该芯片所采用的地址偏移量,但代码最后一句的意思是R0-R1的值放在寄存器R0中,而不是R0指向的内存字中,不知道这一点是书上错了而是我理解有误?
3.针对于原文解释2,不知道这一句讲的什么意思?什么叫针对指令返回的值?什么叫指令期间出现在数据总线上的值?两者有什么区别?
望高手指点!! |