首页
社区
课程
招聘
[原创]Arm thumb Cortex-M0 opcode 解析
发表于: 2024-9-9 19:29 2432

[原创]Arm thumb Cortex-M0 opcode 解析

2024-9-9 19:29
2432

例:


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 被囧囧编辑 ,原因:
收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 21588
活跃值: (6411)
能力值: (RANK:445 )
在线值:
发帖
回帖
粉丝
3
Black.WuKong 滥竽充数
有的人在学习,有的人在分享,氛围不是挺好的。
2024-9-10 11:10
2
游客
登录 | 注册 方可回帖
返回
//