PIC的特点是:
它被加载到恣意地址空间都能够正确的履行。其原理是PIC对常量和函数进口地址的操作都是根据PC+偏移量的寻址方法。即便程序被移动,可是PC也变化了,而偏移量是不变的,所以程序依然能够找到正确的进口地址或许常量。
加载域:是代码寄存的地址
运转域:是代码运转时的地址
链接地址:运转时,程序应该坐落的地址
在一些场合,一些代码并不在贮存这部分代码的地址上履行,比如说,放在norflash中的代码或许最终是放在RAM中运转,那么在norflash中的地址便是加载域,而在RAM中的地址便是运转域。
在汇编代码中咱们常常会看到一些跳转指令,比如说b、bl(是方位无关的指令)等这些指令后边是一个相对地址而不是肯定地址,比如说b main,这个指令应该怎样了解呢?main这儿究竟是一个什么东西呢?
这时候就需求涉及到链接地址的概念了,链接地址实际上便是链接器对代码中的变量名、函数名等东西进行一个地址的编列,赋予这些笼统的东西一个地址,然后在程序中拜访这些变量名、函数名便是在拜访一些地址。一般所说的链接地址都是指链接这些代码的开端地址,代码有必要放在这个地址开端的地刚才能够正常运转,不然的话当代码去拜访、履行某个变量名、函数名对应地址上的代码时就会找不到,接着程序无疑便是跑飞。
可是上面说的那个b main的景象有点特别,b、bl等跳转指令并不是一个肯定跳转指令,而是一个相对跳转指令,什么意思呢?便是说,这个main标签最终得到的只并不是main被链接器编列后的肯定地址,而是main的肯定地址减去当时的这个指令的肯定地址所得到的值,也便是说b、bl拜访到的是一个相对地址,不是肯定地址,因而,包含这个句子和main在内的代码段不管是否放在它的运转域它都能正常运转。这便是所谓的方位无关代码。
由上面的论说能够得知,假如你的这段代码需求完成方位无关,那么你就不能运用肯定寻址指令,不然的话便是方位有关了。