68精品久久久久久欧美,最近中文字幕完整在线看一,久久亚洲男人天堂,最近中文字幕完整视频高清1

您好,歡迎進入深圳市穎特新科技有限公司官方網(wǎng)站!

您現(xiàn)在的位置:首頁 新聞資訊 >> 新聞頭條 >> STM32學習之路入門篇之指令集及cortex——m3的存儲系統(tǒng)
新聞資訊
NEWS INFORMATION

STM32學習之路入門篇之指令集及cortex——m3的存儲系統(tǒng)

發(fā)布時間:2019-05-22

 

一、匯編語言基礎(chǔ)

 一)、匯編語言:基本語法

  1、匯編指令最典型的書寫模式:

        標號

                   操作碼        操作數(shù)1, 操作數(shù)2,... ;注釋

   1)、標號是可選的,如果有,它必須頂格寫。標號的作用是讓匯編器來計算程序轉(zhuǎn)移的地址。

   2)、操作碼是指令的助記符,它的前面必須有至少一個空白符,通常使用提個Tab鍵來產(chǎn)生。

   3)、操作碼后面往往跟若干個操作數(shù),而第一個操作數(shù),通常都給出本指令執(zhí)行結(jié)果的存儲地。不同指令需要不同數(shù)目的操作數(shù),并且對操作數(shù)的語法要求也可以不同。

   4)、注釋均以;開頭,它的有無不影響匯編操作,只是給程序員看的,讓程序員更加可以理解代碼。

 

  2、可以使用EQU指示子來定義常數(shù),也可以使用DCB來定義一串字節(jié)常數(shù)——允許以字符串的形式表達,還可以使用DCD來定義一串32位整數(shù)。

 

  3、如果匯編器不能識別某些特殊指令的助記符,就需要“手工匯編”,查出該指令的確切二進制機器碼,然后使用DCI編譯器指示器。

 

  4、不同匯編器的指示字和語法都可以不同。以上以ARM匯編器說明,如使用其他匯編器,細看說明和實例代碼。

 

 

 二)、匯編語言:后綴的使用

  1、在ARM處理器中,指令可以帶有后綴的:

 

  2、在Cortex-CM3中,對條件后綴的使用有限制,只有轉(zhuǎn)移指令(B指令)才可以隨意使用。而對于其他指令,Cortex-CM3引入IF-THEN模塊,在這個塊中才可以加后綴,且

        必須加后綴。

 

 

 三)、匯編語言:統(tǒng)一的匯編語言

  1、為了有力支持Thumb-2,引入了一個“統(tǒng)一匯編語言(UAL)”語法機制。對于16位指令和32位指令均能實現(xiàn)一些操作,有時雖然指令的實際操作數(shù)不同,或者對立即數(shù)的

        長度有不同的限制,但是匯編器允許開發(fā)者以相同的語法格式編寫,并且由匯編器來決定使用16位指令還是32位指令。

 

  2、如果使用了傳統(tǒng)的Thumb語法有些指令會默認更新APSR,即使你沒有加上S后綴。如果使用UAL語法,則必須使用S后綴才能更新。

 

  3、在Thumb-2指令集中,有些操作既可以由16位指令完成,也可以由32位指令完成。在UAL下,可以讓編譯器決定用哪個,也可以手工指令使用16位還是32位。

   1)、.W后綴指定32位指令。如果沒有給出后綴,會bain其會先試著用16位指令以縮小代碼體積如果不行在使用32位指令。

   2)、.N后綴指定16位指令。

 

  4、32位Thumb-2指令可以按半字節(jié)對齊。

 

 

四、指令集

  1、APSR中的5個標識位:

   1)、N:復數(shù)表示(Negative)。

   2)、Z:零結(jié)果標識(Zero)。

   3)、C:進位/借位標識(Carry)。

   4)、V:溢出標識(oVerflow)。

   5)、S:飽和標識(Saturation),它不做條件轉(zhuǎn)移的依據(jù)。

 

  2、Cortex-CM3支持的指令集如下:

    注意:邊框雙粗的是從ARMv6T2才支持的指令。

                雙線邊框的是從Cortex-CM3才支持的指令,(v7的其他款式不一定支持)。

   1)、16位數(shù)據(jù)操作指令

   2)、16位轉(zhuǎn)移指令

   3)、16位存儲器數(shù)據(jù)傳送指令

   4)、其他16位指令

   5)、32位數(shù)據(jù)操作指令

   6)、32位存儲器數(shù)據(jù)傳送指令

   7)、32位轉(zhuǎn)移指令

   8)、其他32位指令

 

  3、未支持的指令

   1)、不再是傳統(tǒng)的架構(gòu),呆滯某些指令已失去意義

   2)、不支持的協(xié)處理器相關(guān)指令

   3)、不支持的CPS指令用法

   4)、不支持的hint指令

  

 

五、近距離的檢視指令

 一)、匯編語言:數(shù)據(jù)傳送

  1、Cortex-CM3中的數(shù)據(jù)傳輸類型

   1)、兩個寄存器間的傳輸數(shù)據(jù)。

   2)、寄存器與存儲器間傳輸數(shù)據(jù)。

   3)、寄存器與特殊功能寄存器間傳輸數(shù)據(jù)。

   4)、把一個立即數(shù)加載到寄存器。

 

  2、用在數(shù)據(jù)傳輸?shù)闹噶顣rMOV,它的另一個衍生物是MVN——把寄存器的內(nèi)容取反后再傳送。

 

  3、用于訪問存儲器的基礎(chǔ)指令是“加載(load)”和“存儲(store)”。

   1)、加載指令LDR把存儲器中的內(nèi)容加載到寄存器中,存儲指令STR把寄存器的內(nèi)容存儲到存儲器中。傳送過程中數(shù)據(jù)類型也可以變通,最常見的格式有:

   2)、如果想一次性的解決存儲器訪問問題,可以使用LDM/STM來進行,它相當于把若干個LDR/STR給合并起來。

    I、表中加粗的符合Cortex-CM3堆棧操作的LDM/STM的使用方式。并且如果Rd是R13,則與PUSH和POP等效。

    II、感嘆號表示自增或自減基址存儲器Rd的值,時機是在每次訪問前或訪問后。感嘆號還可以用于單一加載或存儲指令,——LDR/STR。這也就是所謂的“帶預索引”的LDR和

          STR。

    III、Cortex-CM3還支持后索引。后索引也要使用一個立即數(shù)offset,但與預索引不同的是,后索引是忠實使用基址寄存器Rd的值作為數(shù)據(jù)傳送的地址的。待到數(shù)據(jù)傳輸之后,

           在執(zhí)行Rd<-Rd+offset。

 

  4、LDR偽指令 VS ADR偽指令

   1)、LDR和ADR都有能力產(chǎn)生一個地址,但是語法和行為不同。

   2)、對于LDR,如果匯編器發(fā)生要產(chǎn)生立即數(shù)是一個程序地址,它會自動把LSB置位,

   3)、對于ADR相反,它不會修改LSB。

 

 

 二)、匯編語言:數(shù)據(jù)處理

  1、雖然助記符都是ADD,但是二進制機器碼是不同的。當使用16位加法時會自動更新APSR的標識位。然而,在使用了“.W”顯式指定了32位指令后,就可以通過“S”后綴控制

        對APSR的更新。

 

  2、常見的算術(shù)四則運算指令

 

  3、Cortex-CM3還片載了硬件乘法器,支持乘加/乘減運算,并能產(chǎn)生64位的值。

 

  4、邏輯運算

 

  5、移位(支持多種組合)運算和循環(huán)運算

 

  6、帶符號擴展指令

 

  7、數(shù)據(jù)序轉(zhuǎn)指令

 

  8、位段處理及把玩指令

 

 

 三)、匯編語言:子程序呼叫與無條件轉(zhuǎn)移指令

  1、最基本的無條件轉(zhuǎn)移指令有兩條:

     B    Label    ;轉(zhuǎn)移到Label處對應的地址

     BL    reg    ;轉(zhuǎn)移到有寄存器reg給出的地址

 

  2、呼叫子程序時,需要保存返回地址,正點的指令是:

     BL    Label    ;轉(zhuǎn)移到Label處對應的地址,并且把轉(zhuǎn)移前的下條指令地址保存到LR

     BLX    reg    ;轉(zhuǎn)移到由寄存器reg給出的地址,根據(jù)REG的LSB切換處理器的狀態(tài),并且把轉(zhuǎn)移前的下條指令地址保存到LR

   注意:、使用BLX要注意,其改變狀態(tài)的功能。因此確保reg的lsb必須為1,以確保不會進入ARM狀態(tài)。

 

  3、以PC為目的寄存器的MOV和LDR指令也可以實現(xiàn)轉(zhuǎn)移,常見的形式有:

     MOV    PC,    R0    ;         轉(zhuǎn)移地址由R0給出

     LDR     PC,    [R0]    ;      轉(zhuǎn)移地址存儲在R0所指向的存儲器中

     POP    {...,  PC]    ;     把返回地址以彈出堆棧的方式送給PC,從而實現(xiàn)轉(zhuǎn)移

     LDMIA    SP!,     {...,  PC    ;   POP另一種等效寫法

   注意:使用這些方式必須保證送給PC的值是奇數(shù)(LSB=1)。

 

 

 四)、標志位與條件指令

  1、在應用程序狀態(tài)寄存器中有5個標志位,但只有4個被條件轉(zhuǎn)移指令參考。絕大多數(shù)ARM的條件轉(zhuǎn)移指令根據(jù)他們來決定是否轉(zhuǎn)移。

 

  2、在ARM中數(shù)據(jù)操作指令可以更新這4個標志位。這些標志位除了可以當條件轉(zhuǎn)移的判斷之外,還能再一些場合下作為指令是否執(zhí)行的依據(jù)。或者在移位操作中充當各種中介

        角色。

 

  3、擔任條件轉(zhuǎn)移和條件執(zhí)行的依據(jù)時,這4個標志位既可以單獨使用,也可以組合使用,以產(chǎn)生15種判斷依據(jù):

 

  4、在Cortex-CM3中,下列指令可以更新PSR的標志:

   1)、16位算術(shù)邏輯指令。

   2)、32位帶S后綴的算術(shù)邏輯指令。

   3)、比較指令和測試指令。

   4)、直接寫PSR/APSR(MAR指令)。

 

 

 五)、匯編語言:指令隔離指令和存儲器隔離指令

 

 

 六)、匯編指令:飽和運算

  1、Cortex-CM3的飽和運算指令分為兩種:帶符號的飽和運算以及無符號飽和運算。

 

  2、飽和運算指令

 

 

 

六、Cortex-CM3中一些有用的新指令

  1、MSR和MRS

   1)、這兩條指令是訪問特殊功能寄存器的指令,必須在特權(quán)下訪問,出APSR外。

   2)、指令語法如下:

          MRS    <Rn>,     <SReg>  ;   加載特殊功能寄存器的值到Rn

          MSR    <SReg>,     <Rn>  ;   存儲Rn的值到特殊功能寄存器的值

   3)、SReg可以是下表中的一個

 

  2、IF-THEN

   1)、IF-THEN指令圍成一個塊,里面最多4條指令,它里面的指令可以條件執(zhí)行。

   2)、IT使用形式:

 

  3、CBZ和CBNZ

   1)、比較并條件跳轉(zhuǎn)指令專為循環(huán)結(jié)構(gòu)的優(yōu)化而設(shè),它只能做向前跳轉(zhuǎn)。

   2)、格式為

   

 

  4、SDIV和UDIV

   1)、32位硬件除法指令。

   2)、格式

  

   3)、運算結(jié)果是Rd = Rn / Rm。

 

  5、REV,REVH,REV16以及REVSH

   1)、REV反轉(zhuǎn)32位整數(shù)中的字節(jié)序,REVH則以半字節(jié)為單位反轉(zhuǎn),且只反轉(zhuǎn)低半字節(jié)。

   2)、REVSH在REVH的基礎(chǔ)上,還把反轉(zhuǎn)后的半子做帶符號的擴展。

   3)、語法

 

  6、RBIT

   1)、RBIT比以前的REV之流更為精細,它是按位反轉(zhuǎn)的,相當于把32位整數(shù)的二進制表示法水平旋轉(zhuǎn)180°。此指令在處理串行比特流大有用處。

   2)、格式

        RBIT.W    Rd,    Rn

 

  7、SXTB,SXTH,UXTB,UXTH

   1)、這四條指令是為了優(yōu)化C的強制數(shù)據(jù)類型轉(zhuǎn)換而設(shè)的,把數(shù)據(jù)寬度轉(zhuǎn)換為處理器喜歡的32位長度。

   2)、語法

   3)、對于SXTB/SXTH,數(shù)據(jù)帶符號位擴展成32位整數(shù)。對于UXTB/UXTH,高位清0。

 

  8、BFC/BFI,UBFX/SBFX

   1)、這四個指令是Cortex-CM3提供的位段操作指令。

   2)、BFC(位段清零)指令把32位整數(shù)任意一段連續(xù)的二進制位S清0,語法格式為:

           BFC    Rd,    #lsb,    #width

   3)、BFI(位段插入指令),則把某寄存器按LSB對齊的數(shù)據(jù),拷貝到另一個寄存器的某個位段中,其格式為:

           BFI.w    Rd,    Rn,    #lsb,    #width

    4)、UBFX/SBFX都是位段提取指令,語法格式為:

           UBFx.w    Rd,    Rn,    #lsb,    #width

          SBFX.w    Rd,    Rn,    #lsb,    #width

 

  9、LDRD/STRD

   1)、Cortex-CM3在一定程度上支持對64位整數(shù),其中LDRD/STRD就是為64位整數(shù)的數(shù)據(jù)傳輸而設(shè)置的。

   2)、格式:

 

  10、TBB,TBH

   1)、TBB(查表跳轉(zhuǎn)字節(jié)范圍的偏移量)指令和TBH(查表跳轉(zhuǎn)半字節(jié)范圍的偏移量)指令,分別用于從一個字節(jié)數(shù)組表中查找偏移地址,和從半字節(jié)數(shù)組表中查找偏移地

            址。TBB的跳轉(zhuǎn)范圍為255*2+4=514,TBH的跳轉(zhuǎn)范圍為65535*2+4=128kb+2。

   2)、TBB語法格式

             TBB.W    [Rn,   Rm]    ;PC+=Rn[Rm]*2

   3)、TBH語法格式   

             TBH.W    [Rn,   2*Rm]    ;PC+=Rn[2*Rm]*2

 

一、存儲器系統(tǒng)的功能概覽

  1、Cortex-CM3存儲器系統(tǒng)功能

   1)、存儲器映射是預定義的,并且還規(guī)定好了那個位置使用那條總線。

   2)、Cortex-CM3的存儲器系統(tǒng)支持“位帶”操作。

   3)、Cortex-CM3存儲器系統(tǒng)支持非對齊訪問和互斥訪問。

   4)、Cortex-CM3的存儲器系統(tǒng)支持both大端配置和小端配置。

 

 

二、存儲器映射

  1、Cortex-CM3只有一個單一固定的存儲器映射。這極大方便了軟件在各種Cortex-CM3單片機間的移植。

 

  2、存儲器的一些位置用于調(diào)試組件等私有外設(shè),這個地址被稱為“私有外設(shè)區(qū)”。私有外設(shè)區(qū)的組件包括:

   1)、閃存地址重載及斷點單元(FPB)。

   2)、數(shù)據(jù)觀察點單元(DWT)。

   3)、指令跟蹤宏單元(ITM)。

   4)、嵌入式跟蹤宏單元(ETM)。

   5)、跟蹤端口接口單元(TPIU)。

   6)、ROM表。

 

  3、Cortex-CM3的地址空間是4GB,程序可以在代碼區(qū),內(nèi)部SRAM區(qū)以及RAM區(qū)執(zhí)行。4GB粗線條劃分:

   1)、內(nèi)部SRAM區(qū)的大小是512MB,用于讓芯片制造商連接片上的SRAM,這個區(qū)通過系統(tǒng)總線來訪問。在此區(qū)的下部,有一個1MB的位帶區(qū),該位帶區(qū)還有一個對應的

             32MB的“位帶別名區(qū)”,容納了8M個“位變量”。位帶區(qū)對應的是最低的1MB地址范圍,而位帶別名區(qū)里面的每個字對應位帶區(qū)的一個比特。位帶操作只適用于數(shù)據(jù)訪問,

             不適用與取指操作。

   2)、地址空間另一個512范圍由片上外設(shè)(的寄存器)使用。這個區(qū)也有一條32MB的位帶別名,以便于快捷的訪問外設(shè)寄存器。

   3)、還有兩個1GB的范圍,分別用于連接外部RAM和外部設(shè)備,它們之間沒有位帶。兩者的區(qū)別在于外部RAM區(qū)允許執(zhí)行指令,而外設(shè)設(shè)備區(qū)則不允許。

   4)、最后剩下0.5GB的地帶是Cortex-CM3內(nèi)核所在區(qū)域,包括系統(tǒng)級組件,內(nèi)部私有外部總線S,外部私有外部總線S,以及由提供者定義的系統(tǒng)外設(shè)。

   5)、私有外部總線有兩條

    I、AHB外設(shè)總線,只用于Cortex-CM3內(nèi)部的AHB設(shè)備,它們是:NVIC,FPB,DWT和ITM。

    II、APB外設(shè)總線,即用于Cortex-CM3內(nèi)部的APB設(shè)備,也用于外部設(shè)備

   6)、NVIC所處的區(qū)域叫做“系統(tǒng)控制空間(SCS)”在SCS里面還有SysTick、MPU以及代碼調(diào)試控制所用的寄存器:

 

 

三、存儲器訪問屬性S

  1、Cortex-CM3為存儲器做了映射之外,還為存儲器的訪問規(guī)定了4中屬性:

   1)、可否緩沖(Bufferable)

   2)、可否緩存(Cacheable)

   3)、可否執(zhí)行(Executable)

   4)、可否共享(Shareable)

 

  2、如果配置了MPU,則可以通過它配置不同的存儲區(qū),并且覆蓋缺省的訪問屬性。

 

 

四、存儲器的缺省訪問許可

  1、Cortex-CM3有一個缺省的訪問許可,它能防止使用戶代碼訪問系統(tǒng)控制存儲空間,保護NVIC,MPU等關(guān)鍵組件。缺省訪問許可在以下條件時生效:

   1)、沒有配置MPU。

   2)、配置了MPU,但是MOPU被除能。

 

  2、存儲器的缺省訪問許可

 

四、位帶操作

 一)、簡介

  1、支持位帶操作后,可以使用普通的加載/存儲指令來對單一的比特進行讀寫。在Cortex-CM3中,有兩個區(qū)實現(xiàn)了位帶。其中一個是SRAM區(qū)的最低1MB,第二個則是片內(nèi)外

        設(shè)區(qū)的最低1MB范圍。這兩個區(qū)的地址除了可以像普通的RAM使用外,它也都有自己的“位帶別名區(qū)”,位帶別名區(qū)把每個比特膨脹成一個32位的字。

  1)、位帶區(qū)與別名區(qū)的膨脹對應關(guān)系圖A

   2)、位帶區(qū)與別名區(qū)的膨脹對應關(guān)系圖B

 

  2、Cortex-CM3用如下術(shù)語來表示位帶存儲的地址區(qū)

   1)、位帶區(qū):支持位帶操作的地址區(qū)。

   2)、位帶別名:對別名地址的訪問最總作用到位帶區(qū)的訪問上。(注意:這中途有一個地址映射過程)

 

  3、在位帶區(qū)中每個比特都都映射到別名地址區(qū)的一個字——這是只有LSB有效的字。當一個別名地址被訪問時,會先把改地址變換成位帶地址。

   1)、對于讀操作,讀取位帶地址中的一個字,再把需要的位右移到LSB,并把LSB返回。

   2)、對于寫操作,把需要寫的位左移到對應的位序號處,然后執(zhí)行一個原子的“讀-改-寫”過程。

 

  4、支持位帶操作的兩個內(nèi)存區(qū)的范圍是:

   1)、0x2000_0000-0x000F_FFFF(SRAM區(qū)中的最低1MB)和0x4000_0000-0x400F_FFFF(片上外設(shè)區(qū)中的最低1MB)。

   2)、對于SRAM位帶區(qū)的某個比特,記它所在字節(jié)地址為A,位序號為n,則該比特在別名區(qū)的地址是:

   3)、對于片上外設(shè)位帶區(qū)的某個比特,記它所在字節(jié)地址為A,位序號為n,則該比特在別名區(qū)的地址是:

 

  5、位帶地址映射

   1)、SRAM區(qū)中的位帶地址映射

   2)、片上外設(shè)區(qū)中的位帶地址映射

 

 

 二)、位帶操作的優(yōu)越性

   1、位帶操作對硬件I/O密集型的底層程序提供了很大方便。

 

   2、位帶操作可用來化簡跳轉(zhuǎn)的判斷。是代碼更整潔。

 

  3、在多任務中用于實現(xiàn)共享資源在任務間的“互鎖”訪問。

 

 三)、其他數(shù)據(jù)長度上的位帶操作

  1、位帶操作并不限于以字為單位的傳送。亦可以按半子節(jié)和字節(jié)為單位傳送。

 

 

 

五、在C語言中使用位帶操作

  1、C編譯器中并沒有直接支持位帶操作。欲在在C中使用位帶操作,最簡單的做法就是#define一個位帶別名區(qū)的地址。為了簡化位帶操作,也可以定義一些宏。

 

  2、當使用位帶功能時,要訪問的變量必須用vollatile來定義。

 

 

六、非對齊數(shù)據(jù)傳送

  1、Cortex-CM3支持在單一的訪問中使用非(地址)對齊的傳送,數(shù)據(jù)存儲器的訪問無需對齊。

 

  2、非對齊傳送實例

  3、在Cortex-CM3中,非對齊的數(shù)據(jù)傳送只發(fā)生在常規(guī)的數(shù)據(jù)傳送指令中,其他的指令則不支持:

   1)、多個數(shù)據(jù)的加載存儲(LDM/STM)。

   2)、棧堆操作(PUSH/POP)。

   3)、互斥訪問(LDREX/STREX)。

   4)、位帶操作。

 

  4、應該養(yǎng)成好習慣,總是保持地址對齊。為此可以變成NVIC,使之監(jiān)督地址對齊。

 

 

七、互斥訪問

  1、在Cortex-CM3中,用互斥體訪問取代了ARM處理器中的SWP指令。

 

  2、互斥訪問的理念同SWP非常相似,不同點在于:在互斥訪問操作下,允許互斥體所在的總線被其他master訪問,也允許被其他運行在本機上的任務訪問,但是Cortex-CM3

        能駁回有可能導致竟態(tài)條件的互斥訪問。

 

  3、互斥訪問分為加載/存儲,相應的指令為LDREX/STREX,LDREXH/STREXH,LDREXB/STREXB,分別對應于字/半字/字節(jié)

 

  4、使用方式(以LDREX/STREX為例)

   1)、語法格式

   2)、LDREX指令與LDR相同。而STREX不同,STREX指令的執(zhí)行是可以被駁回的。

    I、當處理器同意執(zhí)行STREX,Rxf的值會被存儲到(Rn+Offset)處,并且把Rd的值更新。

    II、若處理器駁回了STREX的執(zhí)行,則不會發(fā)生存儲動作,并且把Rd的值更新為1。

   3)、駁回規(guī)則:只有在LDREX執(zhí)行后最近的一條STREX才能成功執(zhí)行。其他情況下,駁回此STREX

    I、中途有其他STR指令執(zhí)行。

    II、中途有其他的STREX執(zhí)行。

   4)、當時用互斥訪問時,LDREX/STREX指令必須成對使用。

 

 

八、端模式

  1、Cortex-CM3支持both小端模式和大端模式。在絕大多數(shù)情況下,Cortex-CM3都是用小端模式——為了避免不必要的麻煩,推薦使用小端模式。

 

  2、Cortex-CM3中對大端模式的定義與ARM7的不同(小端定義都相同)。在ARM7中大端模式稱為“字不變大端”,而在Cortex-CM3中,使用的是“字節(jié)不變大端”。

   1)、Cortex-CM3的字節(jié)不變大端:存儲器視圖

   2)、Cortex-CM3的字節(jié)不變大端:在ABH上的數(shù)據(jù)

   3)、ARM7字節(jié)不變大端:在ABH上的數(shù)據(jù)

 

  3、在Cortex-CM3,是在復位時確定使用那種端模式的,且運行時不得改變。指令預取永遠使用小端模式,在配置控制存儲空間的訪問也永遠小端模式(包括NVIX,F(xiàn)PB之

        流)。另外外部私有總線地址區(qū)0xE0000000至0xE00FFFFF也永遠使用小端模式。

聯(lián)系方式0755-82591179

傳真:0755-82591176

郵箱:vicky@yingtexin.net

地址:深圳市龍華區(qū)民治街道民治大道973萬眾潤豐創(chuàng)業(yè)園A棟2樓A08

江北区| 南木林县| 张掖市| 资溪县| 阜阳市| 岳阳市| 池州市| 浏阳市| 嫩江县| 河东区| 曲水县| 洛宁县| 天气| 嘉义县| 习水县| 河源市| 邢台县| 凯里市| 三江| 崇义县| 闻喜县| 乐昌市| 沈阳市| 奉化市| 罗江县| 贞丰县| 惠水县| 拉萨市| 民乐县| 轮台县| 哈密市| 体育| 辽宁省| 潼关县| 桐梓县| 德令哈市| 会泽县| 抚州市| 根河市| 玛曲县| 杭锦后旗|