第1 章 體系結構 ARM經典300問與答第1 問:Q:請問在初始化CPU 堆棧的時候一開始在執行mov r0, LR 這句指令時處理器是什么模式A:復位后的模式,即管理模式.第2 問:Q:請教:MOV 中的8 位圖立即數,是怎么一回事 0xF0000001 是怎么來的A:是循環右移,就是一個0—255 之間的數左移或右移偶數位的來的,也就是這個數除以4一直除, 直到在0-255 的范圍內它是整數就說明是可以的!A:8 位數(0-255)循環左移或循環右移偶數位得到的,F0000001 既是0x1F 循環右移4 位,符合規范,所以是正確的.這樣做是因為指令長度的限制,不可能把32 位立即數放在32 位的指令中.移位偶數也是這個原因.可以看一看ARM 體系結構(ADS 自帶的英文文檔)的相關部分.第3 問:Q:請教:《ARM 微控制器基礎與實戰》2.2.1 節關于第2 個操作數的描述中有這么一段:#inmed_8r 常數表達式.該常數必須對應8 位位圖,即常熟是由一個8 位的常數循環移位偶數位得到.合法常量:0x3FC,0,0xF0000000,200,0xF0000001.非法常量:0x1FE,511,0xFFFF,0x1010,0xF0000010.常數表達式應用舉例:......LDR R0,[R1],#-4 ;讀取 R1 地址上的存儲器單元內容,且 R1 = R1-4針對這一段,我的疑問:1. 即常數是由一個8 位的常數循環移位偶數位得到,這句話如何理解2. 該常數必須對應8 位位圖,既然是8 位位圖,那么取值為0-255,怎么0x3FC 這種超出255 的數是合法常量呢3. 所舉例子中,合法常量和非法常量是怎么區分的 如0x3FC 合法,而0x1FE 卻非法0xF0000000,0xF0000001 都合法,而0xF0000010 又變成了非法4. 對于匯編語句 LDR R0,[R1],#-4,是先將R1 的值減4 結果存入R1,然后讀取R1 所指單元的 值到R0,還是先讀取R1 到R0,然后再將R1 減4 結果存入R1A:提示,任何常數都可用底數*2 的n 次冪 來表示.1. ARM 結構中,只有8bits 用來表示底數,因此底數必須是8 位位圖.2. 8 位位圖循環之后得到常數,并非只能是8 位.3. 0xF0000010 底數是9 位,不能表示.4. LDR R0, [R1], #-4 是后索引,即先讀,再減.可以看一看ARM 體系結構對相關尋址方式的說明.
標簽:
ARM
300
上傳時間:
2013-11-22
上傳用戶:1109003457