-
-
[原创]Arm thumb Cortex-M0 opcode 解析
-
-
[原创]Arm thumb Cortex-M0 opcode 解析
例:
Code:0001835A LDR R4, =byte_20002188 Hex: 18 4C
...
Code:000183BC Hex: 88 21 00 20
Cortex-M0 所用指令集为 Armv6-M,大部分为thumb指令,2字节;
Armv6-M Architecture Reference Manual
https://developer.arm.com/documentation/ddi0419/latest/
解析opcode时,与x86 不同的是,opcode字节也是小尾序;
例如上面 "18 4C",则第一个字节是 '4C' == 0b01001100;
手册中有书签(目录),直达 A5.2 16-bit Thumb instruction encoding;
可见前五 bit 符合 01001x Load from Literal Pool,点进链接里;
LDR <Rt>, <label>
(5bit) (3bit)(8bit)
4C (01001 100) 18(00011000)
中间3bit 为 0b100 == 4; 则寄存器 为 R(4);
后8bit,imm32 = ZeroExtend(imm8:‘00’, 32);
意思是给这8bit后面再添两个0 变为 0b1100000 == 0x60;
整条指令的意思是:
R4 = dword ptr [PC + 0x60 + 2];
PC + 0x60 + 2 = 0x1835A + 0x60 + 2 = 183BC;
dword ptr [PC + 0x60 + 2] = 0x20002188;
R4 = 0x20002188;
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2024-9-9 19:31
被囧囧编辑
,原因: