64位arm内函数的跳转
向下跳转
前8位0101 0100与末尾位的0或1决定是BEQ还是BNE
中间的20位中,舍弃最高位,剩余24位的值乘2为当前地址向下跳转的距离
例如
5 4 0 0 0 0 C 0
0101 0100 0
000 0000 0000 0000 1100 0000
=BEQ 0x18
54+末尾的0=BEQ
0x18=(0xC)*2
5 4 0 0 0 2 E 1
0101 0100 0
000 0000 0000 0010 1110 0001
=BNE 0x5C
54+末尾的1=BNE
0x5C=(0x2E)*2
向上跳转
前8位0101 0100与末尾的0或1决定是BEQ或是BNE
中间的20位中,舍弃最高位,剩余的24位的补码的值乘2位当前地址向上跳转的距离
例如
5 4 F F F F 6 1
0101 0100 1
111 1111 1111 1111 0110 0001
=BNE 0x14(向上)
111 1111 1111 1111 0110的补码是000 0000 0000 0000 1001+1=0x9+1=0xA
0x14=(0xA)*2