分类: 嵌入式
2012-05-20 14:39:03
E500内核的指令长度都是32位。E500内核的指令采用大端编码方式,指令的第0位是MSB(Most Significant Bit),第31位是LSB(Least Significant Bit)。
在E500内核中,指令的高6位字段(第0~5位)被称为OPCD字段。根据OPCD字段的不同,PowerPC的指令集可以分为以下几大类。
1 I-Form类指令
在E500内核中,无条件转移指令使用这个指令格式。I-Form类指令格式如下所示:
0~5 |
6~29 |
30 |
31 |
OPCD |
LI |
AA |
LK |
I-Form类指令共包含以下几种指令:
l b LI // AA=0,LK=0
l ba LI // AA=1,LK=0
l bl LI // AA=0,LK=1
l bla LI // AA=1,LK=1
这类指令格式支持AA位和LK位。
AA位用来表示当前跳转指令使用绝对地址还是相对地址进行跳转。该位为0表示LI中存放的是相对地址(该相对地址是有符号整数,用户分析机器码时需要注意),即将要跳转的指令地址是当前指令地址与LI*4的和;为1表示LI中存放的是绝对地址,即将要跳转的指令是LI*4。AA位为1的无条件转移指令很少被用户使用。
LK位用来表示指令执行后是否修改LR寄存器。LK为1时,表示转移指令执行后将当前指令的下一条指令的地址存放在LR寄存器中,如果LK为0时,LR寄存器将不会被修改。
在汇编语言中,bl指令使用最多。bl指令可用作函数的调用指令,还可以用来获得下一条指令的有效地址。