




已閱讀5頁,還剩72頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第三章,單片機的指令系統(tǒng)與匯編語言程序設計 3.1 MCS-51指令系統(tǒng)與尋址方式 3.2 匯編語言程序設計 3.3 匯編程序設計與調試,3.1 MCS-51指令系統(tǒng)與尋址方式,指令的基本概念 單片機指令與分類 51單片機的尋址方式 不同空間的數據傳輸方法 作業(yè)題 P55-1、2,1 指令的基本概念,指令 是計算機能夠識別的二進制數代碼,指令系統(tǒng)的好壞決定計算機的性能和靈活性。 指令集 計算機能夠識別的指令的集合,指令的組成,指令由操作碼和操作對象組成。操作碼指明執(zhí)行什么操作,如數據傳送、加、減運算等 操作對象可以是一個數,或者是一個數所在的內存地址。 51指令有單字節(jié)指令、雙字節(jié)指令和三字節(jié)指令。單字節(jié)指令和雙字節(jié)指令的操作對象隱含在操作碼之中。 例如:MOV A, #0AH 740A 操作碼MOV 和A 合并在一字節(jié)中 74H,2 單片機指令與分類,51系列單片機采用8位二進制數作為操作碼,最多可有256種操作碼 實際有111條指令,7 種尋址方式 42種助記符,說明33種操作功能 這些指令可分為四大類: 1數據傳送指令; 2算術運算與邏輯運算指令; 3控制轉移指令; 4位操作指令.,指令和助記符,為了容易記憶這些符號一般采用英文單詞的縮寫構成,這些符號稱為指令助記符;由這些助記符描述的計算機語言稱為匯編語言。 指令有指令代碼和操作對象構成。 例:指令代碼 助記符 操作對象 功能 740A MOV A,#0AH 將十六進制數0AH放 入累加器A中,3 尋址方式,尋址方式是計算機尋找操作數的具體辦法。 51系列單片機有7種尋址方式: 源操作數 目的操作數,1立即尋址 2 直接尋址 3寄存器尋址 4 寄存器間接尋址 5 變址尋址 6 相對尋址 7 位尋址,.1立即尋址,指令中直接給出操作數的尋址方式。立即操 作數用前面加有#號的8位或16位數來表示。 例: MOV A,# 30H ;A#30H MOV DPTR,# 3400H; DPTR#3400H,立即尋址演示,30H 31H 32H 33H 34H 35H,累加器A,MOV A 30H,源地址寄存器,指令寄存器,PC ,74H,Z總線,30H,55H,ROM,RAM,74H,23H,目的地址寄存器,E0H,.2直接尋址,指令中直接給出操作數地址的尋址方式, 能進行直接尋址的存儲空間有SFR寄存器和內 部數據RAM。 例: MOV PSW,# 20H ;PSW#20H MOV A,30H ;A(30H),直接尋址演示,30H 31H 32H 33H 34H 35H,累加器A,MOV A 30H,源地址寄存器,指令寄存器,PC ,74H,Z總線,30H,55H,ROM,RAM,74H,23H,目的地址寄存器,E0H,.3寄存器尋址,以通用寄存器的內容為操作數的尋址方式。 寄存器包括:通用寄存器R0R7和特殊功能寄存器A、B 、DPTR等。 例: MOV A, R0 ;A ( R0 ),.4寄存器間接尋址,以寄存器中內容為地址的尋址方式。間接尋址的存儲空間包括內部數據RAM和外部數據RAM。 能用于寄存器間接尋址的寄存器有R0,R1和DPTR。 表示方式 是在寄存器名稱前面加一個符號。 例: MOV A , R0 ;A (R0) MOVX DPTR,A ;外部RAM(DPTR)A,.5 變址尋址,變址尋址是以某個寄存器的內容為基本地址,加上偏移量作為操作數地址的尋址方式。 例: MOVC A, A+DPTR ;A(A+DPTR) MOVC A, A+PC ;A(A+PC),這些指令的用途主要是查表,寄存器存放表首地址,A存放偏移量,程序存儲器,DPTR,0211H,11H,A,+,MOVC A, A+DPTR 操作示意圖,變址尋址舉例,0200H,0211H,0200H,11H,地址寄存器,1EH,0200H,.6 相對尋址,以當前程序計數器PC的內容為基礎,加上指令給出的一字節(jié)補碼數(偏移量)形成新的PC值的尋址方式。 相對尋址用于修改PC值,主要用于實現程序的分支轉移。 例: SJMP 08H ;PCPC+2+08H,SJMP 08H 操作示意圖,相對尋址舉例,.7 位尋址,位尋址是可位尋址單元的位操作。位尋址其實是一種直接尋址方式,不過其 操作對象是指定的1位。 例: SETB 10H ;將10H位置1 MOV 32H,C ;32H進位位C CLR PSW.4 ;將RS1位清0,操作數尋址方式總結,助記符 說明 MOV、MOVX、MOVC 傳送操作 XCH、XCHD、SWAP 交換操作 PUSH、POP 堆棧操作,4 數據傳送類指令,數據傳送指令有以下三種類型,MOVX 片外RAM空間 MOVC ROM空間 其他片內RAM空間,單片機片內傳送圖,1 以累加器為目的操作數的指令(4條),MOV A,Rn MOV A,direct MOV A,Ri MOV A,#data 這組指令功能將源操作數指定內容送到A中。,.1,.2,MOV Rn,A MOV Rn,direct MOV Rn,#data 這組指令功能是把源操作數指定的內容送入當前工作寄存器,源操作數不變。,2 以寄存器Rn為目的操作數的指令(3條),3 以直接地址為目的操作數的指令(5條),MOV direct,A MOV direct,Rn MOV direct1,direct2 MOV direct,Ri MOV direct,#data 這組指令功能是把源操作數指定的內容送入由直接地址指出的片內存儲單元。,.3,4 以間接地址為目的操作數的指令(3條),MOV Ri,A MOV Ri,direct MOV Ri,#data 功能:把源操作數指定的內容送入以R0或R1中內容為地址的片內存儲單元。,.4,5 十六位數的傳遞指令(1條),MOV DPTR,#data16 這是唯一的一條16位立即數傳遞指令。 功能:將一個16位的立即數送入DPTR中去。其中高8位送入DPH,低8位送入DPL。 例:MOV DPTR,#1234H 執(zhí)行完了之后DPH中的值為12H,DPL中的值為34H。 如果我們分別向DPH,DPL送數,則結果也一樣。 如下面兩條指令: MOV DPH,#35H MOV DPL,#12H。 相當于執(zhí)行了 MOV DPTR,#3512H。,.5,程序舉例:把片內RAM中地址為30H3FH的字節(jié)單元 內容復制到地址為60H6FH的字節(jié)單元中去。 程序如下: COPY:MOV R0,#30H MOV R1,#60H MOV R2,#10H LP1: MOV A,R0 MOV R1, A INC R0 INC R1 DJNZ R2, LP1 RET,采用了間址尋址,6 A與片外RAM間的數據傳遞類指令(4條),MOVX A,Ri MOVX Ri,A MOVX A,DPTR MOVX DPTR,A 說明: 1 與外部RAM存儲器打交道的只可以是累加器A 。所有需要送入外部RAM的數據必需要通過A送去,而所有要讀入的外部RAM中的數據也必需通過A讀入。 內部RAM間可以直接進行數據的傳遞,而外部則不行。,.6 片外RAM操作,2.要讀或寫外部RAM,必須要知道RAM的地址,采用DPTR時,地址被直接放在DPTR中的。采用Ri(R0或R1)時,由于Ri只是8位的寄存器,所以只提供低8位地址。高8位地址由P2口來提供。 3.使用時應先將要讀或寫的地址送入DPTR或Ri中,然后再用讀寫命令。,.6續(xù),將外部RAM中100H單元中的內容送入外部200H單元中。,例:這段程序做了什么事?左右兩塊等價嗎? MOV DPTR,#0100H MOV P2,#01H MOVX A,DPTR MOV R0,#00H MOV DPTR,#0200H MOVX A,R0 MOVX DPTR,A MOV P2,#02H MOVX R0,A,舉例: 1、讀入片外RAM中0080H地址單元的內容 2、向端口號為8FFEH的端口寫入0,或:MOV P2,#00H MOV R0, #80H MOVX A, R0,MOV DPTR,#80H MOVX A, DPTR,MOV A, #0 MOV DPTR,8FFEH MOVX DPTR, A,7 讀程序存儲器指令(2條),MOVC A,A+DPTR MOVC A,A+PC 本組指令是將ROM中的數送入A中,也被稱為查表指令,常用此指令來查一個已做好在ROM中的表格 例:如果R0=3程序執(zhí)行后累加器A的值是多少? MOV DPTR,#100H MOV A,R0 MOVC A,A+DPTR ORG 0100H DB 0,1,4,9,16,25,.7 ROM操作,有一個數在R0中,要求用查表的方法確定它的平方值(此 數的取值范圍是0-5),8 堆棧操作(2條),PUSH direct POP direct (不能為Rn) 第一條為壓入指令,將direct中的內容送入堆棧中, 第二條為彈出指令,將堆棧中的內容送回到direct中。 例: MOV SP,#10H MOV 40H,#50H PUSH 40H POP 30H 執(zhí)行第一條PUSH 40H指令是這樣的:將SP中的值加1,變?yōu)?1H,然后將40H中的值送到11H單元中,因此執(zhí)行完本條指令后,內存11H單元的值是50H,同樣,執(zhí)行POP 30H時,是將11H中的值送入到30H單元中,即執(zhí)行完本條指令后,30H單元中的值變?yōu)?0H。,.8 堆棧操作,9 交換指令(5條),XCH A,Rn XCH A, direct XCH A, Ri XCHD A, Ri SWAP A 例: 已知A中的內容為34H ; A R6 MOV R6, #29H ; 34H 29H XCH A, R6 ; 29H 34H SWAP A ; 92H 34H XCH A, R6 ; 34H 92H,.9 交換指令,判斷以下指令對錯,并改正錯誤的指令: 1、MOVX DPTR, 0 2、MOV R4,R0 3、MOV R1 ,R2 4、MOV A, R2 5、 MOV 38H,60H 6、 MOVC B,A+DPTR 7、 POP R1 8、 XCH 10H,20H 9、 XCHD A ,50H, MOVX DPTR,A, 不允許 Rn Rn, 不允許 Rn Ri, 只有R0、R1可用于間接尋址, MOVC A,A+DPTR, Rn不可作為POP的操作數, XCH必須以A為源操作數, XCHD A,Ri,5 算術運算指令 包括加、減、乘、除運算;第一操作數一般為A;一般影響標志位 CY、AC、OV和P。 共24條指令,分成七個小類。 一、不帶進位加法指令(4條) ADD A,Rn ;(A)+(Rn)A ADD A,direct ;(A)+(direct)A ADD A,Ri ;(A)+(Ri)A ADD A,#data ;(A)+#dataA 例3-1(A)=0C3H,(R0)=0AAH 執(zhí)行“ADD A,R0”的和為 ? ,標志位CY= ? ,OV= ? ,AC= ? 。 OV=C7 C6 對第6、第7位的進位位C7、C6異或。,6DH,1,1,0,二、帶進位加法指令(4條) ADDC A,Rn ;(A)+(Rn)+CYA ADDC A,direct ;(A)+(direct) +CY A ADDC A,Ri ;(A)+(Ri) +CY A ADDC A,#data ;(A)+#data +CY A 三、帶借位減法指令(4條) SUBB A,Rn ;(A)- CY -(Rn)A SUBB A,direct ;(A)- CY -(direct)A SUBB A,Ri ;(A)- CY -(Ri) A SUBB A,#data ;(A)- CY - #data A,注意!,無不帶借位的減法指令,例:編寫雙字節(jié)加法指令 設一個加數高字節(jié)、低字節(jié)分別放在片內31H 、30H中,另一個加數高字節(jié)、低字節(jié)分別放在片內41H、 40H中,要求其加法結果高、低字節(jié)分別放入51H、50H中。 試編寫該程序。,MOV A,30H ADD A,40H MOV 50H,A MOV A,31H ADDC A,41H MOV 51H, A,四、乘除法指令(2條) 1、乘法指令 (8位無符號數乘法) MUL AB ;(A)(B)B158,A70 說明: 若結果的B0,則OV=1, 若B=0, 則OV=0; CY總是為0。 2、除法指令 (8位無符號數除法) DIV AB ;(A)/(B)的商A,余數B 說明: 若除數B=0,則OV=1, 若B 0, 則OV=0; CY=0。,舉例: 1、編程序實現將片內RAM中 38H單元的16進制數轉換成非壓縮BCD碼,放在30H、31H、32H中。,程序如下: MOV A, 38H MOV B, #10 DIV AB MOV 32H, B MOV B, #10 DIV AB MOV 31H, B MOV 30H, A,五、加1指令(5條) INC A ;(A)+1 A INC Rn ;(Rn)+1 Rn INC direct ;(direct)+1 direct INC Ri ;(Ri)+1 (Ri) INC DPTR ;(DPTR)+1 DPTR 說明:此類指令不影響標志CY、AC和OV,六、減1指令(4條) DEC A ;(A)-1 A DEC Rn ;(Rn)-1 Rn DEC direct ;(direct)-1 direct DEC Ri ;(Ri)-1 (Ri) 說明:此類指令不影響標志CY、AC和OV,注意: 無 DEC DPTR 指令,七、十進制數調整指令(1條) DA A ;把中按二進制相加后的結果調整成按 ;BCD相加的結果 什么是BCD加法? 說明: (1)此指令常跟在ADD或ADDC指令之后,將A中的和調整為BCD碼,并且ADD或ADDC的兩個操作數是BCD碼; (2)調整方法: 若(A03)9或AC=1,則(A03) +6 (A03); 若(A47)9或CY=1,則(A47) +6 (A47); (3)對標志的影響:若結果A99,則CY=1;不影響OV。,比如:37H+25H=62H,作業(yè): P56 3.13 兩個4位BCD碼數相加,設被加數和加數分別存于片內RAM的40H41H、45H46H單元中,和數存于50H、51H中(均是低位在前,高位在后),試編寫程序。,6 邏輯操作指令 包括清除、求反、移位、與、或、異或等操作。這類指令一般不影響標志位CY、AC和OV。共24條指令,分成五個小類。 一、累加器A清0與取反指令(2條) 1、累加器A清 0 指令 CLR A ;0 A 說明:只影響標志位P。 2、累加器A取反指令(按位取反) CPL A ;(/A) A,相當于0FFH - A A 說明:不影響標志位。 如: (A)=56H CPL A ;結果為0A9H,注意只能以為操作數,二、移位指令(4條) 1、累加器A循環(huán)左移 RL A ; 2、累加器A循環(huán)右移 RR A ; 3、累加器A帶進位位循環(huán)左移 RLC A ; 4、累加器A帶進位位循環(huán)右移 RRC A ; 說明: (1)各條指令每次只移動一位; (2)左移一位相當于乘以2;右移一位相當于除以2; (3)帶進位移動影響標志位CY和P。,只能以為操作數,三、邏輯“與”指令(6條) ANL A,Rn ;(A)(Rn)A ANL A,direct ;(A)(direct)A ANL A,Ri ;(A)(Ri)A ANL A,#data ;(A) #data A ANL direct,A ;( direct )(A)direct ANL direct,#data ;( direct ) #data direct 說明: (1)目的操作數只能是A或者direct; (2)沒有 ANL direct,direct ANL direct,Rn 或ANL direct,Ri 的形式。,(3)前4條指令僅影響標志位P;后兩條不影響標志位; (4)與運算常用于使某些位清0。,例1: 試編寫程序,將片內RAM中45H單元內容的高4位清0。 例2: 試編寫程序,將片外RAM中1045H單元內容的高4位清0。,ANL 45H,#0FH,MOV DPTR,#1045H MOVX A,DPTR ANL A, #0FH MOVX DPTR,A,四、邏輯“或”指令(6條) ORL A,Rn ;(A)(Rn)A ORL A,direct ;(A)(direct)A ORL A,Ri ;(A)(Ri)A ORL A,#data ;(A) #data A ORL direct,A ;( direct )(A)direct ORL direct,#data ;( direct ) #data direct 說明: (1)目的操作數只能是A或者direct; (2)沒有 ORL direct,direct ORL direct,Rn 或 ORL direct,Ri 的形式。,(2)前4條指令僅影響標志位P;后兩條不影響標志位。 (3)或運算常用于使某些位置1。,例1: 試編寫程序,將片內RAM中45H單元內容的低4位置1。 例2: 試編寫程序,將片外RAM中1045H單元內容的低4位置1。,ORL 45H,#0FH,MOV DPTR,#1045H MOVX A,DPTR ORL A, #0FH MOVX DPTR,A,五、邏輯“異或”指令(6條) XRL A,Rn ;(A)(Rn)A XRL A,direct ;(A)(direct)A XRL A,Ri ;(A)(Ri)A XRL A,#data ;(A) #data A XRL direct,A ;( direct )(A)direct XRL direct,#data ;( direct ) #data direct 說明: (1)目的操作數只能是A或者direct; (2)沒有 XRL direct,direct XRL direct,Rn 或 XRL direct,Ri 的形式。 (3)用1異或使對應位取反,用0異或使對應位不變,異或運算常用于使某些位取反。,例: 試編寫程序,將片外RAM中2100H單元內容的奇數位變反,偶數位不變,MOV DPTR,#2100H MOVX A,DPTR XRL A , #1010 1010B MOVX DPTR, A,7 控制程序轉移類指令 包括無條件轉移、條件轉移、子程序調用和返回指令等,共17條。 只有比較轉移指令影響標志位。,1、AJMP 絕對轉移 2、LJMP 長轉移 3、SJMP 相對轉移 4、JMP A+DPTR 間接轉移,程序,一、無條件轉移指令(4條),正常執(zhí)行,1、短轉移(絕對轉移)指令 AJMP addr11(字節(jié)) 舉例: AJMP A1 A1: MOV A ,#0 說明: 應用時必須保證目標地址與下一條指令首地址的高5位相同,即目標地址與下一條指令在同一個2KB范圍,否則出錯。,(PC),2、長轉移指令 LJMP addr16 ;addr16PC (字節(jié)指令) 如:LJMP NEXT NEXT: ,(PC),說明: 轉移范圍是 64KB全程序空間任何單元, 即目標地址可以是 0000HFFFFH任意值。,3、相對轉移指令 SJMP rel (2字節(jié)) 如:SJMP NEXT NEXT: 說明: 應用時應保證目標地址在距離轉移指令的下一條指令的-128+127字節(jié)距離范圍內。 例如: SJMP $ ;無限循環(huán)執(zhí)行本指令,,4、間接轉移指令 JMP A+DPTR ;(A)+(DPTR)PC 目的地址為 A+DPTR 說明:(1)具有多分枝轉移功能,即散轉功能,又叫散轉指令; (2)轉移范圍:是以DPTR為首地址的256B。,例3-11 根據累加器A中的命令鍵鍵值,設計命令鍵操作跳轉程序。 MOV DPTR,#JPTAB JMP A+DPTR JPTAB: AJMP CCS0 AJMP CCS1 AJMP CCS2 :,二、條件轉移指令(8條) 均為相對尋址方式。 1、累加器A為零(非零)轉移指令 JZ rel ;當A=0時,轉移; ;當A0時,順序執(zhí)行。 JNZ rel ; 當A0時,轉移; ;當A=0時,順序執(zhí)行。,2、比較轉移指令 4條,均為三字節(jié)指令。一般形式為: CJNE (目的操作數),(源操作數),rel 不等則轉移,同時置CY,等則順序執(zhí)行。 (1) CJNE A,direct,rel ;若A (direct) ,則(PC)+relPC,且0CY; ;若A #data ,則(PC)+relPC,且0CY; ;若A #data ,則(PC)+relPC,且1CY; ;若A = #data ,則順序執(zhí)行,且0CY。,(3)CJNE Rn,#data,rel ;若(Rn) #data ,則(PC)+relPC,且0CY; ;若(Rn) #data ,則(PC)+relPC,且0CY; ;若(Ri) #data ,則(PC)+relPC,且1CY; ;若(Ri) =#data ,則順序執(zhí)行,且0CY。,說明: CY,實際是A-(direct)操作的借位值送CY; CY可以作為進一步操作的依據。 如:CJNE A,38H,FIRST CJNE A,#56H,SECOND CJNE R2,#32,THIRD CJNE R1,#48H,FOURTH,3、循環(huán)轉移指令 DJNZ Rn,rel ;(Rn)-1Rn; ;若(Rn)0, 則轉移 ; ;若(Rn) = 0, 則結束循環(huán), 順序執(zhí)行 DJNZ direct,rel ;( direct )-1 direct ; ;若(direct)0,則轉移 ; ;若(direct) = 0,則結束循環(huán), 順序執(zhí)行 說明: (1)PC的含義同上; (2) Rn、direct相當于控制循 環(huán)的計數器。,舉例: 統(tǒng)計片內RAM區(qū)的60H70H地址單元中30的個數。,程序: TJ : MOV R2,#10H ;計數器 MOV R0,#60H ;給指針賦初值 MOV R3, #0 ;統(tǒng)計30個數計數器 LP1: CJNE R0, #30, NEXT INC R3 NEXT: INC R0 DJNZ R2, LP1 RET,三、子程序調用和返回指令(3條),CALL指令,執(zhí)行子程序,RET指令,程序,子程序調用指令可完成保護斷點的工作,以便正確返回,ACALL 子函數名、 LCALL 子函數名、 RET子程序返回 RETI 中斷子程序返回,三、子程序調用和返回指令(3條) 1、短(絕對)調用指令 ACALL addr11 說明: 要求與絕對調用指令同,即目的地址要與轉移指令下一條指令地址在同一個2KB范圍,即高5位地址相同。,如: ACALL SUB SUB : RET,2、長調用指令 LCALL addr16 說明: 轉移范圍是整個程序存儲空間,64KB范圍,即目標地址可為0000HFFFFH范圍任意值 。,如: LCALL SUB SUB : RET,3、返回指令 RET: 子程序返回指令,與子程序調用指令配合使用 ;(SP) PC 815 , (SP) -1SP ; (SP) PC 07 , (SP) -1SP RETI: 中斷服務子程序返回指令,處于中斷服務子程 序末尾處。 ;(SP) PC 815 , (SP) -1SP ; (SP)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 云原生開發(fā)工程師崗位面試問題及答案
- 2025屆云南省尋甸縣第五中學高二化學第二學期期末教學質量檢測試題含解析
- 安徽省江淮名校2025年高一下化學期末監(jiān)測模擬試題含解析
- 浙江省金華市磐安縣第二中學2025屆高二化學第二學期期末監(jiān)測模擬試題含解析
- 2025屆內蒙古巴彥淖爾市臨河區(qū)三中化學高一下期末綜合測試模擬試題含解析
- 河南禽類交易管理辦法
- 擬像權力批判-洞察及研究
- 醫(yī)療項目預算管理辦法
- 民兵物資倉庫管理辦法
- 華為公司采購管理辦法
- 第四單元整體教學設計-部編版語文八年級下冊
- 貴州省畢節(jié)市威寧縣2024年統(tǒng)編版小升初考試語文試卷(原卷版)
- 平安產險湖北省中央財政水稻種植保險條款
- 日語考試N5試題
- 農商銀行考試題庫100題
- 電池的歷史與發(fā)展
- 小學學業(yè)生涯規(guī)劃與目標
- 2023年CQE客訴工程師年度總結及下年規(guī)劃
- 國家開放大學《中國法律史》形成性考核1
- 攪拌類設備單機試車原始記錄
- 老舊小區(qū)物業(yè)投標方案(技術標)
評論
0/150
提交評論