作者zzss2003 (brotherD)
看板ASM
标题[请益] 如何读懂arm 组语?
时间Fri Nov 23 14:00:40 2018
hi,各位好。
小弟刚接触arm系列,对於很多观念都还不清楚,想藉由这个例子请教各位大大该如何读懂
arm的组语,以下三行为我在程式码看到的组语
IDE: Code Composer Studio
compiler: 不会看
CPU: arm cortex-a8
chip: TI am335x
图:
https://imgur.com/a/upkoQxM
MRS R1, CPSR;
AND R1, #0x80;
STR R1, [R0];
参考手册: ARM and Thumb Assembler Instructions.pdf
---------------------------------------------------
MRS<cond> Rd, cpsr; //set Rd = cpsr
Q1: 依照手册上指示: The instruction is only executed if the condition <cond> is
passed。但我要怎麽知道这个condition有没有pass?
AND<cond>{S} Rd, Rn, #<rotated_immed> ARMv1
Q2: rotated_immed是什麽意思呢?
手册: <rotated_immed> is any 32-bit immediate that can be represented as an
eightbit unsigned value rotated right (or left) by an even number of bit
positions.
看完了也看不懂...Orz
第三行,看了手册,应该就是把R0指到的address的值放进R1,这行倒没什麽问题。
Q4: function的名称是CPUirq_get,看不太懂是什麽意思?拿到irq?
Q5: state完全没用到,怀疑function里面被串改过?
Q6: 用debug mode观看暂存器行为:
1. 把CPSR的值放进R1,此时 R1 = CPSR = 0x60000013
2. 与0x80做and,此时 R1 = 0x00000000
3. 把address(0x80171F28) = 0x00000000,但address 0x80171F28根本没变数啊...
Q7: 网路上有可以发问类似这些问题的论坛吗?不管是中文或英文的都可以,我发现arm的
论坛真的好少><
谢谢各位指教QQ
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 118.163.216.18
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/ASM/M.1542952843.A.307.html
※ 编辑: zzss2003 (118.163.216.18), 11/23/2018 14:01:02
1F:推 chuegou: Q2 旋转立即数 11/23 19:24
2F:推 james33312: Q1 角括号是optional 没加就不会判断condition 11/26 02:44
3F:→ james33312: google : arm condition flag 11/26 02:46
4F:→ james33312: Q5. google AAPCS 11/26 02:46
5F:→ james33312: r0=state 11/26 02:47
6F:→ james33312: Q6 以C来说str是类似*r0=r1,但你的描述是*r0=*r1 11/26 02:53