blx指令
76 09 00 FA
FA 00 09 76
31 30 29 28 27 26 25 24 23 0
1 1 1 1 1 0 1 0(H) 0 000 0000 0000 1001 0111 011 0
最高4位表示执行条件
1111无条件执行
101
固定指令码
H=0
signed_immed_24
000976
pc = pc + (SignExtend(signed_immed_24)<<2) + (H<<1)
0000 0000 0010 0101 1101 1000
0025d8
38 11 9F E5
ldr指令
2f5c: e59f1138 ldr r1, [pc, #312] ; 0x309c
e59f1138
1110 0101 1001 1111 0001 0001 0011 1000
bit31-28 1110 无条件执行
bit27-26 01 固定编码
bit25 0 0 固定编码
bit24 1 1 固定编码
bit23 U 1
if( U == 1 ){
address = Rn + offset_12;
}else{
address = Rn-offset_12;
}
bit22 B 0
if( B==1 ){
指令访问无符号字节数据
}else{
字数据
}
bit21 0 固定编码
bit20 L 1
if(L==1){
ldr指令 load
}else{
str指令 store
}
bit19-16 Rn 基址寄存器 1111 r15 pc
bit15-12 Rd 目的寄存器 0001 r1
bit11-0 offset_12 地址偏移量
2f5c: e59f1138 ldr r1, [pc, #312] ; 0x309c
加载(pc+0x138)地址里面的内容(字32bit)送到r1寄存器
0x2f5c+0x138 = 0x3094
0x309c = 0x3094 + 8
为什么加8, 3级流水线
加载0x309c地址的一个字到r1
还有一个信息,此处的装载属于与位置无关的代码,因为基址是pc
也就是说此代码在内存的任何地址都可以得到正确执行。
uboot加载到内存执行,即属于此类
关键再配合adr绝对取地址指令.....
bin文件linux平台反汇编指令:
arm-linux-androideabi-objdump -D -b binary -m arm boot0_sdcard_sun8iw5p1.bin >boot0asm.asm
76 09 00 FA
FA 00 09 76
31 30 29 28 27 26 25 24 23 0
1 1 1 1 1 0 1 0(H) 0 000 0000 0000 1001 0111 011 0
最高4位表示执行条件
1111无条件执行
101
固定指令码
H=0
signed_immed_24
000976
pc = pc + (SignExtend(signed_immed_24)<<2) + (H<<1)
0000 0000 0010 0101 1101 1000
0025d8
38 11 9F E5
ldr指令
2f5c: e59f1138 ldr r1, [pc, #312] ; 0x309c
e59f1138
1110 0101 1001 1111 0001 0001 0011 1000
bit31-28 1110 无条件执行
bit27-26 01 固定编码
bit25 0 0 固定编码
bit24 1 1 固定编码
bit23 U 1
if( U == 1 ){
address = Rn + offset_12;
}else{
address = Rn-offset_12;
}
bit22 B 0
if( B==1 ){
指令访问无符号字节数据
}else{
字数据
}
bit21 0 固定编码
bit20 L 1
if(L==1){
ldr指令 load
}else{
str指令 store
}
bit19-16 Rn 基址寄存器 1111 r15 pc
bit15-12 Rd 目的寄存器 0001 r1
bit11-0 offset_12 地址偏移量
2f5c: e59f1138 ldr r1, [pc, #312] ; 0x309c
加载(pc+0x138)地址里面的内容(字32bit)送到r1寄存器
0x2f5c+0x138 = 0x3094
0x309c = 0x3094 + 8
为什么加8, 3级流水线
加载0x309c地址的一个字到r1
还有一个信息,此处的装载属于与位置无关的代码,因为基址是pc
也就是说此代码在内存的任何地址都可以得到正确执行。
uboot加载到内存执行,即属于此类
关键再配合adr绝对取地址指令.....
bin文件linux平台反汇编指令:
arm-linux-androideabi-objdump -D -b binary -m arm boot0_sdcard_sun8iw5p1.bin >boot0asm.asm