gpt4 book ai didi

visual-studio-2008 - 了解 Arm Assembler 分支偏移计算

转载 作者:行者123 更新时间:2023-12-04 05:56:23 32 4
gpt4 key购买 nike

我不明白为下面列出的反汇编代码相关的分支指令(地址为 0x00011004 和 0x00011010 的 b 和 bl)计算的偏移量。我想知道在十六进制代码中列出的偏移量似乎是 0x000001 和 0x000002。条件 b (EA) 和 bl (EB) 的操作码符合我的预期。

提前感谢每一个提示

MyAssemblerFunc:
00011000 stmdb sp!, {r0 - r3, lr}
00011004 b 00011010
00011008 mov r0, r0
0001100C mov r0, r0
00011010 bl |PrintHelloWorld ( 11020h )|
00011014 ldmia sp!, {r0 - r3, lr}

相关十六进制代码

0x00011000  0f 40 2d e9  .@-é
0x00011004 01 00 00 ea ...ê
0x00011008 00 00 a0 e1 .. á
0x0001100C 00 00 a0 e1 .. á
0x00011010 02 00 00 eb ...ë
0x00011014 0f 40 bd e8 .@.è
0x00011018 00 00 a0 e1 .. á
0x0001101C 00 00 a0 e1 .. á

最佳答案

由于在 ARM 模式下指令只能放置在字边界上,因此无需对地址的两个低位进行编码(它们将为 0)。因此,B 指令中的立即数是 delta 移位 2 位。对于第一个分支,delta 是 (target - PC) >> 2。target 是 00011010 和 PC 是 00011004+8 = 0001100C。所以 delta = (00011010-0001100C) >> 2 = 4 >> 2 = 1。你可以自己计算第二个。

关于visual-studio-2008 - 了解 Arm Assembler 分支偏移计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6744661/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com