系統(tǒng)軟件開(kāi)發(fā)實(shí)踐報(bào)告_第1頁(yè)
系統(tǒng)軟件開(kāi)發(fā)實(shí)踐報(bào)告_第2頁(yè)
系統(tǒng)軟件開(kāi)發(fā)實(shí)踐報(bào)告_第3頁(yè)
系統(tǒng)軟件開(kāi)發(fā)實(shí)踐報(bào)告_第4頁(yè)
系統(tǒng)軟件開(kāi)發(fā)實(shí)踐報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩9頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院系統(tǒng)軟件開(kāi)發(fā)實(shí)踐報(bào)告姓 名: 王冬升 學(xué) 號(hào): 08123228 專 業(yè): 計(jì)算機(jī)科學(xué)與技術(shù) 班 級(jí): 計(jì)科12-1班 指導(dǎo)教師: 張 博 2015年 4月 摘 要操作系統(tǒng)和編譯原理是大學(xué)計(jì)算機(jī)專業(yè)的必修課程。在這些課程的教學(xué)教程中,容易偏重于理論的介紹,而忽視了實(shí)踐環(huán)節(jié)。本課程設(shè)計(jì)是在完成C+程序設(shè)計(jì)、數(shù)據(jù)結(jié)構(gòu)、操作系統(tǒng)、編譯技術(shù)教學(xué)后所進(jìn)行的,全面綜合訓(xùn)練學(xué)生的系統(tǒng)軟件開(kāi)發(fā)能力關(guān)鍵字:編譯系統(tǒng)、Flex、Bison、操作系統(tǒng)、啟動(dòng)、內(nèi)存管理目 錄1 借助Flex進(jìn)行詞法分析 2 1.1實(shí)驗(yàn)內(nèi)容 2 1.2 實(shí)驗(yàn)要求 2 1.3 程序代碼 2 1.4 實(shí)驗(yàn)結(jié)果 42 借助

2、Flex/Bison進(jìn)行語(yǔ)法分析 5 2.1 實(shí)驗(yàn)內(nèi)容 5 2.2 實(shí)驗(yàn)要求 52.3 程序代碼 52.4 實(shí)驗(yàn)步驟 52.5 實(shí)驗(yàn)結(jié)果 73 Flex/Bison綜合實(shí)驗(yàn) 7 3.1 實(shí)驗(yàn)內(nèi)容 7 3.2 計(jì)算器具體需要實(shí)現(xiàn)的功能 7 3.3 實(shí)驗(yàn)要求 7 3,4 程序代碼 8 3.5 實(shí)驗(yàn)結(jié)果 114(操作系統(tǒng)實(shí)驗(yàn))lib0:熟悉實(shí)驗(yàn)環(huán)境 114.1 實(shí)驗(yàn)?zāi)康?114.2 實(shí)驗(yàn)環(huán)境搭建 114.3 GCC編譯練習(xí) 124.4 GDB調(diào)試練習(xí) 125(操作系統(tǒng)實(shí)驗(yàn))lib1:?jiǎn)?dòng)操作系統(tǒng) 135.1 實(shí)驗(yàn)?zāi)康?135.2 實(shí)驗(yàn)內(nèi)容 145.3 實(shí)驗(yàn)步驟 145.4 操作系統(tǒng)啟動(dòng)過(guò)程 155.

3、5 實(shí)模式與保護(hù)模式 166(操作系統(tǒng)實(shí)驗(yàn))lib2:物理內(nèi)存管理 166.1 實(shí)驗(yàn)?zāi)康?166.2 實(shí)驗(yàn)內(nèi)容 166.3 7實(shí)驗(yàn)體會(huì) 8參考文獻(xiàn) 1借助Flex進(jìn)行詞法分析1.1實(shí)驗(yàn)內(nèi)容給定C語(yǔ)言的一個(gè)子集,具體內(nèi)容如下:1. 下面是語(yǔ)言的關(guān)鍵字: else if switch for int float return void while 所有的關(guān)鍵字都是保留字,并且必須是小寫。2. 下面是專用符號(hào): + - * / = = != = ; , ( ) /* */3. 其他標(biāo)記是標(biāo)識(shí)符(ID) 和數(shù)字(NU ),通過(guò)下列正則表達(dá)式定義:ID = letter letter*NUM = dig

4、it digit*letter = a|.|z|A|.|Zdigit = 0|.|9 注:小寫和大寫字母是有區(qū)別的。4. 空格由空白、換行符和制表符組成。空格通常被忽略,除了它必須分開(kāi)ID、NUM 關(guān)鍵字。5. 注釋用通常的C語(yǔ)言符號(hào)/* . . . */圍起來(lái)。注釋可以放在任何空白出現(xiàn)的位置(即注釋不能放在標(biāo)記內(nèi))上,且可以超過(guò)一行。注釋不能嵌套1.2實(shí)驗(yàn)要求編寫 LEX 源文件,實(shí)現(xiàn)C 語(yǔ)言子集的詞法分析功能,最后上機(jī)調(diào)試。要求編寫一個(gè)測(cè)試程序,以給定的測(cè)試文件作為輸入,輸出運(yùn)行結(jié)果到輸出文件中1.3程序代碼Lex.l源碼:%#include #include #include int y

5、ywrap();int lineno=1;%delim t ws delim+ letter A-Za-zdigit 0-9id letter+number digit+enter nspchar (|(|)|;|=|,|+|-|*|/|=|=|!=)comment /*(*/|*)*/kwd (else|if|switch|for|int|float|return|void|while)%ws comment enter lineno+;kwd fprintf(yyout,%d行tkeywodt%sn,lineno,yytext);spchar fprintf(yyout,%d行tspcha

6、rt%sn,lineno,yytext);id fprintf(yyout,%d行tidentit%sn,lineno,yytext);number fprintf(yyout,%d行tnumbert%sn,lineno,yytext);.%int yywrap() return 1;int main(void)char infilename100;printf(輸入文件名:);scanf(%s,infilename);yyin = fopen(infilename,r);yyout = fopen(out,w);yylex();return 0;測(cè)試程序:1-1.cpp#includeusi

7、ng namespace std;int main() int a;int d=123456;float b=123.45;int e=9;a=(1+2-1)*4/2;if(ab)coutbendl;else couta=bendl;coutaendl;coutbendl;coutWelcome to c+ endl;return 0;1.4實(shí)驗(yàn)結(jié)果實(shí)驗(yàn)結(jié)果輸出到.out文件中,截圖示例:2借助Flex/Bison進(jìn)行語(yǔ)法分析2.1實(shí)驗(yàn)內(nèi)容利用附錄提供的C語(yǔ)言文法的相關(guān)參考資料,利用Yacc/Bison編寫一個(gè)C語(yǔ)言分析器。具體內(nèi)容:1) 利用語(yǔ)法分析器生成工具Bison編寫一個(gè)語(yǔ)法分析程序,

8、與詞法分析器結(jié)合能夠根據(jù)語(yǔ)言的上下文無(wú)關(guān)文法,識(shí)別輸入的單詞序列是否文法的句子2) 利用附錄提供的C語(yǔ)言文法的相關(guān)參考資料,利用Yacc/Bison編寫一個(gè)C語(yǔ)言分析器。 2.2 實(shí)驗(yàn)要求1) 編寫 Bison源文件,實(shí)現(xiàn)C 語(yǔ)言的語(yǔ)法分析功能,最后上機(jī)調(diào)試。2) 要求編寫一個(gè)測(cè)試程序,以給定的測(cè)試文件作為輸入,輸出運(yùn)行結(jié)果到輸出文件中。2.3程序代碼由于本實(shí)驗(yàn)的lex源文件和yacc源文件代碼較長(zhǎng)而且在“實(shí)驗(yàn)附錄:C語(yǔ)言相關(guān)文法”文件夾中已經(jīng)給出相關(guān)源碼的鏈接,由于報(bào)告篇幅限制不再貼出源碼Test.測(cè)試文件源碼:void main() int i = 0;int j = 0;void t1(

9、) int i = 0;typedef unsigned int uint;uint xx;uint yy;2.4實(shí)驗(yàn)步驟 1、flex -l input.lexbison -d cgrammar-new.y (產(chǎn)生頭文件和.c文件)2、comment函數(shù)調(diào)用yyinput,編譯會(huì)有鏈接錯(cuò)誤,解決方法一,將lex.yy.c中的yyinput函數(shù)定義拷貝一份到input.lex, 重命名為my_yyinput, 或者將lex.yy.c中的#ifdef _cplusplusstatic int yyinput()#elsestatic int input()#endif改為static int y

10、yinput()上述問(wèn)題出現(xiàn)的情形:詞法分析器的后綴名為.c, 而不是.cpp3、cgrammar-new.tab.c中如下程序段/*-.| yyparse. |-*/#ifdef YYPARSE_PARAM# if defined (_STDC_) | defined (_cplusplus)int yyparse (void *YYPARSE_PARAM)# elseint yyparse (YYPARSE_PARAM) void *YYPARSE_PARAM;# endif#else /* ! YYPARSE_PARAM */#if defined (_STDC_) | defined

11、(_cplusplus)intyyparse (void)#elseintyyparse () ;#endif#endif改為int yyparse () 或者 int yyparse (void)4、lex.yy.c中,將下面語(yǔ)句注釋if ( ! yyin )yyin = stdin;5、解析之前,設(shè)置yyin為輸入文件指針extern FILE *yyin;if(!(yyin = fopen(filename,r) printf(the file not existn); exit(0);2.5實(shí)驗(yàn)結(jié)果 實(shí)驗(yàn)結(jié)果輸出到.out文件中,截圖示例:3 Flex/Bison綜合實(shí)驗(yàn)3.1實(shí)驗(yàn)內(nèi)容

12、使用flex和bison開(kāi)發(fā)了一個(gè)具有全部功能的桌面計(jì)算器,能夠支持變量,過(guò)程,循環(huán)和條件表達(dá)式,使它成為一個(gè)雖然短小但是具有現(xiàn)實(shí)意義的編譯器。重點(diǎn)學(xué)習(xí)抽象語(yǔ)法樹(shù)的用法,它具有強(qiáng)大而簡(jiǎn)單的數(shù)據(jù)結(jié)構(gòu)來(lái)表示分析結(jié)果3.2計(jì)算器具體需要實(shí)現(xiàn)的功能變量命名;實(shí)現(xiàn)賦值功能;實(shí)現(xiàn)比較表達(dá)式(大于、小于、等于等等)實(shí)現(xiàn)if/then/else和do/while的流程控制;用戶可以自定義函數(shù);簡(jiǎn)單的錯(cuò)誤恢復(fù)機(jī)制3.3實(shí)驗(yàn)要求編寫 Flex/Bison源文件,實(shí)現(xiàn)C 語(yǔ)言的語(yǔ)法分析功能,最后上機(jī)調(diào)試。要求編寫一個(gè)測(cè)試程序:1) 首先自定義兩個(gè)函數(shù)sq和avg,sq函數(shù)使用Newton方法來(lái)迭代計(jì)算平方根;avg

13、函數(shù)計(jì)算兩個(gè)數(shù)值的平均值。2) 利用定義好的函數(shù)進(jìn)行計(jì)算,得到計(jì)算結(jié)果并顯示出來(lái)3.4程序代碼Cal.l源碼% #include cal.tab.h%option noyywrapinteger 0-9+dreal (0-9*.0-9+)ereal (0-9*.0-9+EedD+-?0-9+)real dreal|erealnl nplus +minus -times *divide /lp (rp )module %power % t ; /*skip any blanks */integer sscanf(yytext, %d, &eger); return INTEG

14、ER;real sscanf(yytext, %lf, &yylval.real);/*yylval = atof(yytext); it doesnt work under MSVSC*/ return REAL; plus return PLUS;minus return MINUS;times return TIMES;divide return DIVIDE;module return MODULE;power return POWER;lp return LP;rp return RP;nl return NL;. return yytext0;Cal.y源碼%#include #i

15、nclude %union double real; /* real value */ int integer; /* integer value */%token REAL%token INTEGER%start lines%token NUMBER NL%token PLUS MINUS TIMES DIVIDE MODULE POWER LP RP%type rexpr%type iexpr%left PLUS MINUS /*left associative */%left TIMES DIVIDE MODULE /*left associative */%left POWER%lef

16、t UNARYMINUS%lines: /* nothing */ | lines line NL | lines error NL yyerror();yyerrok; ;line : iexpr printf(%dn,$1); | rexpr printf(%lfn,$1); ;iexpr: INTEGER $ = $1; | iexpr PLUS iexpr $ = $1 + $3; | iexpr MINUS iexpr $ = $1 - $3; | iexpr TIMES iexpr $ = $1 * $3; | iexpr DIVIDE iexpr if($3) $ = $1 /

17、$3; else $ = $1; printf (stderr, %d.%d-%d.%d: division by zero, 3.first_line, 3.first_column, 3.last_line, 3.last_column); | iexpr MODULE iexpr $ = $1 % $3; | iexpr POWER iexpr $ = pow($1, $3); | MINUS iexpr %prec UNARYMINUS $ = - $2; | LP iexpr RP $ = $2; | LP iexpr error $ = $2; yyerror(missing );

18、 yyerrok; | PLUS iexpr %prec UNARYMINUS $ = $2; rexpr :REAL $ = $1; | rexpr PLUS rexpr $ = $1 + $3; | rexpr MINUS rexpr $ = $1 - $3; | rexpr TIMES rexpr $ = $1 * $3; | rexpr DIVIDE rexpr if ($3)$ = $1 / $3; else $ = $1; printf (stderr, %d.%d-%d.%d: division by zero, 3.first_line, 3.first_column, 3.l

19、ast_line, 3.last_column); | rexpr POWER rexpr $ = pow($1,$3); | LP rexpr RP $ = $2; | LP rexpr error $ = $2; yyerror(missing ); yyerrok; | MINUS rexpr %prec UNARYMINUS $ = -$2; | PLUS rexpr %prec UNARYMINUS $ = $2; | iexpr PLUS rexpr $ = (double)$1 + $3; | iexpr MINUS rexpr $ = (double)$1 - $3; | ie

20、xpr TIMES rexpr $ = (double)$1 * $3; | iexpr DIVIDE rexpr if($3) $ = (double)$1 / $3; else $ = $1; printf (stderr, %d.%d-%d.%d: division by zero, 3.first_line, 3.first_column, 3.last_line, 3.last_column); | iexpr POWER rexpr $ = pow(double)$1,$3); | rexpr PLUS iexpr $ = $1 + (double)$3; | rexpr MINU

21、S iexpr $ = $1 - (double)$3; | rexpr TIMES iexpr $ = $1 * (double)$3; | rexpr DIVIDE iexpr if($3) $ = $1 / (double)$3; else $ = $1; printf (stderr, %d.%d-%d.%d: division by zero, 3.first_line, 3.first_column, 3.last_line, 3.last_column); | rexpr POWER iexpr $ = pow($1,(double)$3); ;%void main() yypa

22、rse();int yyerror(char* msg)printf(Error: %s encountered n, msg);3.5實(shí)驗(yàn)結(jié)果實(shí)驗(yàn)結(jié)果截圖:4(操作系統(tǒng)實(shí)驗(yàn))lib0:熟悉實(shí)驗(yàn)環(huán)境4.1實(shí)驗(yàn)?zāi)康?) 了解操作系統(tǒng)開(kāi)發(fā)實(shí)驗(yàn)環(huán)境2) 熟悉命令行方式的編譯、調(diào)試工程3) 掌握基于硬件模擬器的調(diào)試技術(shù)4) 熟悉C語(yǔ)言編程和指針的概念5) 了解X86匯編語(yǔ)言4.2實(shí)驗(yàn)環(huán)境搭建1) 在線實(shí)驗(yàn)-基于實(shí)驗(yàn)樓在線平臺(tái)2) Windows下基于MingW進(jìn)行實(shí)驗(yàn)3) Windows下基于VirtualBox or VMWare進(jìn)行實(shí)驗(yàn)4) 在MAC OS下進(jìn)行實(shí)驗(yàn)5) 手動(dòng)在物理PC中安裝環(huán)境4

23、.3 GCC編譯練習(xí)采用實(shí)驗(yàn)環(huán)境:在線實(shí)驗(yàn)-基于實(shí)驗(yàn)樓在線平臺(tái)gcc示例:#includeint main(void)printf(hello!n);return 0;在實(shí)驗(yàn)環(huán)境中右鍵-從模板創(chuàng)建-空文件,將上述示例代碼輸入1) 保存為hello.c打開(kāi)命令行,輸入以下命令:2) 編譯:gcc -Wall hello.c -o hello3) 執(zhí)行:./hello操作及結(jié)果截圖:4.4 GDB調(diào)試練習(xí) 1)輸入命令:gcc -o hello hello.c g進(jìn)行編譯 2)輸入命令:gdb進(jìn)入調(diào)試 3)依次輸入以下命令熟悉gdb調(diào)試file hello:進(jìn)入hello文件run:運(yùn)行hello

24、break 1:在第一行插入斷點(diǎn)next:?jiǎn)尾綀?zhí)行下一行語(yǔ)句clear 1:清除第一行的斷點(diǎn)list :顯示hello文件的內(nèi)容quit:退出gdb調(diào)試對(duì)應(yīng)命令執(zhí)行結(jié)果截圖:GDB的其它調(diào)試命令補(bǔ)充:next :?jiǎn)尾降匠绦蛟创a的下一行,不進(jìn)入函數(shù)。nexti :?jiǎn)尾揭粭l機(jī)器指令,不進(jìn)入函數(shù)。step :?jiǎn)尾降较乱粋€(gè)不同的源代碼行(包括進(jìn)入函數(shù))。stepi :?jiǎn)尾揭粭l機(jī)器指令他們功能各不相同,區(qū)別在于單步的“跨度”上。5(操作系統(tǒng)實(shí)驗(yàn))lib1:?jiǎn)?dòng)操作系統(tǒng)5.1實(shí)驗(yàn)?zāi)康牟僮飨到y(tǒng)是一個(gè)軟件,也需要通過(guò)某種機(jī)制加載并運(yùn)行它。在這里我們將通過(guò)另外一個(gè)更加簡(jiǎn)單的軟件-bootloader來(lái)完成這些

25、工作。為此,我們需要完成一個(gè)能夠切換到x86的保護(hù)模式并顯示字符的bootloader,為啟動(dòng)操作系統(tǒng)ucore做準(zhǔn)備。lab1提供了一個(gè)非常小的bootloader和ucore OS,整個(gè)bootloader執(zhí)行代碼小于512個(gè)字節(jié),這樣才能放到硬盤的主引導(dǎo)扇區(qū)中。通過(guò)分析和實(shí)現(xiàn)這個(gè)bootloader和ucore OS,讀者可以了解到:1)計(jì)算機(jī)原理CPU的編址與尋址: 基于分段機(jī)制的內(nèi)存管理CPU的中斷機(jī)制外設(shè):串口/并口/CGA,時(shí)鐘,硬盤2)Bootloader軟件編譯運(yùn)行bootloader的過(guò)程調(diào)試bootloader的方法PC啟動(dòng)bootloader的過(guò)程ELF執(zhí)行文件的格式和

26、加載外設(shè)訪問(wèn):讀硬盤,在CGA上顯示字符串3)ucore OS軟件編譯運(yùn)行ucore OS的過(guò)程ucore OS的啟動(dòng)過(guò)程調(diào)試ucore OS的方法函數(shù)調(diào)用關(guān)系:在匯編級(jí)了解函數(shù)調(diào)用棧的結(jié)構(gòu)和處理過(guò)程中斷管理:與軟件相關(guān)的中斷處理外設(shè)管理:時(shí)鐘5.2實(shí)驗(yàn)內(nèi)容lab1中包含一個(gè)bootloader和一個(gè)OS。這個(gè)bootloader可以切換到X86保護(hù)模式,能夠讀磁盤并加載ELF執(zhí)行文件格式,并顯示字符。而這lab1中的OS只是一個(gè)可以處理時(shí)鐘中斷和顯示字符的幼兒園級(jí)別OS。5.3實(shí)驗(yàn)步驟熟悉以下命令,掌握操作系統(tǒng)的啟動(dòng)過(guò)程:1) make(ucore.img的生成過(guò)程)2) make V=(g

27、cc把c的源代碼編譯成.o的目標(biāo)文件 ld會(huì)把這些目標(biāo)文件呢會(huì)轉(zhuǎn)換成一個(gè)執(zhí)行程序,這里面會(huì)轉(zhuǎn)換成這個(gè)bootblock.out這個(gè)實(shí)際上是可以理解為是一個(gè)Bootloader一個(gè)執(zhí)行程序,第一個(gè)是Bootloader 第二叫kernel)3)啟動(dòng)系統(tǒng):make qemu4)啟動(dòng)并調(diào)試:make debug:進(jìn)入debug模式n(執(zhí)行下一行代碼)p ph(顯示當(dāng)前值)continue(繼續(xù)執(zhí)行)ctrl+c(中斷)quit(推出5.4操作系統(tǒng)啟動(dòng)過(guò)程當(dāng)X86一開(kāi)始加電時(shí)候,啟動(dòng)是實(shí)模式(實(shí)地址尋址模式)(早期的為了ss向下兼容以前的80X86一開(kāi)始啟動(dòng)是16位的實(shí)模式)第一條地址:段地址寄存器C

28、SCS和EIP結(jié)合在一起來(lái)決定它啟動(dòng)的第一條地址:按實(shí)模式的尋址方式:cs(base)基址+EIP-bios(指向bios)這個(gè)bios固件會(huì)去加載磁盤或者硬盤的第一個(gè)主引導(dǎo)扇區(qū)(即執(zhí)行0號(hào)扇區(qū) lab1中的bootloader)它完成來(lái)對(duì)我們說(shuō)的這個(gè)操作系統(tǒng) uCore的進(jìn)一步加載Bootloader的工作:1)要從實(shí)模式切換到保護(hù)模式,就是從實(shí)模式的16位的尋址空間切換到了32位的尋址空間尋址空間:從1M(物理地址=左移4位的段地址+偏移地址)變?yōu)?G,段機(jī)制可以正常工作了。對(duì)系統(tǒng)寄存器CRO(或者叫控制寄存器 )把它的第0號(hào)bit置成1那么就意味著現(xiàn)在的系統(tǒng)我們的CPU會(huì)進(jìn)入到保護(hù)模式2

29、)就是讀取kernel 就是uCore的代碼,CS EIP的值指向我們操作系統(tǒng)內(nèi)核所在內(nèi)存中的起始點(diǎn),之后就相當(dāng)于是把控制權(quán)交給了uCore OS去執(zhí)行5.5實(shí)模式與保護(hù)模式(1) 實(shí)模式在bootloader接手BIOS的工作后,當(dāng)前的PC系統(tǒng)處于實(shí)模式(16位模式)運(yùn)行狀態(tài),在這種狀態(tài)下軟件可訪問(wèn)的物理內(nèi)存空間不能超過(guò)1MB,且無(wú)法發(fā)揮Intel 80386以上級(jí)別的32位CPU的4GB內(nèi)存管理能力。實(shí)模式將整個(gè)物理內(nèi)存看成分段的區(qū)域,程序代碼和數(shù)據(jù)位于不同區(qū)域,操作系統(tǒng)和用戶程序并沒(méi)有區(qū)別對(duì)待,而且每一個(gè)指針都是指向?qū)嶋H的物理地址。這樣,用戶程序的一個(gè)指針如果指向了操作系統(tǒng)區(qū)域或其他用戶程序區(qū)域,并修改了內(nèi)容,那么其后果就很可能是災(zāi)難性的。通過(guò)修改A20地址線可以完成從實(shí)模式到保護(hù)模式的轉(zhuǎn)換(2) 保護(hù)模式只有在保護(hù)模式下,80386的全部32根地址線有效,可尋址高達(dá)4G字節(jié)的線性地址空間和物理地址空間,可訪問(wèn)64TB(有214個(gè)段,每個(gè)段最大空間為232

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論