作者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/m.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