<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > Arm指令集尋址方式

Arm指令集尋址方式

作者: 時(shí)間:2016-11-11 來(lái)源:網(wǎng)絡(luò ) 收藏
我這里講的快速是指能夠快速的上手工作,但任何一門(mén)學(xué)問(wèn)都包含著(zhù)比較具體的知識在里面,這些知識是需要長(cháng)年累月的積累才可以逐漸從未知到已知,從笨拙到熟練.快速只是一種學(xué)知識的步驟,能夠在短的時(shí)間里把那些不常用的知識排到后面來(lái)學(xué)習.

一些書(shū)中介紹,不需要了解匯編語(yǔ)言就可以進(jìn)行Arm的編程,我想對于一般的開(kāi)發(fā)者來(lái)講C語(yǔ)言大概是夠用了,但不了解匯編,很多原理性和底層的工作就會(huì )做起來(lái)困難了.即要快速,又要保證一定的匯編知識,那么學(xué)的時(shí)候可以走馬觀(guān)花的看一下,至少有個(gè)印象,再以后如果碰到的時(shí)候,逐漸學(xué)習和加深就可以了.

本文引用地址:http://dyxdggzs.com/article/201611/316884.htm

記憶是比較苦澀的事情,我覺(jué)得使用例子最好的方法,例子再加查找,以后用起來(lái)比較方便.前面講過(guò),Arm中有兩種指令集,一種叫Arm指令集,一種叫Thumb指令集.資料中使用了一大堆理由說(shuō)Thumb的16位指令集比Arm 32位指令集要性能好,這是因為它不完全等同于PC的32 80386指令集與8086/8088的16位指令集的區別,再具體的原因對于初學(xué)者可以不去理會(huì ).

我們講一下Arm 32位指令集的尋址方式:

1. 寄存器尋址:

MOV R1,R2;讀取R2的值到R1中

SUB R0,R1,R2;將R1的值減去R2的值,結果保存到R0中

2.立即尋址:

SUBSR0,R0,#1;R0減1,結果保存到R0中,并影響標志位

MOV R0,#0xFF000 ;將0xFF000存儲到R0中

3. 寄存器移位尋址:

MOV R0,R2,LSL #3;R2的值左移3位,結果存入R0

ANDS R1,R1,R2,LSL R3 ;R2的值左移R3位,然后與R1相與,結果存入R1.

移位操作有這樣幾種: LSL,LSR,ASR,ROR,RRX,具體含義可以查相關(guān)手冊

4.寄存器間接尋址:

LDRR1,[R2];將R2指向的存儲單元的數據讀出,保存到R1中

SWPR1,R1,R[2] ;將R1的值與R2指定的存儲單元的值進(jìn)行交換.

5.基址尋址:

LDRR2,[R3,,0x0C];讀取R3+0x0C地址上的存儲單元的內容,存入R2中

STRR1,[R0,#-4]!;先R0=R0-4,然后把R1的值保存到R0指定的存儲單元

LDRR1,[R0,R3,LSL #1];將R0+R3*2地址上的存儲單元中的內容讀出,保存到R1中.

6.多寄存器尋址:

LDMAR1! {R1-R7,R12};將R1指向單元的數據讀出,放到R1~R7,R12中,R1自動(dòng)加1

STMIAR0!,{R2-R7,R12};與上面方向相反,R0自動(dòng)加1

我總感覺(jué)書(shū)中寫(xiě)的方向不對

7.堆棧尋址:

STMFD SP!,{R1-R7,LR}

LDMFD SP!,{R1-R7,LR}

可以參考前面的例子,只不過(guò)是堆棧SP寄存器而已

8.塊拷貝尋址:

STMIA R0,{R1-R7}

STMIB R0,{R1-R7}

STMDA R0! {R1-R7}

STMDB R0! {R1-R7}

9.相對尋址:

BLSUBR1;調用到SUBR1子程序

BEQ LOOP;條件跳轉到LOOP標號處

所謂尋址方式,就是指令的表達方式,這種表達方式大概明白了,也就比較容易理解各種指令的含義了.匯編是種學(xué)起來(lái)比較討厭的東西,不同CPU系列的計算機匯編語(yǔ)言都不統一,不像高級語(yǔ)言那樣,語(yǔ)法比較一致,而且指令會(huì )很多,尋址方式也不同,對于常時(shí)間只是有同一種CPU的匯編編程的人來(lái)講,匯編也不是什么難事,但對于工作范圍比較廣的開(kāi)發(fā)者來(lái)講,記憶指令的確是個(gè)麻煩的事情.幸好現在大多單片機都可以使用C語(yǔ)言來(lái)編程,但對匯編的了解還是有好處的,它能夠幫助你理解更底層的問(wèn)題.



關(guān)鍵詞: Arm指令集尋址方

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>