音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網
技術交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術 | 電源技術 | 測控之家 | EMC技術 | ARM技術 | EDA技術 | PCB技術 | 嵌入式系統(tǒng)
驅動編程 | 集成電路 | 器件替換 | 模擬技術 | 新手園地 | 單 片 機 | DSP技術 | MCU技術 | IC 設計 | IC 產業(yè) | CAN-bus/DeviceNe

再請教一下zlei

作者:qiuyang957 欄目:ARM技術
再請教一下zlei
;****************************************************
;*    Set MEMORY CONTROL registers                  *     
;****************************************************        
    adr    r0, ResetHandler
    ldr    r1, =ResetHandler
    sub    r0, r1, r0        
    ldr    r1, =SMRDATA
    sub    r0, r1, r0
    ldmia    r0, {r1-r13}            
    ldr    r0, =0x01c80000               
    stmia    r0, {r1-r13}

第一句adr    r0, ResetHandler是什么意思啊?還有兩個減運算語句的用意是什么呢?



2樓: >>參與討論
zlei
adr r0, ResetHandler
ADR : 裝載地址
(load Address)

   ADR{后綴} <寄存器>, <標號>

它把參照的地址裝載到給定寄存器中:
   00008FE4                    OPT     l%
   00008FE4 E28F0004           ADR     R0, text
   00008FE8 EF000002           SWI     "OS_Write0"
   00008FEC E1A0F00E           MOV     PC, R14
   00008FF0                    .text
   00008FF0                    EQUS    "Hello!" + CHR$13 + CHR$10 + CHR$0
   00008FFC                    ALIGN

下列代碼有完全相同的效果:

   00008FE4                    OPT     l%
   00008FE4 E28F0004           ADD     R0, R15, #4
   00008FE8 EF000002           SWI     "OS_Write0"
   00008FEC E1A0F00E           MOV     PC, R14
   00008FF0                    .text
   00008FF0                    EQUS    "Hello!" + CHR$13 + CHR$10 + CHR$0
   00008FFC                    ALIGN

實際上,它們的反匯編將顯示:
   *MemoryI 8FE4 +18
   00008FE4 :  E28F0004 : ..忊 : ADR     R0,&00008FF0
   00008FE8 :  EF000002 : ...? : SWI     "OS_Write0"
   00008FEC :  E1A0F00E : .馉? : MOV     PC,R14
   00008FF0 :  6C6C6548 : Hell : STCVSTL CP5,C6,[R12],#-&120 ; =288
   00008FF4 :  0A0D216F : o!.. : BEQ     &003515B8
   00008FF8 :  00000000 : .... : DCD     &00000000

ADR 是一個很有用的指令,你不需要關心相對 R15 的偏移量(例如,我們?yōu)槭裁粗患?4?),也不需要在一塊代碼上計算偏移量。可以簡單的使用 ADR Rx, label 而匯編器將設法為你使用 ADD、SUB、MOV 或 MVN 中最恰當?shù)哪莻指令。限制因素是你的引用范圍只能是在 4096 字節(jié)中(不完全是真的,它典型的對 ADD 或 SUB 使用被循環(huán)右移的立即值,但是為了參數(shù)的一致性,我們假定范圍是 4K)。


3樓: >>參與討論
zlei
可以這樣理解
 adr    r0, ResetHandler    ;[r0]=ResetHandler地址
ldr    r1, =ResetHandler   ;[r1]=ResetHandler地址
sub    r0, r1, r0          ;[r0]=r1-r0=0
這幾句話最終把r0清零了。
ldr    r1, =SMRDATA  ;[r1]=SMRDATA地址
sub    r0, r1, r0     ;;[r0]=r1-r0=SMRDATA地址

這些話等同于一句:ldr r0,=SMRDATA
不知道為什么要這樣寫。

4樓: >>參與討論
qiuyang957
還有一點疑惑
zlei:感覺你真是個高手。非常感謝您的耐心解答!

adr    r0, ResetHandler
ldr    r1, =ResetHandler

感覺這兩句好象沒什么本質的區(qū)別呀,不都是把標號ResetHandler的地址給寄存器呀


5樓: >>參與討論
cxzeng
我來回答你吧
兩條都是偽指令

ADR 翻譯成真實指令一般是相對于當前PC 的尋址,如: ADR r0,Table1 => MOV r0,[pc+n]

LDR R0,=Table1,可能產生相對PC的尋址,也可能產生lital  pool

6樓: >>參與討論
php139
我來插嘴說兩句
zlei say
可以這樣理解

adr    r0, ResetHandler    ;[r0]=ResetHandler地址
ldr    r1, =ResetHandler   ;[r1]=ResetHandler地址
sub    r0, r1, r0          ;[r0]=r1-r0=0
這幾句話最終把r0清零了。
ldr    r1, =SMRDATA  ;[r1]=SMRDATA地址
sub    r0, r1, r0     ;;[r0]=r1-r0=SMRDATA地址

這些話等同于一句:ldr r0,=SMRDATA
不知道為什么要這樣寫。

sub    r0, r1, r0  是否為了判斷 PC 是否真的jump 到 ResetHandler 處 因為 adr 是有范圍限制的



參與討論
昵稱:
討論內容:
 
 
相關帖子
請問我在哪兒可以找到ADS1.2的使用說明呀!謝謝!
準備做一個44B0的雙面板,請問需要放置匹配電阻么?
仿真裝入鏡像文件時,誰來做存儲器的初始化??
請問三星有沒有類似美信或MOTO那樣的芯片資料網站?
有誰知道三星的2410的SPI口在SLAVE的B模式下如果接收數(shù)據(jù)
免費注冊為維庫電子開發(fā)網會員,參與電子工程師社區(qū)討論,點此進入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號