-
下載積分: 5 賞幣
上傳時間:2024-03-06
頁數(shù): 3
大?。?0.03(MB)
子文件數(shù):
-
下載積分: 6 賞幣
上傳時間:2024-03-05
頁數(shù): 13
大?。?0.02(MB)
子文件數(shù):
-
下載積分: 8 賞幣
上傳時間:2024-03-06
頁數(shù): 29
大?。?0.13(MB)
子文件數(shù):
-
下載積分: 6 賞幣
上傳時間:2024-03-05
頁數(shù): 10
大?。?0.04(MB)
子文件數(shù):
-
下載積分: 3 賞幣
上傳時間:2024-03-06
頁數(shù): 1
大?。?0.03(MB)
子文件數(shù):
-
下載積分: 6 賞幣
上傳時間:2024-03-05
頁數(shù): 6
大?。?0.07(MB)
子文件數(shù):
-
簡介:1,系統(tǒng)級設(shè)計描述語言SYSTEMC,徐寧儀XUNY97MAILSTSINGHUAEDUCNXUNYSMTH東主樓9區(qū)324房間62781914,版權(quán)所有2004,第二部分SYSTEMC的基本語法,教材陳曦徐寧儀SYSTEMC片上系統(tǒng)設(shè)計,科學(xué)出版社,2003本課件大部分內(nèi)容參考此書,僅作為大學(xué)教學(xué)之用,請勿用于商業(yè),2,課程主要內(nèi)容,共講4次,爭取講清楚WHY,WHAT,SC_CTORHELLO{//此處聲明SYSTEMC構(gòu)造函數(shù)COUTBUILDSYSTEMCLIBF7,20,NAND2,CREATENEWPROJECTFILENEWPROJECTWIN32CONSOLEAPPLICATIONEMPTYPROJECTADDEXISTEDFILESPROJECTADDTOPROJECTFILESMAINCPPTBHNAND2HBUILDINGARGUMENTANDDEPENDENCYPROJECTSETTINGSC/CCLANGUAGEENABLERUNTIMEINFORMATIONPROJECTSETTINGSC/CPREPROCESSORADDITIONALINCLUDEDIRECTORYC\TEMP\SYSTEMC201\SRCADDSYSTEMCLIBPROJECTADDTOPROJECTFILESC\TEMP\SYSTEMC201\MSVC60\SYSTEMC\DEBUG\SYSTEMCLIBBUILD,RUN,21,用MODESIM查看波形,建一個MODELSIM項目,將NAND2VCD復(fù)制到該項目的目錄下。使用MODELSIM行命令VCD2WLF將VCD文件轉(zhuǎn)化為WLF文件。命令格式為VCD2WLF,這里我們輸入VCD2WLFNAND2VCDNAND2WLF。請注意VCD2WLF與NAND2VCD、NAND2VC與NAND2WLF之間都有空格。如果沒有任何提示,則命令被正確執(zhí)行,這時將產(chǎn)生一個NAND2WLF文件。,22,用MODESIM查看波形,打開SIGNAL、STRUCTURE和WAVE窗口。,在WAVE窗口下選擇OPENDATASET菜單,將生成的NAND2WLF文件導(dǎo)入進來。這時你將在STRUCTURE窗口中看到設(shè)計SYSTEMC,在SIGNAL窗口中選擇所要看的信號放到WAVE窗口中你就可以看到波形了。,23,特別強調(diào),所有的支持標(biāo)準(zhǔn)C的編譯器都可以編譯SYSTEMC。為了方便PC上的使用,我們使用VISUALC60編譯器。,可以使用MODELSIM、WAVEVIEWER、VCS、SIGNALSCAN等查看波形。WAVEVIEWER是免費的,直接可以查看VCD文件記錄的波形。,24,SYSTEMC仿真過程,SYSTEMC可執(zhí)行文件的執(zhí)行EXECUTION過程分為目標(biāo)描述(ELABORATION)、初始化(INITIALIZATION)和仿真(SIMULATION)三個階段。,SYSTEMC的仿真過程是基于事件EVENT的。仿真時間只前進,不后退。前進的尺度與仿真時間分辨率和時間單位有關(guān)。,25,目標(biāo)描述(ELABORATION)階段,從SC_MAIN到SC_START的第一次執(zhí)行。SC_MAININT,CHAR{//ELABORATIONSTARTSHERESC_START1000//ELABORATIONENDSHERE},ELABORATION部分一般包括模塊實例和連接模塊的通道的初始化、設(shè)置缺省時間單位和仿真分辨率、SC_CLOCK的初始化、SC_TIME類型數(shù)據(jù)的初始化。,SYSTEMC不支持模塊的動態(tài)創(chuàng)建。(SYSTEMC模塊等效于VHDL的ENTITY),26,初始化INITIALIZATION階段,整個SYSTEMC仿真的執(zhí)行過程由SYSTEMC調(diào)度器控制,INITIALIZATION是SYSTEMC調(diào)度器執(zhí)行的第一步。,SYSTEMC核心語言庫定義了三種進程SC_METHOD、SC_THREAD和SC_CTHREAD。在初始化階段,缺省情況下每一個進程都被執(zhí)行一次,THREAD進程被執(zhí)行到第一個WAIT語句。,通過DON’T_INITIALIZE函數(shù)可以關(guān)閉對進程的初始化。當(dāng)進程的敏感表上有事件發(fā)生的時候,沒有初始化的進程的第一條語句才開始執(zhí)行。,27,初始化INITIALIZATION階段CON’T,在初始化階段,進程的初始化順序是不確定的。但不同次執(zhí)行中進程的初始化順序是確定的。所以同一設(shè)計用不同的編譯器得到的可執(zhí)行文件由于初始化順序不同可能產(chǎn)生不同的運行結(jié)果??聪马摰睦?28,初始化INITIALIZATION階段CON’T,上述代碼中第一次顯示的ADDR的值是0還是1,SC_MODULEEXAMPLE{SC_IN_CLKCLKSC_UINTLAST_ADDR0SC_UINTADDR0VOIDINC{WHILETRUE{ADDRLAST_ADDR1WAIT}}VOIDDISPLAY{COUTDATA_BUS,SYSTEMC中信號與變量的區(qū)別與VHDL中一樣。信號常被用來連接模塊和用于進程間通信,變量則用于進程和模塊的本地存儲。變量仿真的賦值是立刻發(fā)生的,沒有DELTA延時而信號和端口的值刷新要經(jīng)過一個DELTA延時,變量的定義與標(biāo)準(zhǔn)C是一樣的。,按照上面的說法,信號應(yīng)常被綜合為邏輯塊間的連線。變量常被綜合為邏輯塊,可以是組合或者時序邏輯。,53,信號和端口的關(guān)聯(lián),關(guān)聯(lián)(ASSOCIATION)基本等于連接CONNECT,也稱為綁定BIND,關(guān)聯(lián)(ASSOCIATION)分為位置關(guān)聯(lián)和名字關(guān)聯(lián),與VHDL一樣。名字關(guān)聯(lián)就是按照名字一一對應(yīng);位置關(guān)聯(lián)就是按照端口定義的順序一一對應(yīng)。,54,名字關(guān)聯(lián)實例,INCLUDE“NAND2H“INCLUDE“TBH“INTSC_MAININT,CHAR{SC_SIGNALA,B,FSC_CLOCKCLK“CLK“,20,SC_NSNAND2N2“NAND2“N2AAN2BBN2FFTBTB1“TB“TB1CLKCLKTB1AATB1BBTB1FF//RESTOFTHECODEOMITTEDRETURN0},55,位置關(guān)聯(lián)實例,INCLUDE“NAND2H“INCLUDE“TBH“INTSC_MAININT,CHAR{SC_SIGNALA,B,FSC_CLOCKCLK“CLK“,20,SC_NSNAND2N2“NAND2“N2A,B,FTBTB1“TB“TB1CLK,A,B,F//RESTOFTHECODEOMITTEDRETURN0},56,兩種關(guān)聯(lián)方式的對比,位置關(guān)聯(lián)在一個只有少量端口的模塊的初始化中是非常合適的,它能夠使描述簡單化。,然而在對一個有大量端口的模塊的初始化中使用位置關(guān)聯(lián)將是非常危險的,因為實際工作中設(shè)計者可能會不經(jīng)意間修改了模塊的端口的順序,這時就會產(chǎn)生關(guān)聯(lián)錯誤,而這種錯誤很可能是很難發(fā)現(xiàn)的。遇到這種情況最好使用下文所述的名字關(guān)聯(lián)。,所以對于一個大的SYSTEMC項目,一般建議統(tǒng)一的使用名字關(guān)聯(lián)。,57,模塊的構(gòu)造函數(shù),C中的構(gòu)造函數(shù)創(chuàng)建模塊內(nèi)部數(shù)據(jù)結(jié)構(gòu),并把這些數(shù)據(jù)結(jié)構(gòu)初始化為已知的值。,SYSTEMC構(gòu)造函數(shù)還用于初始化進程的類型并創(chuàng)建進程的敏感表。,SYSTEMC的構(gòu)造函數(shù)用SC_CTOR標(biāo)識,構(gòu)造函數(shù)的名字必須與模塊的名字相同。,58,一個構(gòu)造函數(shù)的實例,//ASYSTEMCDESCRIPTIONOF2INPUTNANDGATEDESIGNEDBYCHENXI,2003322INCLUDEINCLUDESC_MODULENAND2{SC_INA,BSC_OUTFVOIDDO_NAND{FA}SC_CTORNAND2{SC_METHODDO_NAND//聲明DO_NAND為SC_METHOD進程SENSITIVEAB}//這里是DO_NAND進程的敏感表},59,另外一個構(gòu)造函數(shù)的例子,INCLUDE//OTHERINCLUDESSC_MODULESIMPLE_SOC{CPUCPU1MEMORYUNITMU1GPIOGPIO1DMADMA1//DECLARECLOCKAND//OTHERSINGALS//CONSTRUCTORSC_CTORSIMPLE_SOC{//SEENEXTSLIDE}SIMPLE_SOC{}//DESTRUCTOR},60,另外一個構(gòu)造函數(shù)的例子CON’T,SIMPLE_SOC的構(gòu)造函數(shù)如下,SC_CTORSIMPLE_SOC{CPU1NEWCPU“CPU“//CONNECTPORTSMU1NEWMEMORYUNIT“MU“//CONNECTPORTSGPIO1NEWGPIO“GPIO“//CONNECTPORTSDMA1NEWDMA“DMA“//CONNECTPORTS},61,在構(gòu)造函數(shù)中對端口的初始化方法,SC_MODULETB{SC_OUTDATA_SOURCE//OTHERPORTDECLARATIONSBOOLVALUEVOIDGENINPUT{DATA_SOURCEWRITEVALUEVALUEVALUE}SC_CTORTB{SC_METHODGENINPUTSENSITIVE_POSCLKDATA_SOURCEWRITETRUE//WRONGDATA_SOURCETRUE//WRONGDATA_SOURCEINITIALIZETRUE//OKVALUETRUE//OK}}(INT2BOOLTESTDSW),62,析構(gòu)函數(shù),析構(gòu)函數(shù)釋放代碼中申請的內(nèi)存SIMPLE_SOC的析構(gòu)函數(shù)如下,//DESTRUCTORSIMPLE_SOC{IFCPU1{DELETECPU1CPU10}IFMU1{DELETEMU1MU10}IFGPIO1{DELETEGPIO1GPIO10}IFDMA1{DELETEDMA1DMA10}},63,SYSTEMC時鐘模型,在SYSTEMC中,時鐘被作為一個特殊的對象處理,它就是SC_CLOCK類。,時鐘端口作為一個特殊的端口。如SC_IN_CLKCLK1//可以用SC_INCLK1代替,在SYSTEMC201中,SC_CLOCK一共有6個重載的構(gòu)造函數(shù)。如SC_CLOCKSC_MODULE_NAMENAME_,CONSTSC_TIME,64,SYSTEMC時鐘定義實例1,SC_CLOCKCLK1“CLK1“,20,05,5,TRUE,65,SYSTEMC時鐘定義實例2,SC_CLOCKCLK2“CLK2“,20,05,0,TRUE,66,以上兩例的缺點,在CLK1和CLK2的定義中,沒有給出時鐘的具體時間單位,系統(tǒng)默認(rèn)的時間單位將被采用,不同的系統(tǒng)的默認(rèn)時間單位可能不同,這將不利于IP核的設(shè)計復(fù)用。假設(shè)CLK1的周期為50MHZ,則更合適的定義方法為SC_CLOCKCLK1“CLK1“,20,SC_NS,05,5,SC_NS,TRUE,67,其它生成時鐘的辦法,另外一種定義時鐘的辦法SC_SIGNALCLOCKSC_INITIALIZEFORINTI0I1000ICLOCK1SC_CYCLE5CLOCK0SC_CYCLE5},
下載積分: 6 賞幣
上傳時間:2024-01-07
頁數(shù): 149
大小: 0.76(MB)
子文件數(shù):
-
簡介:0,主講人劉雪潔,ASSEMBLYLANGUAGEPROGRAMMING,,匯編語言程序設(shè)計,1,課程介紹,匯編語言程序設(shè)計課程是國家教育部所屬高等院校計算機軟硬件專業(yè)的專業(yè)基礎(chǔ)課、必修課。作為一種低級語言,匯編語言是高級語言程序設(shè)計的基礎(chǔ),通常被視為微型計算機的又一核心內(nèi)容。雖然現(xiàn)今大量問題都可應(yīng)用高級語言編程,但匯編語言是能夠利用計算機所有硬件特性并能直接控制硬件的惟一語言,對于直接控制硬件的應(yīng)用場合或若干實時處理與控制的應(yīng)用開發(fā)項目,匯編語言具有明顯的優(yōu)勢。,2,使用教材,沈美明、溫冬嬋編著IBMPC匯編語言程序設(shè)計(第2版)清華大學(xué)出版社2001年參考1王爽編著匯編語言清華大學(xué)出版社2003年2錢曉捷編著匯編語言程序設(shè)計電子工業(yè)出版社2003年,3,教學(xué)內(nèi)容,第1章匯編語言基礎(chǔ)知識第2章80X86的指令系統(tǒng)第3章匯編語言程序格式第4章基本匯編語言程序設(shè)計第5章高級匯編語言程序設(shè)計,4,第1章匯編語言基礎(chǔ)知識,11匯編語言及意義12數(shù)據(jù)編碼與運算13數(shù)據(jù)表示1480X86CPU和寄存器組15存儲器和端口,5,111機器語言計算機能夠直接識別的數(shù)據(jù)是由二進制數(shù)0和1組成的代碼。機器指令就是用二進制代碼組成的指令,一條機器指令控制計算機完成一個基本操作。用機器語言編寫的程序是計算機惟一能夠直接識別并執(zhí)行的程序,而用其他語言編寫的程序必須經(jīng)過翻譯才能變換成機器語言程序。,11匯編語言及意義,返回本章,6,112匯編語言匯編語言是一種用符號書寫的、基本操作與機器指令相對應(yīng)的、并遵循一定語法規(guī)則的計算機語言。匯編語言是一種符號語言,比機器語言容易理解和掌握,也容易調(diào)試和維護。但對于匯編語言編寫的程序必須經(jīng)過匯編和連接之后,才能在計算機上執(zhí)行。,返回本節(jié),返回本章,7,用匯編語言編寫的程序稱為匯編源程序。采用微機中任何一個文本編輯器編寫匯編語言源程序。匯編程序可將匯編語言源程序翻譯成機器代碼目標(biāo)模塊。80X86CPU的匯編程序主要有微軟的宏匯編程序MASM。較著名的還有BORLAND公司的TASM,無實質(zhì)差別。,返回本節(jié),返回本章,8,連接程序?qū)R編后的目標(biāo)模塊轉(zhuǎn)換為可執(zhí)行程序。連接程序的文件名通常是LINKEXE。,返回本節(jié),返回本章,9,113高級語言高級程序設(shè)計語言接近于人類自然語言的語法習(xí)慣,與計算機硬件無關(guān),易被用戶掌握和使用。114匯編語言特點匯編語言程序與處理器指令系統(tǒng)密切相關(guān)。程序員可直接、有效地控制系統(tǒng)硬件。形成的可執(zhí)行文件運行速度快、占用主存容量少。,返回本節(jié),返回本章,10,12數(shù)據(jù)編碼與運算,121各種進位計數(shù)制(1)十進制計數(shù)十進制數(shù)的基數(shù)為10,采用數(shù)字0、1、2、3、4、5、6、7、8、9共10個數(shù)碼來計數(shù)。每位數(shù)字的10K為該位數(shù)字的權(quán)。例795412107102+9101+5100+4101+1102+2103,返回本章,11,(2)二進制計數(shù)二進制數(shù)的基數(shù)為2,只有0、1兩個數(shù)碼,并遵循逢2進1的規(guī)則,它的各位權(quán)是以2K表示的。例1110012121+120+121+022+023+124N位二進制數(shù)可以表示2N個數(shù),例如3位二進制數(shù)可以表示8個數(shù),即000111。4位二進制數(shù)則表示16個數(shù),即00001111。,返回本節(jié),返回本章,12,(3)八進制和十六進制計數(shù)為便于閱讀及書寫,經(jīng)常使用八進制數(shù)和十六進制數(shù)來表示二進制數(shù)。八進制的基數(shù)為8,數(shù)碼為0、1、2、3、4、5、6、7。十六進制數(shù)的基數(shù)為16,數(shù)碼為0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。按同樣的方法,可以容易掌握八進制和十六進制的表示方法。十進制數(shù)結(jié)尾一般用D、二進制數(shù)用B、八進制數(shù)用O、十六進制數(shù)H。如117D、1010B,67O,1ABH,。,返回本節(jié),返回本章,13,122數(shù)制的轉(zhuǎn)換(1)十進制與二、八、十六進制間轉(zhuǎn)換將十進制數(shù)轉(zhuǎn)換成二、八、十六進制數(shù)的方法將數(shù)分成整數(shù)部分和小數(shù)部分,整數(shù)部分采用除基取余法,小數(shù)部分采用乘基取整法分別進行轉(zhuǎn)換。例76425D1001100011011B,商余數(shù)76÷238038÷219019÷2919÷2414÷2202÷2101÷201,乘積整數(shù)042520850008521701072141042080082161062121,,,返回本節(jié),返回本章,14,例將十進制數(shù)76125轉(zhuǎn)換成十六進制數(shù)。商余數(shù)乘積整數(shù)部分76÷164C(12)0125162024÷1604轉(zhuǎn)換結(jié)果為761254C2H,,,返回本節(jié),返回本章,15,將二、八、十六進制數(shù)轉(zhuǎn)換成十進制數(shù)的方法各位數(shù)碼與其對應(yīng)權(quán)的積再求和即為該進制數(shù)相對應(yīng)的十進制數(shù)。例10111B575DB56D7H2902839844D。計算過程10111B122+021+120+121+1224105025575DB56D7HB162+5161+6160+D161+71622816+80+6+08125+00273442902839844,返回本節(jié),返回本章,16,轉(zhuǎn)換過程1011110100111001B00010111101001110010B17A72HB56D7H10110101011011010111B,(2)二進制與八、十六進制間轉(zhuǎn)換將二進制數(shù)轉(zhuǎn)換成八(十六)進制數(shù)的方法一個二制數(shù)從小數(shù)點向兩個方向每3位4位劃為一組位數(shù)不夠補零,然后每組用八(十六)進制數(shù)表示就可以了。反之,把八(十六)進制數(shù)每一位用3位(4位)二進制數(shù)表示,就形成相應(yīng)的二進制數(shù)了。例1011110100111001B17A72HB56D7H10110101011011010111B,返回本節(jié),返回本章,17,123數(shù)據(jù)運算(1)二進制數(shù)運算二進制加法運算規(guī)則逢2進1。即0+0=00+1=11+0=11+1=0產(chǎn)生進位1二進制減法運算規(guī)則借1作2。即0-0=00-1=1產(chǎn)生借位11-0=11-1=0,返回本節(jié),返回本章,18,二進制乘法運算與十進制乘法運算類似即00=001=010=011=1(2)十六進制運算加法當(dāng)兩個一位數(shù)之和S小于16時,與十進制同樣處理,如果S大于或等于16,則應(yīng)用S16及進位1取代S。減法與十進制類似,夠減時可直接相減,不夠減時服從向高位借1為16的規(guī)則。乘法可用十進制乘法的規(guī)則來計算,但結(jié)果必須用十六進制數(shù)來表示。,返回本節(jié),返回本章,19,例,05C3H3D25H3D25H05C3H42E8H3762H05C3H00A1H05C3399E39FA3H,,,,,,,返回本節(jié),返回本章,20,13數(shù)據(jù)表示,131數(shù)值數(shù)據(jù)數(shù)值數(shù)據(jù)分為有符號數(shù)和無符號數(shù)。無符號數(shù)最高位表示數(shù)值,而有符號數(shù)最高位表示符號。有符號數(shù)有不同的編碼方式,常用的是補碼。,返回本章,21,(1)原碼最高位表示符號(正數(shù)用0,負數(shù)用1),其它位為該數(shù)的二進制數(shù)值,稱為有符號數(shù)的原碼表示。【例】X45D00101101BX原00101101BX45DX原10101101B原碼表示簡單易懂,但若是兩個異號數(shù)相加(或兩個同號數(shù)相減),就要做減法。為了把減法運算轉(zhuǎn)換為加法運算就引進了反碼和補碼。,返回本節(jié),返回本章,22,(2)反碼正數(shù)的反碼與原碼相同,符號位用0表示,數(shù)值位不變。負數(shù)的反碼符號位用1表示,數(shù)值位為原碼數(shù)值位按位取反形成,即0變1、1變0?!纠縓45D00101101B,X反00101101BX45DX反11010010B(3)補碼正數(shù)的補碼與原碼相同,即符號位用0表示,數(shù)值位不變。負數(shù)的補碼為反碼加1形成?!纠縓45D00101101BX補00101101BX45DX補11010011B,返回本節(jié),返回本章,23,(4)符號擴展在數(shù)據(jù)處理時,有時需要把8位二進制數(shù)擴展成16位二進制數(shù)。當(dāng)要擴展的數(shù)是無符號數(shù)時,可在最高位前擴展8個0。如果要擴展的數(shù)是補碼形式的有符號數(shù),那么就要進行符號位的擴展。符號擴展后,其結(jié)果仍是該數(shù)的補碼。,返回本節(jié),返回本章,24,(5)數(shù)據(jù)的表示范圍和大小N位二進制數(shù)能表示的無符號整數(shù)的范圍是0≤I≤2N1;N位二進制數(shù)能表示的有符號整數(shù)的范圍是2N1≤I≤2N11(6)補碼的加法和減法補碼的特性X補X補X補補碼的加法規(guī)則X+Y補X補+Y補補碼的減法規(guī)則XY補X補+Y補,返回本節(jié),返回本章,求補,求補,25,132字符數(shù)據(jù)(1)ASCII碼標(biāo)準(zhǔn)ASCII碼用7位二進制數(shù)編碼,共有128個。計算機存儲器基本單位為8位,ASCII碼的最高位通常為0,通信時,最高位用作奇偶校驗位。常用字符的ASCII碼數(shù)字0~930H~39H字母A~Z41H~5AH字母A~Z61H~7AH空格20H回車CR0DH換行LF0AH注意回車與換行的差別CR用來控制光標(biāo)回到當(dāng)前行的最左端;LF用來移動光標(biāo)到下一行,而所在列不變。,返回本節(jié),返回本章,26,(2)BCD碼雖然二進制數(shù)實現(xiàn)容易,但不符合人們的使用習(xí)慣,且書寫閱讀不方便,所以在計算機輸入輸出時通常還是采用十進制來表示數(shù),這就需要實現(xiàn)十進制與二進制間的轉(zhuǎn)換。為了轉(zhuǎn)換方便,常采用二進制編碼的十進制,簡稱為BCD碼。,返回本節(jié),返回本章,27,壓縮BCD碼以4個二進制位表示1個十進制位,用0000B~1001B表示0~9。例如,十進制數(shù)6429的壓縮BCD碼表示為0110010000101001B(即6429H)非壓縮BCD碼以8個二進制位表示1個十進制位,低4位與壓縮BCD碼相同,高4位無意義。例如,十進制數(shù)6429的非壓縮BCD碼表示為XXXX0110XXXX0100XXXX0010XXXX1001B有時,要求非壓縮BCD碼的高4位為0,這時,6429的非壓縮BCD碼為06040209H。,返回本節(jié),返回本章,28,1480X86CPU和寄存器組,計算機硬件中央處理單元CPU(INTEL80X86)對匯編語言程序員,最關(guān)心其中的寄存器存儲器(主存儲器)呈現(xiàn)給匯編語言程序員的,是存儲器地址外部設(shè)備(接口電路)匯編語言程序員看到的是端口(I/O地址),返回本章,29,14180X86CPU計算機執(zhí)行程序時,首先要將其裝入內(nèi)存,然后由CPU執(zhí)行程序指令。CPU的作用執(zhí)行算術(shù)與邏輯運算,控制指令的執(zhí)行。通常,將INTEL公司生產(chǎn)的8086/8088、80286、80386、80486、PENTIUM、PENTIUMPRO、PENTIUMII、PENTIUMIII、PENTIUM4及其兼容的CPU,統(tǒng)稱為80X86CPU或X86CPU,將基于這些CPU的計算機,稱為80X86計算機或X86計算機。其中,8086CPU是INTEL公司于1978年推出的16位微處理器,時鐘頻率為5MHZ,有16位數(shù)據(jù)信號線,20位地址信號線,可尋址的內(nèi)存地址空間為1MB。,返回本章,30,80X86CPU的3種工作模式1實模式與8086兼容的工作模式,只有低20位地址線起作用,僅能尋址第一個1MB的內(nèi)存空間。MSDOS運行在實模式下。2保護模式32位80X86CPU的主要工作模式,提供對程序和數(shù)據(jù)進行安全檢查的保護機制。WINDOWS9X/NT/2000運行在保護模式下。3虛擬8086模式在WINDOWS9X下,若打開一個MSDOS窗口,運行一個DOS應(yīng)用程序,那么該程序就運行在虛擬8086模式下。,返回本節(jié),返回本章,31,,14280X86寄存器組,8086寄存器組,返回本節(jié),返回本章,32,1.通用寄存器,(1)數(shù)據(jù)寄存器8位數(shù)據(jù)寄存器8個AL、AH、BL、BH、CL、CH、DL、DH。16位數(shù)據(jù)寄存器4個AX、BX、CX、DX。32位數(shù)據(jù)寄存器4個EAX、EBX、ECX、EDX。AL與AH、BL與BH、CL與CH、DL與DH分別對應(yīng)于AX、BX、CX和DX的低8位與高8位。AX、BX、CX和DX分別對應(yīng)于EAX、EBX、ECX和EDX的低16位。,返回本節(jié),返回本章,33,AX寄存器稱為累加器。使用頻度最高,用于算術(shù)、邏輯運算以及與外設(shè)傳送信息等。BX寄存器稱為基址寄存器。常用于存放存儲器地址。CX寄存器稱為計數(shù)器。一般作為循環(huán)或串操作等指令中的隱含計數(shù)器。DX寄存器稱為數(shù)據(jù)寄存器。常用來存放雙字?jǐn)?shù)據(jù)的高16位,或存放外設(shè)端口地址。,返回本節(jié),返回本章,34,變址和指針寄存器包括SI、DI、SP、BP4個16位寄存器和ESI、EDI、ESP、EBP4個32位寄存器,主要用于存放某個存儲單元的偏移地址。其中SI、DI、BP和SP分別對應(yīng)于ESI、EDI、EBP和ESP的低16位。。SI是源變址寄存器,DI是目的變址寄存器,在字符串操作中,SI和DI都具有自動增量或減量的功能。SP為堆棧指針寄存器,用于存放當(dāng)前堆棧段中棧頂?shù)钠频刂?;BP為基址指針寄存器,用于存放堆棧段中某一存儲單元的偏移地址。,(2)變址和指針寄存器,返回本節(jié),返回本章,35,2.段寄存器,80X86CPU的6個16位的段寄存器分別稱為代碼段寄存器CS,數(shù)據(jù)段寄存器DS,堆棧段寄存器SS,附加數(shù)據(jù)段寄存器ES及80386起增加的FS、GS兩個段寄存器。段寄存器用來確定該段在內(nèi)存中的起始地址。代碼段用來存放程序的指令序列。CS存放代碼段的段首址,指令指針寄存器IP指示代碼段中指令的偏移地址。,返回本節(jié),返回本章,36,3.指令指針,8086CPU中的16位指令指針I(yè)P,總是保存下一次將要從主存中取出的指令的偏移地址,偏移地址的值為該指令到所在段段首址的字節(jié)距離。在目標(biāo)程序運行時,IP的內(nèi)容由微處理器硬件自動設(shè)置,程序不能直接訪問IP,但一些指令卻可改變IP的值,如轉(zhuǎn)移指令、子程序調(diào)用指令等。EIP是80386起增加的32位指令寄存器,IP是EIP的低16位。,返回本節(jié),返回本章,37,4標(biāo)志寄存器,狀態(tài)標(biāo)志通常由CPU根據(jù)指令執(zhí)行結(jié)果自動設(shè)置,以反映指令執(zhí)行結(jié)果的特征。80X86CPU將狀態(tài)標(biāo)志作為條件判斷的依據(jù),以控制程序的執(zhí)行流程。FLAGS是8086CPU中一個很重要的16位標(biāo)志寄存器,它包含9個標(biāo)志位,主要用于保存一條指令執(zhí)行后,CPU所處狀態(tài)信息及運算結(jié)果的特征。主要包括條件標(biāo)志和狀態(tài)控制標(biāo)志。,返回本節(jié),返回本章,38,1.條件標(biāo)志,1零標(biāo)志ZF若運算結(jié)果為0,則ZF1,否則ZF0。2符號標(biāo)志SF若運算結(jié)果為負數(shù),則SF1,否則SF0。3進位標(biāo)志CF若加法時結(jié)果最高位向前有進位或減法時最高位向前有借位,則CF1,否則CF0。4溢出標(biāo)志OF若帶符號數(shù)的運算結(jié)果超出了補碼表示的范圍,則OF1,否則OF0。5輔助進位標(biāo)志AF若加法時結(jié)果低4位向前有進位或減法時結(jié)果低4位向前有借位,則AF1,否則AF0。6奇偶標(biāo)志PF若結(jié)果操作數(shù)中1的個數(shù)為偶數(shù),則PF1,否則PF0。,返回本節(jié),返回本章,39,深入認(rèn)識CF和OFCF和OF本質(zhì)上均表示溢出。CF表示無符號溢出,即運算結(jié)果超出了無符號數(shù)的表示范圍。對于N位二進制數(shù)來說,無符號數(shù)表示范圍為0~2N1,例如N8和16時分別為0~255和0~65535。OF表示帶符號溢出,即運算結(jié)果超出了帶符號數(shù)的表示范圍。對于N位二進制數(shù)來說,帶符號數(shù)表示范圍為2N1~2N11,例如,N8和16時,分別為128~127和32768~32767。,返回本節(jié),返回本章,40,2.狀態(tài)控制標(biāo)志,1方向標(biāo)志DF當(dāng)DF1時,每次操作后變址寄存器SI和DI減小,這樣使串處理從高地址向低地址方向處理;當(dāng)DF0時,則使SI和DI增大。2中斷允許標(biāo)志IF當(dāng)IF1時,允許CPU響應(yīng)可屏蔽中斷請求,否則關(guān)閉中斷。3追蹤標(biāo)志TF用于調(diào)試時的單步方式操作。當(dāng)TF1時,每條指令執(zhí)行完后產(chǎn)生陷阱,由系統(tǒng)控制計算機;當(dāng)TF0時,CPU正常工作,不產(chǎn)生陷阱。,返回本節(jié),返回本章,41,15存儲器和端口,151存儲器存儲器是計算機的記憶部件,用來存放程序和數(shù)據(jù)。按所在的位置,存儲器可以分成主存儲器和輔助存儲器。主存儲器存放當(dāng)前正在執(zhí)行的程序和使用的數(shù)據(jù),CPU可以直接存取,它由半導(dǎo)體存儲器芯片構(gòu)成,其成本高,容量小,但速度快。輔助存儲器可用來長期保存大量程序和數(shù)據(jù),CPU需要通過I/O接口訪問,它由磁盤或光盤構(gòu)成,其成本低,容量大,但速度較慢。,返回本章,42,152存儲器單元的地址和內(nèi)容計算機中信息的單位位(BIT)計算機中存儲信息的基本單位,可存儲一個二進制數(shù)0或1。字節(jié)(BYTE)8位二進制位。位編號從右到左為0~7,第0位為最低位,第7位為最高位。字(WORD)16位二進制位,2個字節(jié)。位編號從右到左為0~15,第0位為最低位,第15位為最高位。位0~7為低字節(jié),位8~15為高字節(jié)。雙字(DOUBLEWORD)32位二進制位,4個字節(jié)。位編號從右到左為0~31,第0位為最低位,第31位為最高位。位0~15為低字,位16~31為高字。,返回本節(jié),返回本章,43,左圖表明了存儲器中部分存儲單元存放信息情況。從圖可看到,地址為34560H的字節(jié)的存儲單元中的內(nèi)容是34H,而地址為34561H的字節(jié)存儲單元中的內(nèi)容是12H,表示為34560H34H34561H12H若從存儲單元中取一個詞,則高地址內(nèi)容在高字節(jié)。例34560H字1234H,,返回本節(jié),返回本章,存儲單元地址為了標(biāo)識和存取每一個存儲單元,給每個存儲單元規(guī)定一個編號,這就是存儲單元地址。在存儲器里以字節(jié)為單位存儲信息,一個字節(jié)有惟一的地址。存儲單元的內(nèi)容一個存儲單元中存放的信息稱為該存儲單元的內(nèi)容。,44,153物理地址的形成實模式下允許最大尋址空間為1MB。8086/8088CPU的地址線是20位的,這樣最大可尋址空間應(yīng)為2201MB,其物理地址范圍從00000H~FFFFFH。而8086CPU寄存器都是16位的。那么,這1MB空間如何用16位寄存器表達呢根據(jù)要求可把1M字節(jié)地址空間劃成若干邏輯段。每個邏輯段必須滿足兩個條件一是邏輯段的起始地址(簡稱段首址)必須是16的倍數(shù);二是邏輯段的最大長度為64KB。按照這兩個條件,1M字節(jié)地址空間最多可劃分成64K個邏輯段,最少也要劃分成16個邏輯段。邏輯段與邏輯段可以相連,也可以不連,還可以重疊。,返回本節(jié),返回本章,45,物理地址與邏輯地址物理地址內(nèi)存單元的實際地址,也就是出現(xiàn)在地址總線上的地址。邏輯地址分段地址段地址段內(nèi)偏移地址段地址表示段在內(nèi)存中的起始位置,通常被保存在某個段寄存器中。段內(nèi)偏移地址表示內(nèi)存單元相對于段起始位置的位移,簡稱偏移地址,也叫有效地址EA。段地址與偏移地址都是16位。系統(tǒng)采用下列方法將邏輯地址自動轉(zhuǎn)換為20位的物理地址物理地址段地址16偏移地址例邏輯地址為2E00H1246H物理地址2E00H161246H2E000H1246H2F246H每個內(nèi)存單元具有唯一的物理地址,但可由不同的邏輯地址描述。,返回本節(jié),返回本章,46,154端口對程序員來說,I/O接口電路由接口寄存器組成,為了區(qū)別它們,各個寄存器進行了編號,形成I/O地址。端口就是指I/O地址,是微機系統(tǒng)對I/O接口電路中與程序設(shè)計有關(guān)的寄存器的編號系統(tǒng)實際上就是通過這些端口與外設(shè)進行通訊的通常采用十六進制數(shù)來表達端口INTEL8086支持64K個8位端口其I/O地址可以表示為0000H~FFFFH,返回本節(jié),返回本章,47,本章小結(jié),匯編語言是機器語言的符號表示,與機器語言無本質(zhì)區(qū)別。計算機系統(tǒng)使用2進制表示數(shù)據(jù)。為了描述方便,書寫時常采用16進制形式。數(shù)值數(shù)據(jù)分無符號數(shù)和有符號數(shù)兩種。有符號數(shù)具有原碼、反碼和補碼三種編碼。以補碼表示的帶符號數(shù)在基于不同位數(shù)時,其二進制形式可能完全不同。字符數(shù)據(jù)常用編碼有ASCII碼和BCD碼。,返回本章,48,80X86計算機由CPU、內(nèi)存和I/O子系統(tǒng)三部分組成,各部分之間由系統(tǒng)總線相連。80X86程序可以存取的最小數(shù)據(jù)單位是字節(jié)。例如,若要讀取的位數(shù)不足8位,則只能先讀出一個完整字節(jié),再屏蔽掉其它位。字的存儲采取“低字節(jié)在低地址,高字節(jié)在高地址,字的地址由低地址表示”的方式,雙字也類似。要正確理解內(nèi)存單元的地址和值,地址表示位置,值是相應(yīng)位置處的內(nèi)容。同一地址既可以看作字節(jié)單元地址,也可以看作字甚至雙字單元地址,取決于具體的使用方式。,返回本章,49,80X86CPU具有8位、16位和32位寄存器。8位通用寄存器8個AH、AL、BH、BL、CH、CL、DH、DL。16位通用寄存器8個AX、BX、CX、DX、SI、DI、BP、SP。32位通用寄存器8個EAX、EBX、ECX、EDX、ESI、EDI、EBP、ESP。16位段寄存器6個CS、DS、SS、ES、FS、GS。32位/16位指令指針1個EIP/IP。32位/16位標(biāo)志寄存器1個EFLAGS/FLAGS。其中,32位寄存器是80386CPU開始引入的。,返回本章,50,80X86CPU有3種工作模式實模式、保護模式和虛擬8086模式。在實模式下,段地址和偏移地址均為16位。20位物理地址由16位段地址左移4位加16位偏移地址得到,只能尋址1MB的內(nèi)存空間,且每段≤64KB。在實模式、32位CPU下的程序可以使用32位寄存器和32位操作數(shù),但采用32位寄存器表示偏移地址時,只使用低16位,高16位為0。CSIP總是指向下一條要執(zhí)行的指令,EIP的高16位為0。SSSP指向堆棧段的棧頂,ESP的高16位為0。狀態(tài)標(biāo)志是CPU進行條件判斷和控制程序執(zhí)行流程的依據(jù),最常用的是4個CF、OF、SF和ZF。其中,CF表示無符號溢出,OF表示帶符號溢出。,返回本章,
下載積分: 6 賞幣
上傳時間:2024-01-05
頁數(shù): 51
大?。?0.45(MB)
子文件數(shù):
-
簡介:第一章概述第二章C語言的基本原理第三章C中對象的創(chuàng)建第四章面向?qū)ο蟮木幊碳夹g(shù)第五章C編程第六章編寫基于NET的應(yīng)用程序第七章使用ADONET訪問數(shù)據(jù),第八章創(chuàng)建基于WINDOWS的應(yīng)用程序第九章在C應(yīng)用程序中使用XMLWEBSERVICE第十章創(chuàng)建WEB應(yīng)用程序十一章應(yīng)用程序設(shè)置和部署十二章進階學(xué)習(xí)目標(biāo),C程序設(shè)計語言課程內(nèi)容,,C中對象的創(chuàng)建,內(nèi)容,類的定義聲明方法構(gòu)造函數(shù)使用類的靜態(tài)成員,C,學(xué)習(xí)完本節(jié)后,你將能夠定義類創(chuàng)建對象使用訪問修飾符定義類成員的作用域使用命名空間來組織類,類的定義31,萬物皆對象世間萬物皆為對象,狗、建筑、汽車對象都具有狀態(tài)和行為對象都有類型任何對象都是某個類的實例,是屬于某個類的對象阿土仔〉人類每個對象都利用別的對象來組建自己。汽車發(fā)動機輪胎方向盤剎車一只蛤蟆一張嘴,兩只眼睛四條腿換言之,你通過將已有的對象打成一個包,來創(chuàng)建新的對象。由此,你可以將程序的復(fù)雜性,隱藏在對象的簡單性之下,類和對象311,類和對象311,類是對象的模板,它定義了對象的公共屬性和行為(方法)。屬性和方法共同稱作類的成員對象是類的實例,是具體的對象必須使用NEW進行實例化才可以使用,類和對象311,,類對象人類(模板)阿土仔(具體化)姓名姓名阿土仔性別性別男使用卡片()使用“陷害卡”使用道具()使用“飛彈”,,,,,屬性,方法,類和對象311,類相對對象而言,類似于模板或藍圖包含方法和數(shù)據(jù),對象是類的實例使用關(guān)鍵字NEW創(chuàng)建對象具有狀態(tài)和行為,對象,,類,定義類和創(chuàng)建對象313,類是對象的模板,使用對象前必須先創(chuàng)建類語法,訪問修飾符CLASS類名{字段;//描述對象的狀態(tài)方法;//實現(xiàn)對象的行為構(gòu)造函數(shù);//初始化對象},定義類的字段313,字段是用來描述一個類的對象的狀態(tài)和特征的,如人的名字、性別、年齡等語法示例,訪問修飾符數(shù)據(jù)類型字段名缺省值,CLASSPEOPLE{PUBLICSTRINGNAME//姓名字段PUBLICSTRINGSEX//性別字段},定義類的方法313,方法是一組指令集合,用來實現(xiàn)一個類的對象的行為,如人會“使用工具”,獅子會“咬人”語法,訪問修飾符返回值類型方法名(參數(shù)){指令集合;//方法體}注意有關(guān)方法的詳細介紹,將在下一節(jié)給出,定義類的構(gòu)造函數(shù)313,構(gòu)造函數(shù)是一個特殊的方法,用來在創(chuàng)建對象時完成對象的初始化工作語法,訪問修飾符類名(參數(shù)){指令集合;//方法體}注意有關(guān)構(gòu)造函數(shù)的詳細介紹,將在下一節(jié)給出,定義類和創(chuàng)建對象313,示例一個簡單的類,只包含了幾個字段,CLASSPEOPLE{PUBLICSTRINGNAMEPUBLICSTRINGSEX},創(chuàng)建對象313,對象是類的實例,是具體的。要使用對象,必須使用關(guān)鍵字NEW實例化類的一個對象語法示例,NEW,PEOPLEOBJECT1NEWPEOPLE,使用對象313,實例化一個對象之后,就可以訪問和使用對象的字段和方法了(成員)。使用點取符來訪問成員示例,PEOPLEOBJECT1NEWPEOPLEOBJECT1NAME“阿土仔”O(jiān)BJECT1SEX“男”,,C中對象的創(chuàng)建,內(nèi)容,類的定義聲明方法構(gòu)造函數(shù)使用類的靜態(tài)成員,C,聲明方法32,學(xué)習(xí)完本章后,你將能夠編寫方法給方法傳遞參數(shù)使用REF引用參數(shù)使用OUT輸出參數(shù)重載方法,如何編寫方法321,語法,訪問修飾符返回值類型方法名(參數(shù)){指令集合;//方法體},如何編寫方法321,返回值是指當(dāng)方法執(zhí)行結(jié)束時,方法返回結(jié)果的數(shù)據(jù)類型。例如對2個整數(shù)進行求和的方法,其返回值類型就是整形如果方法沒有返回值,使用VOID關(guān)鍵字參數(shù)是可選的,表示傳遞給方法中要處理的數(shù)據(jù),例如對2個整數(shù)進行求和的方法,就需要2個整形的參數(shù)參數(shù)的聲明方法和變量一樣,如果有多個參數(shù),參數(shù)之間用,分開,如何編寫方法321,示例給類增加方法,CLASSPEOPLE{PUBLICSTRINGNAMEPUBLICSTRINGSEX//可以使用道具加害于人,此方法需要2個參數(shù),即道具和被加害人PUBLICVOIDUSETOOLSTRINGTOOL,PEOPLEO{CONSOLEWRITELINE“將{0}用于{1}”,TOOL,ONAME}},如何使用方法,示例方法也是類的成員,同樣使用點取符來訪問和使用,PEOPLEOBJECT1NEWPEOPLEOBJECT1NAME“阿土仔”O(jiān)BJECT1SEX“男”PEOPLEOBJECT2NEWPEOPLEOBJECT2NAME“孫小美”O(jiān)BJECT2SEX“女”//阿土仔投一顆飛彈給孫小美OBJECT1USETOOL“飛彈”,OBJECT2);//孫小美還阿土仔一枚臭彈OBJECT2USETOOL“臭彈”,OBJECT1,給方法傳遞參數(shù)322,當(dāng)調(diào)用方法時,傳遞參數(shù)的個數(shù)、數(shù)據(jù)類型、順序必須與方法簽名一致方法名方法的參數(shù)列表合稱為方法簽名,,CLASSSIMPLEMATH{PUBLICINTADDINTX,INTY{RETURNXY}}//調(diào)用方法時需要傳遞參數(shù)SIMPLEMATHSUMSNEWSIMPLEMATHINTTOTALSUMSADD20,30,定義類和創(chuàng)建對象,練習(xí),參閱教材P69頁課堂練習(xí)316,方法重載325,,在同一個類中可以定義多個方法,它們享有相同的名字,但是方法的參數(shù)不同,或者參數(shù)類型不同,或者參數(shù)個數(shù)不同,這就叫方法重載只有返回值類型不同,不是方法重載,會產(chǎn)生編譯時錯誤方法被調(diào)用時,系統(tǒng)會根據(jù)你提供的參數(shù)類型或參數(shù)個數(shù),幫你從多個方法中選擇正確的那個構(gòu)造方法也可以重載,思考題為什么使用方法重載你負責(zé)編寫一段打印程序,要打印的數(shù)據(jù)包括整型、浮點型、字符串類型、日期類型等等,且不同數(shù)據(jù)類型打印方法也不相同,怎么辦解決辦法只好為每一種數(shù)據(jù)類型編寫一個單獨的打印方法了PRINTINTPRINTFLOATPRINTSTRINGPRINTDATE,,方法重載325,思考題為什么使用方法重載呢更好的解決辦法使用一個公共的方法名PRINT,然后通過方法重載實現(xiàn)不同數(shù)據(jù)類型的打印PRINTINTIPRINTFLOATFPRINTSTRINGSPRINTDATED所有功能相似的方法共享同一個名字,更容易記憶,,方法重載325,示例重新編寫USETOOL方法,如果指定了被加害人,則將道具應(yīng)用于這一個人;否則將道具應(yīng)用于所有人,方法重載325,CLASSPEOPLE{//將道具應(yīng)用于指定的人PUBLICVOIDUSETOOLSTRINGTOOL,PEOPLEO{CONSOLEWRITELINE“將{0}用于{1}”,TOOL,ONAME}//將道具應(yīng)用于所有人PUBLICVOIDUSETOOLSTRINGTOOL{CONSOLEWRITELINE“將{0}用于所有人”,TOOL}},當(dāng)輸入三個///后,VSNET就會插入幾行XML代碼,可以為成員添加描述信息在代碼編輯器中,當(dāng)在對象名后面輸入“”操作符后,VSNET會顯示對象的成員列表,使用XML代碼注釋功能326,編寫和調(diào)用方法327,練習(xí),參見教材P81頁327課堂練習(xí),,C中對象的創(chuàng)建,內(nèi)容,類的定義聲明方法構(gòu)造函數(shù)使用類的靜態(tài)成員,C,構(gòu)造函數(shù)33,構(gòu)造函數(shù)是一個很特殊的方法(因為沒有返回值)。每個類都顯示或隱式的包涵一個構(gòu)造方法,用來初始化該類的一個新的對象構(gòu)造函數(shù)和類具有相同的名稱,且沒有返回值。構(gòu)造函數(shù)負責(zé)為對象分配內(nèi)存空間成員變量的初始化示例,CLASSPEOPLE{PUBLICSTRINGNAMEPUBLICSTRINGSEX//構(gòu)造函數(shù)PUBLICPEOPLE{SEX“男”}},如何初始化對象331,當(dāng)使用NEW創(chuàng)建一個新的對象時,CLR會自動調(diào)用構(gòu)造函數(shù)。示例,CLASSPEOPLE{PUBLICSTRINGNAMEPUBLICSTRINGSEX//構(gòu)造函數(shù)PUBLICPEOPLE{SEX“男”}}PEOPLEOBJNEWPEOPLE,,,,如何初始化對象331,如果沒有編寫構(gòu)造函數(shù),C會自動提供一個缺省的無參的構(gòu)造參數(shù)示例,CLASSPEOPLE{PUBLICSTRINGNAME}等價于CLASSPEOPLE{PUBLICSTRINGNAMEPUBLICPEOPLE{}},帶參數(shù)的構(gòu)造函數(shù)331,同其他方法一樣,構(gòu)造函數(shù)可以帶參數(shù)一旦我們定義了構(gòu)造函數(shù),C就不再提供缺省構(gòu)造函數(shù)示例,CLASSPEOPLE{PUBLICSTRINGNAME//帶參數(shù)的構(gòu)造函數(shù)PUBLICPEOPLESTRINGS{NAMES}}PEOPLEOBJNEWPEOPLE“阿土仔”PEOPLEOBJNEWPEOPLE//編譯錯誤,重載構(gòu)造函數(shù)332,構(gòu)造函數(shù)也可以重載,這樣就能夠以多種方式創(chuàng)建對象示例,CLASSPEOPLE{PUBLICSTRINGNAME//無參的構(gòu)造函數(shù)PUBLICPEOPLE{SEX“男”}//帶參數(shù)的構(gòu)造函數(shù)PUBLICPEOPLESTRINGS{NAMES}}PEOPLEOBJ1NEWPEOPLE“阿土仔”PEOPLEOBJ2NEWPEOPLE,使用初始化列表332,思考題為什么使用初始化列表,CLASSPEOPLE{PUBLICSTRINGNAMEPUBLICINTAGEPUBLICPEOPLE//構(gòu)造函數(shù)0{NAME“UNKNOW”AGE0}PUBLICPEOPLESTRINGSNAME//構(gòu)造函數(shù)1{NAMESNAMEAGE0}PUBLICPEOPLESTRINGSNAME,INTTHEAGE//構(gòu)造函數(shù)2{NAMESNAMEAGETHEAGE}},,使用初始化列表332,多個重載的構(gòu)造函數(shù)常常很相似,大量重復(fù)代碼將公共代碼集中于一個構(gòu)造函數(shù)中,由構(gòu)造函數(shù)調(diào)用示例,CLASSPEOPLE{PUBLICSTRINGNAMEPUBLICINTAGEPUBLICPEOPLETHIS“UNKNOW”,0//構(gòu)造函數(shù)0{}PUBLICPEOPLESTRINGSNAMETHISSNAME,0//構(gòu)造函數(shù)1{}PUBLICPEOPLESTRINGSNAME,INTTHEAGE//構(gòu)造函數(shù)2{NAMESNAMEAGETHEAGE}},THIS關(guān)鍵字,THIS是一個特殊的引用(指針),它指向的是“自己”,也就是當(dāng)前對象THIS的作用點取成員區(qū)分同名變量將當(dāng)前對象(自己)作為參數(shù),傳遞給其他對象的方法作為方法名表示構(gòu)造方法,THIS關(guān)鍵字,CLASSPEOPLE{PUBLICSTRINGNAMEPUBLICINTAGEPUBLICPEOPLESTRINGNAME,INTAGE{NAMENAMETHISNAMENAMETHISAGEAGE},示例使用THIS區(qū)分同名變量,使用構(gòu)造函數(shù)333,練習(xí),參見教材P86頁333課堂練習(xí),,C中對象的創(chuàng)建,內(nèi)容,類的定義聲明方法構(gòu)造函數(shù)使用類的靜態(tài)成員,C,使用類的靜態(tài)成員34,類可以具有靜態(tài)的成員,如靜態(tài)字段、靜態(tài)方法使用STATIC關(guān)鍵字修飾靜態(tài)成員相當(dāng)于“全局”的,不依賴于某一個具體的對象,類的靜態(tài)字段341,STATIC修飾類的字段時,在一個類中只開辟一塊內(nèi)存空間存儲,并在類的所有對象實例間共享,因此STATIC變量也稱為類變量,CLASSCAT{STRINGNAMESTATICSTRINGFOOD},,,,,1NAME,2NAME,3NAME,4NAME,FOOD,類的靜態(tài)字段341,STATIC變量不依賴于具體對象,因此直接通過類名訪問,而不是通過類的對象實例訪問的非靜態(tài)變量必須首先實例化類的一個對象,再通過對象訪問,因此也稱為實例變量,CLASSCAT{STRINGNAMESTATICSTRINGFOOD},STATICVOIDMAIN{CATFOOD“FISH”//OKCATNAME“KITTY”//錯誤CATCAT1NEWCATCAT1NAME“KITTY”//OK},類的靜態(tài)字段341,STATIC變量類似于C語言的全局變量由于在所有的對象間共享,因此可以用于對象之間的通信思考題怎樣統(tǒng)計被創(chuàng)建的CAT對象的總數(shù),CLASSCAT{PUBLICSTATICINTCOUNTPUBLICSTRINGNAMEPUBLICCAT{COUNT}},,,,,,1CAT1,2CAT2,3CAT3,4CAT4,COUNT4,類的靜態(tài)方法341,STATIC修飾的方法稱為靜態(tài)方法,是一個類的全局方法靜態(tài)方法也叫作類方法,類名方法名沒有STATIC修飾的方法叫實例方法,對象名方法名注意事項STATIC方法中不能直接使用非靜態(tài)成員,因為非靜態(tài)成員與實例相關(guān),但可以通過對象點取間接使用STATIC方法中不能使用THIS(與實例相關(guān))非STATIC方法中可以使用靜態(tài)成員,使用類的靜態(tài)成員343,練習(xí),參見教材P91頁343課堂練習(xí),使用命名空間組織類314,NET框架類庫提供了幾百個類供程序員使用,程序員也可以創(chuàng)建自己的類如此眾多的類該如何管理呢就如同硬盤上的文件需要文件夾來組織,也可以將功能相似或相關(guān)的類組織到一起,這就是命名空間NAMESPACE如果有多個類重名(不同的程序員開發(fā)),可以將類組織到不同的命名空間,以避免命名沖突,使用命名空間組織類314,如同硬盤上的文件夾可以包含子文件夾一樣,一個命名空間可以再包含命名空間,形成嵌套層次硬盤上文件夾間層次用\表示,命名空間的層次用表示C\WINDOWS\SYSTEM32\INDEXHTMLNAMESPACESUBNAMESPACECLASS如SYSTEMIOFILENAMESPACENAMESPACECLASS,,,,使用命名空間組織類314,創(chuàng)建命名空間嵌套的命名空間,NAMESPACEMICROSOFT{CLASSPEOPLE{}},NAMESPACEMICROSOFT{NAMESPACESALES{PUBLICCLASSPEOPLE{}}}//或者NAMESPACEMICROSOFTSALES{},使用命名空間組織類314,使用完全限定的名字使用USING指定類所在的命名空間,PEOPLEOBJNEWPEOPLE//錯誤MICROSOFTSALESPEOPLEOBJNEWMICROSOFTSALESPEOPLE//OK,USINGSYSTEMUSINGMICROSOFTSALESPEOPLEOBJNEWPEOPLE//OK,在NET框架類庫中的類是通過一個命名空間層次結(jié)構(gòu)來進行組織管理的常見命名空間,NET框架類庫命名空間,,面向?qū)ο笮g(shù)語,類對象字段方法構(gòu)造方法命名空間,對象的模板,軟件的藍圖類的實例,使用NEW實例化描述對象的狀態(tài)體現(xiàn)對象的行為為一個新的對象賦初值組織相關(guān)的類,,,,,,,面向?qū)ο缶幊叹褪恰袄邸卑?小憩片刻,
下載積分: 6 賞幣
上傳時間:2024-01-05
頁數(shù): 53
大?。?0.25(MB)
子文件數(shù):
-
簡介:基于R語言的PLS算法的實現(xiàn)及研究,目錄,使用的開發(fā)工具偏最小二乘的設(shè)計思想基于R語言、MATLAB的偏最小二乘的實現(xiàn)通徑分析測定系數(shù)實驗分析,使用的開發(fā)工具,R語言R是用于統(tǒng)計分析、繪圖的語言和操作環(huán)境。它是一個用于統(tǒng)計計算和統(tǒng)計制圖的優(yōu)秀工具。MATLAB它是一種以矩陣運算為基礎(chǔ)的交互式程序語言。它作為一種編程語言和可視化工具,可解決工程、科學(xué)計算和數(shù)學(xué)學(xué)科中許多問題。,偏最小二乘回歸法,最小二乘,偏最小二乘,1數(shù)目較少2無多重共線性3各解釋變量與反應(yīng)變量之間的關(guān)系易于解釋,1在自變量存在嚴(yán)重多重共線性時可以進行回歸建模;2在樣本點個數(shù)比變量個數(shù)維數(shù)明顯過少時可以進行回歸建模;3PLS模型可以識別系統(tǒng)信息與噪聲;4PLS模型中,每一個自變量的回歸系數(shù)容易解釋;5PLS最終回歸模型中包含原有的所有自變量。,偏最小二乘回歸法,算法的設(shè)計思想,,①兩組潛變量分別最大程度承載自變量與因變量的變異信息;②二者之間的協(xié)方差最大化相關(guān)程度最大。,算法的設(shè)計思想,提取多少個主成分最合適,交叉性檢驗,,,00975,實例分析(基于MATLAB),實例分析,在TESTPLS01M文件中添加下列幾行代碼。以下計算決定系數(shù)的R2SSTSUMPPZ,10MU1,102SSRSUMCH0PPZ,19XISHMU1,102RRSSR/SST,得到復(fù)測定系數(shù)為R20927,由表可知,當(dāng)我們主成分取三個,才能更好的擬合方程,擬合結(jié)果如下Y0091602229X102167X200964X300292X401552X510706X658149X700155X800194X9,實例分析(基于R),(1)PLS包的安裝以及載入INSTALLPACKAGES“PLS“LIBRARYPLS,(2)數(shù)據(jù)的導(dǎo)入C1C2SUMMARYPLS1,WHAT“ALL“顯示回歸結(jié)果包括PRESS與變異解釋度其中,VALIDATION“LOO“表示使用留一交叉驗證計算PRESS,JACKKNIFETRUE,表示使用JACKKNIFE法估計回歸系數(shù)方差為后面的顯著性檢驗做準(zhǔn)備.在沒給定成分個數(shù)的情況下,會默認(rèn)使用所有的主成分進行回歸,因此我們需要在選擇的成分個數(shù)盡可能小的前提下,選擇使PRESS最小或幾乎不變的成分個數(shù).假設(shè)選定了成分個數(shù)為M,重新進行回歸,并對回歸系數(shù)假設(shè)檢驗。,其中CV即為不同主成分個數(shù)對應(yīng)的PRESS(殘差值),ADJCV為調(diào)整后的PRESS。TRAININGVARIANCEEXPLAINED一欄為主成分對各變量的累積貢獻率.由結(jié)果可知,主成分個數(shù)為4個時,模型在經(jīng)過留一交叉驗證法后求得的PRESS總和最小,隨著成分個數(shù)的增加,PRESS值也沒有太大改變,并且4個成分對各個因變量的累積貢獻率也基本達到了穩(wěn)定,因此定下回歸的成分個數(shù)M4.,,(5)指定主成分個數(shù)之后,進行第二次線性曲線擬合,最后求出因變量和自變量的相關(guān)系數(shù)。根據(jù)成分?jǐn)?shù)M4,建立最終模型PLS2COEFPLS2得到回歸系數(shù),,4COMPS,表1因變量與自變量之間的標(biāo)準(zhǔn)回歸系數(shù),Y10147022336X10106558962X20100451920X30104259945X40059733499X50605248435X60478575361X70008575145X80015589996X9以此類推Y2,Y3,Y4,Y5,Y6,Y7,通徑分析,概念多元線性回歸系數(shù)間不能直接比較各因子間的效應(yīng)大小,因為各回歸系數(shù)間都帶有不同的量綱,再者多變量的關(guān)系中,往往都不是獨立的,有的還要研究XI通過XJ對因變量Y的影響,而通徑系數(shù)就能有效的表示相關(guān)變量間原因?qū)Y(jié)果的直接影響或間接影響的效應(yīng),從而區(qū)分因子的相對重要性及其關(guān)系。作用通徑分析(PATHANALYSIS)可用于分析多個自變量與因變量之間的線性關(guān)系,是回歸分析的拓展,可以處理較為復(fù)雜的變量關(guān)系。如當(dāng)自變量數(shù)目比較多,且自變量間相互關(guān)系比較復(fù)雜(如有些自變量間的關(guān)系是相關(guān)關(guān)系,有些自變量間則可能是因果關(guān)系)或者某些自變量是通過其他的自變量間接地對應(yīng)變量產(chǎn)生影響,這時可以采用通徑分析。,通徑分析,思路通徑分析在多元回歸的基礎(chǔ)上將相關(guān)系數(shù)分解為直接通徑系數(shù)某一自變量對因變量的直接作用和間接通徑系數(shù)該自變量通過其他自變量對因變量的間接作用。通徑分析的理論已證明,任一自變量XI與因變量Y之間的簡單相關(guān)系數(shù)RIYXI與Y之間的直接通徑系數(shù)PIY所有XI與Y的間接通徑系數(shù),任一自變量XI對Y的間接通徑系數(shù)相關(guān)系數(shù)RIJ通徑系數(shù)PIJ。,實例分析,運用SPSS軟件做逐步回歸得到通徑系數(shù)。運用SPSS軟件只需要“ANALYZEREGRESSIONLINEAR”這一個程序就可以獲得通徑系數(shù)。我們現(xiàn)在以數(shù)據(jù)表1中藥量效關(guān)系為例,建立線性回歸方程并計算通徑系數(shù),2用MATLAB通過偏最小二乘回歸計算得到通徑系數(shù),測定系數(shù),通過兩種方法的到的結(jié)果如下表,結(jié)論,方法一利用SPSS的逐步回歸得到直接通徑系數(shù)后刪除變量提高方程的擬合效果沒有作用,反而使得R2值下降了,方法二基于MATLAB的偏最小二乘回歸得到直接通徑系數(shù)后刪除變量對方程的擬合效果具有提高的作用,這個實驗說明了篩選變量對方程的擬合效果是具有重要意義的。,謝謝觀看,
下載積分: 6 賞幣
上傳時間:2024-01-05
頁數(shù): 18
大?。?0.33(MB)
子文件數(shù):
-
簡介:C語言程序設(shè)計基礎(chǔ)篇,第1章C語言概述,2024年3月17日,課程教學(xué)目標(biāo),以C語言為平臺,介紹程序設(shè)計的思想和方法。通過學(xué)習(xí),使學(xué)生不但掌握高級編程語言的知識、編程技術(shù)和基本算法,更重要的是掌握程序設(shè)計的思想和方法,具備利用計算機求解實際問題的基本能力,能靈活應(yīng)用高級語言進行程序設(shè)計。,2024年3月17日,教學(xué)內(nèi)容與教學(xué)環(huán)節(jié),教學(xué)內(nèi)容包括“程序設(shè)計”和“語言知識”兩部分,在教學(xué)過程中被分為若干個主題,以程序設(shè)計做為貫穿各主題的主線。對教學(xué)內(nèi)容的詳細描述見教學(xué)大綱。課程教學(xué)環(huán)節(jié)包括課堂教學(xué)、課外自學(xué)、上機實踐、答疑討論和考核。,2024年3月17日,教學(xué)環(huán)節(jié),(1)課堂教學(xué)教師通過案例分析,重點講解程序設(shè)計的思想和方法,輔以必要的語言知識介紹。(2)課外自學(xué)學(xué)生根據(jù)自己的實際情況,自主學(xué)習(xí)不同層次的學(xué)習(xí)資料。(3)上機實踐學(xué)生必須完成大量的上機練習(xí),包括基本訓(xùn)練(自測作業(yè)和主題作業(yè))和綜合訓(xùn)練大型作業(yè)通過大型作業(yè),從而達到在實踐中掌握知識,培養(yǎng)程序設(shè)計能力的目的。,2024年3月17日,本課程學(xué)習(xí)分三個階段,基礎(chǔ)篇5周第1章C語言概述第2章C語言簡單程序設(shè)計㈠順序、選擇控制結(jié)構(gòu)第3章C語言簡單程序設(shè)計㈡循環(huán)控制結(jié)構(gòu)第4章數(shù)組第5章算法,2024年3月17日,本課程學(xué)習(xí)分三個階段,基礎(chǔ)篇5周進階篇7周第1章數(shù)據(jù)類型與輸入輸出(二)第2章運算符和表達式第3章函數(shù)(一)第4章預(yù)編譯與C程序工程文件期中測試第5章指針(一)第6章數(shù)組(二),2024年3月17日,本課程學(xué)習(xí)分三個階段,基礎(chǔ)篇5周進階篇7周提高篇5周第1章指針與函數(shù)(2)第2章結(jié)構(gòu)體第3章文件第4章位運算,C語言程序設(shè)計基礎(chǔ)篇,第1章C語言概述,2024年3月17日,11C語言簡介111程序設(shè)計語言的發(fā)展,第一代機器語言是一種CPU機器語言。由數(shù)字0、1組合而成。優(yōu)點機器可直接執(zhí)行,速度快。缺點程序長,難記,難理解,不易查錯。第二代匯編語言用助記符描述的指令系統(tǒng)。如MOVAX,BP4PUSHDL優(yōu)點比機器語言較易理解,執(zhí)行速度快。缺點難度大,非專業(yè)人士難以掌握。,2024年3月17日,111程序設(shè)計語言的發(fā)展,第三代面向過程的高級語言或稱算法語言。如FORTRAN,BASIC,PASCAL,C等等。優(yōu)點靈活,易于理解,容易查錯。缺點對大型程序而言維護性較差,對“擬定”好的程序難以擴充,修改(所謂牽一而動百)。第四代非過程化的高級語言是一種面向?qū)ο蟮脑O(shè)計語言,如C,JAVA等等。優(yōu)點靈活、易于理解、維護、修改、擴充。缺點掌握難度較大。第五代可視化多媒體程序設(shè)計工具。具有面向?qū)ο蟮乃枷耄鏥ISUALC,VISUALBASIC,DELPHE等等。,2024年3月17日,112C語言發(fā)展過程,1960年出現(xiàn)了ALGOL60語言。1967年,MATINRICHARDS對CPL進行改進、簡化、推出了BCPL。1970年,美國貝爾實驗室KENTHOMSON以BCPL為基礎(chǔ),再次簡化推出了B語言,并寫了第一個UNIX系統(tǒng)。1972年美國貝爾實驗室DMRITCHIE在B語言基礎(chǔ)上設(shè)計出了C語言,并用其將UNIX系統(tǒng)全部改寫并實現(xiàn)。經(jīng)進一步改進,至1977年出現(xiàn)了與具體機器無關(guān)的C編譯文本,從而使C語言廣泛應(yīng)用,各種機器皆可使用。,2024年3月17日,112C語言發(fā)展過程,1978年,美國BRAINWKERNIGHAN與DENNISMRITCHIE聯(lián)合出版一書THECPROGRAMMINGLANGUAGE成為ANSIC之基礎(chǔ)。1983年,美國標(biāo)準(zhǔn)化協(xié)會ANSI制定了ANSIC。以ANSIC為基礎(chǔ)不同機器有不同版本,尤其是函數(shù)均應(yīng)參考相應(yīng)的機器。C語言的編譯環(huán)境有多種,如DOS/WINDOWS平臺BORLAND/TURBOC,MICROSOFTC等UNIX/LINUX平臺GNUC,2024年3月17日,112C語言發(fā)展過程,在C的基礎(chǔ)上,一九八三年又由貝爾實驗室推出了C。C進一步擴充和完善了C語言,成為一種面向?qū)ο蟮某绦蛟O(shè)計語言。C是C的基礎(chǔ),C語言和C語言在很多方面是兼容的。因此,掌握了C語言,再進一步學(xué)習(xí)C就能以一種熟悉的語法來學(xué)習(xí)面向?qū)ο蟮恼Z言,從而達到事半功倍的目的。,2024年3月17日,12C語言的特點,應(yīng)用面廣C語言是一種過程化的語言。既可編寫系統(tǒng)軟件如DOS、WINDOWS、UNIX;又可編寫應(yīng)用軟件。,2024年3月17日,12C語言的特點,簡潔、緊湊、方便、表達能力強32個關(guān)鍵字,9種控制語句,主要用小寫字母。,2024年3月17日,12C語言的特點,運算符豐富共有34種運算符。除了最基本的+、-、、÷、等運算外,還將括號、賦值、類型強制轉(zhuǎn)換等均作為運算符。數(shù)據(jù)類型豐富,結(jié)構(gòu)化程度高除基本類型外,有指針,結(jié)構(gòu)體、共同體等類型。語法嚴(yán)格,靈活如數(shù)據(jù)類型可相互通用整型、字符型通用。,2024年3月17日,12C語言的特點,可與機器硬件打交道直接訪問內(nèi)存地址,具有“高”、“低”級語言的功能。生成目標(biāo)代碼質(zhì)量高,執(zhí)行效率高。語言簡潔,可移植性好可移植性優(yōu)于匯編語言。,2024年3月17日,13簡單的C程序介紹,為了更好、更快地掌握C程序,我們先看幾個C語言程序【例11】HELLO,WORLDINCLUDEINTMAIN{PRINTF“HELLO,WORLD\N“RETURN0},運行結(jié)果HELLO,WORLD,2024年3月17日,【例12】加法,/EXAMPLEFORADDPROGRAM/INCLUDEINTMAIN{INTA,B,SUM/這是定義變量/A123B456/給變量賦值/SUMAB/求兩個數(shù)之和/PRINTF“ABD\N“,SUMRETURN0},運行結(jié)果AB579,2024年3月17日,【例13】求兩數(shù)中較大者,/EXAMPLEFORFUNCTIONPROGRAM/INCLUDEINTMAXINTX,INTY/對形參X、Y作類型定義/{INTZ/MAX函用到的變量Z,也要加以定義/ZYIFXYZXRETURNZ/將Z的值返回,通過MAX帶回調(diào)用處/}INTMAIN/主函數(shù)/{INTA,B,C/定義變量/SCANF“D,D“,/輸入變量A和B的值/CMAXA,B/調(diào)用MAX函數(shù),將得到的值賦給C/PRINTF“MAXD\N“,C/輸出C的值/RETURN0},運行結(jié)果12,34MAX34,2024年3月17日,通過實例,初步看到C的程序結(jié)構(gòu),C程序全部由一個一個的函數(shù)構(gòu)成。至少有且僅有一個主函數(shù)MAIN,也稱為主程序,其內(nèi)容在其后的一對花括號{}內(nèi),其它函數(shù)可被主函數(shù)調(diào)用或相互調(diào)用。其它函數(shù)可為C函數(shù)庫中函數(shù),也可為用戶定義的函數(shù)。,2024年3月17日,一個函數(shù)有兩部分組成函數(shù)的首部,即函數(shù)的第一行。包括函數(shù)名、函數(shù)類型、函數(shù)參數(shù)形參名和參數(shù)類型。INTMAXINTX,INTY↓↓↓↓↓↓函數(shù)類型函數(shù)名參數(shù)類型參數(shù)名參數(shù)類型參數(shù)名一個函數(shù)名后面必須跟一對圓括弧,函數(shù)參數(shù)可以沒有,如MAIN。,2024年3月17日,一個函數(shù)有兩部分組成函數(shù)體,即函數(shù)首部下面的大括弧{}內(nèi)的部分。如果一個函數(shù)內(nèi)有多個大括弧,則最外層的一對{}為函數(shù)體的范圍。函數(shù)體一般包括聲明部分在這部分中定義所用到的變量,如果需要,也要對所調(diào)用的函數(shù)進行聲明。執(zhí)行部分有若干個語句組成。在某些情況下也可以沒有聲明部分,甚至可以既無聲明部分,也無執(zhí)行部分。如DUMP{},2024年3月17日,一個C程序總是從MAIN函數(shù)開始執(zhí)行的,而不論MAIN函數(shù)在整個程序中的位置如何MAIN函數(shù)可以放在程序最前頭,也可以放在程序的最后面,或在一些函數(shù)之前,在另一些函數(shù)之后。C程序書寫格式自由,一行也可以寫幾個語句,一個語句可以寫在多行上。但為了程序的閱讀和理解,C程序書寫需按照某些書寫規(guī)則,稍后將介紹。,2024年3月17日,每個語句和數(shù)據(jù)定義的最后必須有一個分號。C語言本身沒有輸入、輸出語句。輸入和輸出的操作是由庫函數(shù)SCANF和PRINTF等函數(shù)來完成??梢杂?/對C程序中的任何部分作注釋。,2024年3月17日,為便于閱讀,養(yǎng)成良好的程序書寫風(fēng)格,每一對{}上下對齊;每一對{}都對應(yīng)于段首和段尾;每一行只寫一條語句;每一對{}內(nèi)的語句左對齊;不同的語句段采用縮進格式以示區(qū)別;關(guān)鍵語句要有注釋。,C語言程序?qū)嵗CAPACHEHTTP服務(wù)器源代碼片段,INCLUDE“APRH“INCLUDE“APR_STRINGSH“INCLUDE“APR_GETOPTH“INCLUDE“APR_GENERALH“INCLUDE“APR_LIBH“INCLUDE“APR_MD5H“DEFINEAPR_WANT_STDIODEFINEAPR_WANT_STRFUNCINCLUDE“APR_WANTH“DEFINECORE_PRIVATEINCLUDE“AP_CONFIGH“INCLUDE“HTTPDH“INCLUDE“HTTP_MAINH“INCLUDE“HTTP_LOGH“INCLUDE“HTTP_CONFIGH“INCLUDE“HTTP_COREH“INCLUDE“HTTP_VHOSTH“INCLUDE“APR_URIH“INCLUDE“UTIL_EBCDICH“INCLUDE“AP_MPMH“INCLUDE“MPM_COMMONH“/WARNINGWIN32BINDSHTTP_MAINCDYNAMICALLYTOTHESERVERPLEASEPLACEEXTERNFUNCTIONSANDGLOBALDATAINANOTHERAPPROPRIATEMODULEMOSTSIGNIFICANTMAINGLOBALDATACANBEFOUNDINHTTP_CONFIGC/,STATICVOIDSHOW_MPM_SETTINGSVOID{INTMPM_QUERY_INFOAPR_STATUS_TRETVALPRINTF“SERVERMPMS\N“,AP_SHOW_MPMRETVALAP_MPM_QUERYAP_MPMQ_IS_THREADED,IFRETVALAPR_SUCCESS{PRINTF“THREADED“IFMPM_QUERY_INFOAP_MPMQ_DYNAMIC{PRINTF“YESVARIABLETHREADCOUNT\N“}ELSEIFMPM_QUERY_INFOAP_MPMQ_STATIC{PRINTF“YESFIXEDTHREADCOUNT\N“}ELSE{PRINTF“NO\N“}}RETVALAP_MPM_QUERYAP_MPMQ_IS_FORKED,IFRETVALAPR_SUCCESS{PRINTF“FORKED“IFMPM_QUERY_INFOAP_MPMQ_DYNAMIC{PRINTF“YESVARIABLEPROCESSCOUNT\N“}ELSEIFMPM_QUERY_INFOAP_MPMQ_STATIC{PRINTF“YESFIXEDPROCESSCOUNT\N“}ELSE{PRINTF“NO\N“}}},INTMAININTARGC,CONSTCHARCONSTARGV{CHARCINTCONFIGTESTONLY0CONSTCHARCONFNAMESERVER_CONFIG_FILECONSTCHARDEF_SERVER_ROOTHTTPD_ROOTCONSTCHARTEMP_ERROR_LOGNULLCONSTCHARERRORPROCESS_RECPROCESSSERVER_RECSERVER_CONFAPR_POOL_TPGLOBALAPR_POOL_TPCONFAPR_POOL_TPLOG/POOLOFLOGSTREAMS,RESET_AFTER_EACHREADOFCONF/APR_POOL_TPTEMP/POOLFORTEMPORARYCONFIGSTUFF,RESETOFTEN/APR_POOL_TPCOMMANDS/POOLFORD,CANDCSWITCHES/APR_GETOPT_TOPTAPR_STATUS_TRVMODULEMODCONSTCHAROPTARGAPR_OPTIONAL_FN_TYPEAP_SIGNAL_SERVERSIGNAL_SERVERAP_MONCONTROL0/TURNOFFPROFILINGOFSTARTUP/APR_APP_INITIALIZEPROCESSCREATE_PROCESSARGC,ARGVPGLOBALPROCESSPOOLPCONFPROCESSPCONFAP_SERVER_ARGV0PROCESSSHORT_NAMEIFAPR_CHARSET_EBCDICIFAP_INIT_EBCDICPGLOBALAPR_SUCCESS{DESTROY_AND_EXIT_PROCESSPROCESS,1}ENDIF,APR_POOL_CREATEAPR_POOL_TAGPCOMMANDS,“PCOMMANDS“AP_SERVER_PRE_READ_CONFIGAPR_ARRAY_MAKEPCOMMANDS,1,SIZEOFCHARAP_SERVER_POST_READ_CONFIGAPR_ARRAY_MAKEPCOMMANDS,1,SIZEOFCHARAP_SERVER_CONFIG_DEFINESAPR_ARRAY_MAKEPCOMMANDS,1,SIZEOFCHARERRORAP_SETUP_PRELINKED_MODULESPROCESSIFERROR{AP_LOG_ERRORAPLOG_MARK,APLOG_STARTUP|APLOG_EMERG,0,NULL,“SS“,AP_SERVER_ARGV0,ERRORDESTROY_AND_EXIT_PROCESSPROCESS,1}AP_RUN_REWRITE_ARGSPROCESS/MAINTAINAP_SERVER_BASEARGSLISTINHTTP_MAINHTOALLOWTHEMPMTOSAFELYPASSONOURARGSFROMITSREWRITE_ARGSHANDLER/APR_GETOPT_INITWHILERVAPR_GETOPTOPT,AP_SERVER_BASEARGS,SWITCHC{CASECNEWCHARAPR_ARRAY_PUSHAP_SERVER_POST_READ_CONFIGNEWAPR_PSTRDUPPCOMMANDS,OPTARGBREAKCASECNEWCHARAPR_ARRAY_PUSHAP_SERVER_PRE_READ_CONFIGNEWAPR_PSTRDUPPCOMMANDS,OPTARGBREAK,CASEDDEF_SERVER_ROOTOPTARGBREAKCASEDNEWCHARAPR_ARRAY_PUSHAP_SERVER_CONFIG_DEFINESNEWAPR_PSTRDUPPCOMMANDS,OPTARG/SETTINGDDUMP_VHOSTSISEQUIVALENTTOSETTINGS/IFSTRCMPOPTARG,“DUMP_VHOSTS“0CONFIGTESTONLY1/SETTINGDDUMP_MODULESISEQUIVALENTTOSETTINGM/IFSTRCMPOPTARG,“DUMP_MODULES“0CONFIGTESTONLY1BREAK}}/BADCMDLINEOPTIONTHENWEDIE/IFRVAPR_EOF||OPTINDARGC{USAGEPROCESS}APR_POOL_CREATEAPR_POOL_TAGPLOG,“PLOG“APR_POOL_CREATEAPR_POOL_TAGPTEMP,“PTEMP“/NOTETHATWEPREFLIGHTTHECONFIGFILEONCEBEFOREREADINGIT_AGAIN_INTHEMAINLOOPTHISALLOWSTHINGS,LOGFILESCONFIGURATIONFOREXAMPLE,TOSETTLEDOWN/,AP_SERVER_ROOTDEF_SERVER_ROOTIFTEMP_ERROR_LOG{AP_REPLACE_STDERR_LOGPROCESSPOOL,TEMP_ERROR_LOG}SERVER_CONFAP_READ_CONFIGPROCESS,PTEMP,CONFNAME,IFSERVER_CONF{DESTROY_AND_EXIT_PROCESSPROCESS,1}IFAP_RUN_PRE_CONFIGPCONF,PLOG,PTEMPOK{AP_LOG_ERRORAPLOG_MARK,APLOG_STARTUP|APLOG_ERR,0,NULL,“PRECONFIGURATIONFAILED“DESTROY_AND_EXIT_PROCESSPROCESS,1}RVAP_PROCESS_CONFIG_TREESERVER_CONF,AP_CONFTREE,PROCESSPCONF,PTEMPIFRVOK{AP_FIXUP_VIRTUAL_HOSTSPCONF,SERVER_CONFAP_FINI_VHOST_CONFIGPCONF,SERVER_CONFAPR_HOOK_SORT_ALLIFCONFIGTESTONLY{AP_RUN_TEST_CONFIGPCONF,SERVER_CONFAP_LOG_ERRORAPLOG_MARK,APLOG_STARTUP,0,NULL,“SYNTAXOK“DESTROY_AND_EXIT_PROCESSPROCESS,0}}APR_POOL_LOCKPCONF,0DESTROY_AND_EXIT_PROCESSPROCESS,0RETURN0/TERMINATIONOK/},2024年3月17日,14C程序的上機步驟,目前流行的C語言有以下幾種MICROSOFTCBORLANDCGNUC這些C語言版本不僅實現(xiàn)了ANSIC標(biāo)準(zhǔn),而且在此基礎(chǔ)上各自作了一些擴充,使之更加方便、完美。,2024年3月17日,MICROSOFTVISUALC60使用簡介,新建項目PROJECT新建文件C語言程序編輯文件編譯連接運行調(diào)試,2024年3月17日,MICROSOFTVISUALC60使用簡介,桌面快捷方式,新建項目打開FILE菜單,點擊NEW菜單項。,,新建項目選擇PROJECTS為WIN32CONSOLEAPPLICATION,輸入項目名稱,及選擇項目文件存放的目錄,然后點OK按鈕,,,,新建項目選擇CONSOLEAPPLICATION的類型為ANEMPTYPROJECT,然后點FINISH按鈕。,,新建項目點OK按鈕,系統(tǒng)將按照前面選擇的類型創(chuàng)建一個新的項目。,新建C源程序打開FILE菜單,點擊NEW菜單項,彈出NEW對話框。選擇FILES類型為CSOURCEFILE,文件名FILE的擴展名為C,如下圖中為SAMPLEC,其他項目不要改變。,,,輸入C源程序在下圖中的文件編輯窗口中輸入C語言源程序。,,編譯、連接和運行C程序點工具條上的按鈕,系統(tǒng)提示是否BUILD,點是Y按鈕開始編譯、連接,創(chuàng)建可執(zhí)行程序,并運行程序。,,,程序運行結(jié)果如果程序正確,編譯、連接后將自動運行程序。圖中的CONSOLE窗口中顯示了程序運行結(jié)果,按任何鍵關(guān)閉該窗口。,修改程序錯誤當(dāng)程序存在錯誤,編譯、連接過程將停止,并將錯誤信息顯示在信息窗口中。雙擊錯誤信息,光標(biāo)將跳到發(fā)生錯誤的語句。,,,
下載積分: 6 賞幣
上傳時間:2024-01-07
頁數(shù): 44
大?。?0.24(MB)
子文件數(shù):
-
簡介:1,第2章C語言數(shù)據(jù)及數(shù)據(jù)運算,2,第2章C語言數(shù)據(jù)及數(shù)據(jù)運算,21C語言中的常量22C語言中的變量23C語言的數(shù)據(jù)類型24C語言的運算符及表達式25數(shù)據(jù)類型轉(zhuǎn)換26如何輸入數(shù)據(jù)27如何輸出數(shù)據(jù)28數(shù)據(jù)運算及數(shù)據(jù)輸入、輸出程序?qū)嵗?9小結(jié),3,21C語言中的常量,211定義C語言常量212什么是符號常量,4,211定義C語言常量,常量是在內(nèi)存中開辟有固定值的空間,常量的意思就是不可改變的量,是一個常數(shù)。常量在程序中經(jīng)常直接出現(xiàn),例如123、3.14159、‘A’、“COMPUTER”,5,212什么是符號常量,常量定義是指定義符號常量,用一個標(biāo)識符來代表一個常量,通過宏定義預(yù)處理指令來實現(xiàn)。格式DEFINE標(biāo)識符常量【例21】輸出圓的面積,通過它可簡單說明常量的用法。,6,22C語言中的變量,221C語言變量的定義222C語言變量的命名223C語言變量賦值224C語言變量的作用域225C語言變量的EXTERN聲明方式,7,221C語言變量的定義,變量是用標(biāo)識符標(biāo)識且在程序運行過程中允許被改變的量。定義變量的一般形式是TYPEVARIABLE_LIST,8,222C語言變量的命名,符合標(biāo)識符的命名規(guī)則。C變量名中字母可大小寫,但有大小寫之分,SUM、SUM被視為不同的變量。在實際應(yīng)用中命名應(yīng)盡量見名知義。,9,223C語言變量賦值,在C語言里,使用等號“”進行變量的賦值,把等號右邊的變量值賦給等號左邊的變量名。例如SUM20【例22】實現(xiàn)變量的賦值和初始化,通過它說明變量的定義和變量的賦值可以分開進行。,10,224C語言變量的作用域,C語言中變量的作用域有局部和全局之分。變量的作用域決定了程序中的哪些語句可以使用它。1.局部作用域?qū)τ诰哂芯植孔饔糜虻淖兞?,只是在變量本身的函?shù)里可以訪問它們,也就是局部變量。【例23】定義變量自加函數(shù)ADD,并在MAIN函數(shù)中調(diào)用ADD函數(shù),通過變量NUM在ADD函數(shù)和MAIN函數(shù)的值的不同,來對變量的局部作用域進行說明。2.全局作用域?qū)τ诰哂腥肿饔糜虻淖兞浚梢栽诔绦虻娜魏挝恢迷L問它們。當(dāng)一個變量是在所有函數(shù)的外部聲明,也就是在程序的開頭聲明,那么這個變量就是全局變量?!纠?4】定義變量自加的函數(shù)ADD,并在MAIN函數(shù)中調(diào)用ADD函數(shù),通過變量NUM在ADD函數(shù)和MAIN函數(shù)中的輸出,可說明變量如何作用于全局。,11,225C語言變量的EXTERN聲明方式,EXTERN來聲明外部變量,以擴展外部變量的作用域?!纠?5】實現(xiàn)兩個整數(shù)的加法運算,通過在MAIN函數(shù)用到EXTERN變量,輸出相加結(jié)果來說明EXTERN聲明變量的用法。,12,23C語言的數(shù)據(jù)類型,231整型數(shù)據(jù)232實型數(shù)據(jù)233字符型數(shù)據(jù),13,231整型數(shù)據(jù),整型數(shù)據(jù)主要分為整型常量和整型變量兩類。整型常量整型常量就是整常數(shù),可以用3種進制形式表示(1)十進制數(shù)以非0數(shù)字開頭的數(shù),其每個數(shù)字位可以是09。例如123,123(2)八進制數(shù)以數(shù)字0開頭的數(shù),其每個數(shù)字位可以是07。例如0123,0123(3)十六進制數(shù)以0X(或0X)開頭的數(shù),其每個數(shù)字位可以是0~9、A~F(或A~F)。,14,231整型數(shù)據(jù),整型變量一個整型變量用來保存整數(shù)。整型變量分為基本型、短整型、長整型、無符號整型、無符號短整型和無符號長整型6類。【例26】定義整型變量A、短整型變量B、長整型變量C和無符號長整型變量S。并通過給這4個變量賦值,同時相加求和,來說明整型變量的定義和引用。,15,232實型數(shù)據(jù),實型數(shù)據(jù)主要分為實型常量和實型變量兩類實型常量實型常量在C語言中又稱為實數(shù)或浮點數(shù)。它通常是帶有小數(shù)點的,或者帶有指數(shù)的,又或者既帶小數(shù)點又帶指數(shù)的十進制數(shù)。它有兩種表示形式(1)十進制形式。這種形式的數(shù)由整數(shù)部分、小數(shù)點和小數(shù)部分組成。例如112,0225,2340,100,00(2)指數(shù)形式。這種形式由3部分組成實數(shù)部分、字母E或E和整數(shù)部分。例如5X10(30)可以表示為5E30或5E30,16,232實型數(shù)據(jù),實型變量C語言中實型變量分單精度(FLOAT型)和雙精度(DOUBLE型)兩類。如表22所示,在TURBOC中單精度型占4個字節(jié)(32位)內(nèi)存空間。雙精度型占8個字節(jié)(64位)內(nèi)存空間?!纠?7】求圓面積、周長和體積。分別定義了單精度型變量和雙精度型變量,對變量賦值并引用。這個例子說明了實型變量的定義和引用方法?!纠?8】對實型變量求和,并通過求和結(jié)果的輸出,對實型數(shù)據(jù)的舍入誤差進行說明。,17,233字符型數(shù)據(jù),字符型數(shù)據(jù)包括字符常量和字符變量兩類。字符常量C語言中的字符常量是用單引號“’”括起來的一個字符。例如‘A’、’A’、’’、’3’字符型變量字符型變量用來存放單個字符,因此占用一個字節(jié)的內(nèi)存空間。字符值是以ASCII碼的形式存放在變量的內(nèi)存單元之中的。【例210】分別以整數(shù)和字符型數(shù)輸出字符,通過它說明字符型變量的定義和引用。,18,24C語言的運算符及表達式,241什么是運算符和表達式242賦值相關(guān)的運算符及表達式243算術(shù)運算相關(guān)的運算符及表達式244關(guān)系運算相關(guān)的運算符及表達式245邏輯運算相關(guān)的運算符及表達式246條件運算相關(guān)的運算符及表達式247逗號運算符及逗號表達式248C語言的運算符優(yōu)先級,19,241什么是運算符和表達式,用于代表各種運算的符號即運算符。可以簡單地將表達式理解為用于計算的公式,它由運算符(例如/)、運算量(也稱操作數(shù),可以是常量,也可以是變量)和括號組成。,20,242賦值相關(guān)的運算符及表達式,C語言中賦值運算符有“”、“”、“–”、“?”、“/”和“”。用賦值運算符將運算對象連接而成的表達式稱為賦值表達式。,21,243算術(shù)運算相關(guān)的運算符及表達式,C語言中算術(shù)運算符有“”、“”、“”、“/”、“”、“”和“”。算術(shù)表達式的值是一個數(shù)值,具體的數(shù)據(jù)類型由運算符和操作數(shù)決定。,22,244關(guān)系運算相關(guān)的運算符及表達式,C語言中比較兩個量的運算符稱為關(guān)系運算符。關(guān)系運算符都是二元運算符,其結(jié)合性均為左結(jié)合。關(guān)系運算符的優(yōu)先級低于算術(shù)運算符,高于賦值運算符。C語言中關(guān)系運算符有6種“”、“”、“”、“”。,23,245邏輯運算相關(guān)的運算符及表達式,C語言提供了3種邏輯運算符“【例213】實現(xiàn)了利用SCANF函數(shù)輸入數(shù)據(jù)的操作。通過這段代碼演示了SCANF的一般格式。,32,262字符數(shù)據(jù)輸入,GETCHAR函數(shù)的功能是從鍵盤上輸入一個字符。通常把輸入的字符賦予一個字符變量,構(gòu)成賦值語句。其一般形式為GETCHAR【例214】是一個輸入單個字符的例子;【例215】是利用GETCHAR函數(shù)達到暫停效果的例子;【例216】演示了輸入3個小寫字母,輸出其ASCII碼和相應(yīng)大寫字母。通過這3個例子,簡單介紹函數(shù)GETCHAR的用法。,33,27如何輸出數(shù)據(jù),271一般數(shù)據(jù)的格式化輸出272字符數(shù)據(jù)的輸出,34,271一般數(shù)據(jù)的格式化輸出,PRINTF函數(shù)是格式化輸出函數(shù),一般用于向標(biāo)準(zhǔn)輸出設(shè)備按規(guī)定格式輸出信息。在編寫程序時經(jīng)常會用到此函數(shù)。PRINTF函數(shù)的一般形式為PRINTF格式控制,輸出項列表【例217】通過PRINTF函數(shù)輸出數(shù)據(jù)。通過這段代碼說明PRINTF的一般格式?!纠?18】是一個用PRINTF函數(shù)輸出整型、實型和字符型數(shù)據(jù)的例子。,35,272字符數(shù)據(jù)的輸出,PUTCHAR函數(shù)是字符輸出函數(shù),其功能是在顯示器上輸出單個字符。其一般形式為PUTCHARA//輸出大寫字母APUTCHARA//輸出字符變量A的值【例219】是一個利用PUTCHAR函數(shù)輸出字符和轉(zhuǎn)義字符的例子。通過它簡單介紹PUTCHAR函數(shù)的用法。,36,28數(shù)據(jù)運算及數(shù)據(jù)輸入、輸出程序?qū)嵗?【例220】用號輸出字母C的圖案。程序分析可先用“”號在紙上寫出字母C,找出它的特點,再分行輸出?!纠?21】從鍵盤輸入華氏溫度,在屏幕上輸出相應(yīng)的攝氏溫度。程序分析轉(zhuǎn)換計算公式是攝氏溫度華氏溫度325/9。【例222】輸入球體半徑R,計算球的體積V和表面積S。程序分析計算球體表面積和體積的公式為球體表面積S4314RR,體積V4/3314RRR。,37,29小結(jié),本章主要介紹數(shù)據(jù)類型、變量和常量、運算符和表達式、輸入輸出等最基本也是最重要的概念。C語言中的基本數(shù)據(jù)類型包括整型、單精度浮點型、雙精度浮點型和字符型。整型分為短整型、整型、長整型,每種整型又可分為有符號型和無符號型。單精度浮點型和雙精度浮點型變量可以存儲實數(shù),但雙精度型取值范圍要比單精度型大的多。字符型變量可以存儲單個字符,其值是該字符的ASCII碼。C語言中定義了豐富的運算符,如算數(shù)運算符、邏輯運算符、關(guān)系運算符等等。由運算符和操作數(shù)連接起來的式子是表達式。這些表達式是編程計算的最基本要素。C語言本身沒有輸入輸出功能,而是通過輸入輸出函數(shù)(SCANF、PUTCHAR、PRINTF和GETCHAR)完成I/O操作。,
下載積分: 6 賞幣
上傳時間:2024-01-05
頁數(shù): 37
大小: 0.09(MB)
子文件數(shù):
-
簡介:第3章ADS開發(fā)環(huán)境和ARM匯編語言,2,主要內(nèi)容,31ADS開發(fā)環(huán)境311ADS軟件組成介紹312使用ADS創(chuàng)建工程313用AXD進行代碼調(diào)試32ARM匯編程序設(shè)計,3,31ADS開發(fā)環(huán)境,在這一節(jié)里,將介紹ARM開發(fā)軟件ADSARMDEVELOPERSUITE。通過學(xué)習(xí)如何在CODEWARRIORIDE集成開發(fā)環(huán)境下編寫,編譯一個工程的例子,使讀者能夠掌握在ADS軟件平臺下開發(fā)和調(diào)試ARM匯編程序。本節(jié)內(nèi)容311ADS軟件組成介紹312使用ADS創(chuàng)建工程313用AXD進行代碼調(diào)試,4,311ADS軟件組成介紹,ARMADS全稱為ARMDEVELOPERSUITE。是ARM公司推出的新一代ARM集成開發(fā)工具?,F(xiàn)在ADS的最新版本是12,它取代了早期的ADS11和ADS10。它除了可以安裝在WINDOWSNT4,WINDOWS2000,WINDOWS98和WINDOWS95操作系統(tǒng)下,還支持WINDOWSXP和WINDOWSME操作系統(tǒng)。ADS由命令行開發(fā)工具,ARM時實庫,GUI開發(fā)環(huán)境CODEWARRIOR和AXD,實用程序和支持軟件組成。有了這些部件,用戶就可以為ARM系列的RISC處理器編寫和調(diào)試自己的開發(fā)應(yīng)用程序了。,5,311命令行開發(fā)工具,ADS提供下面的命令行開發(fā)工具ARMCCARMC編譯器,默認(rèn)工具ARMCPPARMC編譯器TCCTHUMBC編譯器TCPPTHUMBC編譯器ARMASMARM和THUMB的匯編器ARMLINKARM連接器ARMSDARM和THUMB的符號調(diào)試器,6,312ARM運行時庫,ANSIC庫函數(shù)這個C函數(shù)庫是由以下幾部分組成1在ISOC標(biāo)準(zhǔn)中定義的函數(shù);2在SEMIHOSTED環(huán)境下SEMIHOSTING是針對ARM目標(biāo)機的一種機制,它能夠根據(jù)應(yīng)用程序代碼的輸入/輸出請求,與運行有調(diào)試功能的主機通訊。這種技術(shù)允許主機為通常沒有輸入和輸出功能的目標(biāo)硬件提供主機資源用來實現(xiàn)C庫函數(shù)的與目標(biāo)相關(guān)的函數(shù);3被C和C編譯器所調(diào)用的支持函數(shù)。ARMC庫提供了額外的一些部件支持C,并為不同的結(jié)構(gòu)體系和處理器編譯代碼。C庫函數(shù)包含由ISOC庫標(biāo)準(zhǔn)定義的函數(shù)。,7,庫路徑,庫路徑是在ADS軟件安裝路徑的LIB目錄下ARMLIB和CPPLIB的兩個子目錄。與這些庫相應(yīng)的頭文件安裝在\ADSV1_2\INCLUDE目錄下環(huán)境變量ARMLIB必須被設(shè)置成指向庫路徑。另外一種指定ARMC和ARMC庫路徑的方法是,在鏈接的時候使用操作選項LIBPATHDIRECTORYDIRECTORY代表庫所在的路徑,來指明要裝載的庫的路徑。無需對ARMLIB和CPPLIB這兩個庫路徑分開指明,鏈接器會自動從用戶所指明的庫路徑中找出這兩個子目錄。,8,313GUI開發(fā)環(huán)境CODEWARRIOR和AXD,CODEWARRIORFORARM是一套完整的集成開發(fā)工具,充分發(fā)揮了ARMRISC的優(yōu)勢,使產(chǎn)品開發(fā)人員能夠很好的應(yīng)用尖端的片上系統(tǒng)技術(shù)該工具是專為基于ARMRISC的處理器而設(shè)計的,它可加速并簡化嵌入式開發(fā)過程中的每一個環(huán)節(jié),使得開發(fā)人員只需通過一個集成軟件開發(fā)環(huán)境就能研制出ARM產(chǎn)品,在整個開發(fā)周期中,開發(fā)人員無需離開CODEWARRIOR開發(fā)環(huán)境,因此節(jié)省了在操做工具上花的時間,使得開發(fā)人員有更多的精力投入到代碼編寫上來,CODEWARRIOR集成開發(fā)環(huán)境IDE為管理和開發(fā)項目提供了簡單多樣化的圖形用戶界面。用戶可以使用ADS的CODEWARRIORIDE為ARM和THUMB處理器開發(fā)用C,C,或ARM匯編語言的程序代碼。,9,3132ADS調(diào)試器,調(diào)試器本身是一個軟件,用戶通過這個軟件使用DEBUGAGENT可以對包含有調(diào)試信息的,正在運行的可執(zhí)行代碼進行比如變量的查看,斷點的控制等調(diào)試操作。ADS中包含有3個調(diào)試器1AXDARMEXTENDEDDEBUGGERARM擴展調(diào)試器;2ARMSDARMSYMBOLICDEBUGGERARM符號調(diào)試器;3DEBUGTARGETAXD可以在WINDOWS和UNIX下,進行程序的調(diào)試。它為用C,C,和匯編語言編寫的源代碼提供了一個全面的WINDOWS和UNIX環(huán)境。,10,314ADS實用程序,FROMELF這是ARM映像文件轉(zhuǎn)換工具。該命令將ELF格式的文件作為輸入文件,將該格式轉(zhuǎn)換為各種輸出格式的文件,包括PLAINBINARYBIN格式映像文件,MOTOROLA32BITSRECORDFORMATMOTOROLA32位S格式映像文件,INTELHEX32FORMATINTEL32位格式映像文件,和VERILOGLIKEHEXFORMATVERILOG16進制文件。ARMARARM庫函數(shù)生成器將一系列ELF格式的目標(biāo)文件以庫函數(shù)的形式集合在一起,用戶可以把一個庫傳遞給一個鏈接器以代替幾個ELF文件。FLASHDOWNLOADER用于把二進制映像文件下載到ARM開發(fā)板上的FLASH存儲器的工具,11,315ADS支持的軟件,ADS為用戶提供下面的軟件,使用戶可以在軟件仿真的環(huán)境下或者在基于ARM的硬件環(huán)境調(diào)試用戶應(yīng)用程序。ARMULATOR這是一個ARM指令集仿真器,集成在ARM的調(diào)試器AXD中,它提供對ARM處理器的指令集的仿真,為ARM和THUMB提供精確的模擬。用戶可以在硬件尚未做好的情況下,開發(fā)程序代碼。,12,32使用ADS創(chuàng)建工程,321建立一個工程在CODEWARRIOR中新建一個工程的方法有兩種,可以在工具欄中單擊“NEW”按鈕,也可以在“FILE”菜單中選擇“NEW”菜單。這樣就會打開一個如圖所示的對話框。,13,提供了7種可選擇的工程類型,ARMEXECUTABLIMAGE用于由ARM指令的代碼生成一個ELF格式的可執(zhí)行映像文件;ARMOBJECTLIBRARY用于由ARM指令的代碼生成一個ARMAR格式的目標(biāo)文件庫;EMPTYPROJECT用于創(chuàng)建一個不包含任何庫或源文件的工程;MAKEFILEIMPORTERWIZARD用于將VISUALC的NMAKE或GNUMAKE文件轉(zhuǎn)入到CODEWARRIORIDE工程文件;THUMBARMEXECUTABLEIMAGE用于由ARM指令和THUMB指令的混和代碼生成一個可執(zhí)行的ELF格式的映像文件;THUMBEXECUTABLEIMAGE用于由THUMB指令創(chuàng)建一個可執(zhí)行的ELF格式的映像文件;THUMBOBJECTLIBRARY用于由THUMB指令的代碼生成一個ARMAR格式的目標(biāo)文件庫。在這里選擇ARMEXECUTABLEIMAGE,在“PROJECTNAME”中輸入工程文件名,點擊“LOCATION”文本框的“SET”按鈕,瀏覽選擇想要將該工程保存的路徑,將這些設(shè)置好后,點擊“確定”即可。,14,這個時候會出現(xiàn)LEDCIRCLEMCP的窗口,如圖82所示,有三個標(biāo)簽頁,分別為FILES,LINKORDER,TARGET默認(rèn)的是顯示第一個標(biāo)簽頁FILES。通過在該標(biāo)簽頁點擊鼠標(biāo)右鍵,選中“ADDFILES”可以把要用到的源程序添加到工程中。,,15,對于本例,由于所有的源文件都還沒有建立,所以首先需要新建源文件。在“FILE”菜單中選擇“NEW”,在打開的如圖81所示的對話框中,選擇標(biāo)簽頁FILE,在FILENAME中輸入要創(chuàng)建的文件名,輸入“HELLOWORLDS”,點擊“確定”關(guān)閉窗口。在這里還有一個細節(jié)。在建立好一個工程時,默認(rèn)的TARGET是DEBUGREL,還有另外兩個可用的TARGET,分別為REALSE和DEBUG,這三個TARGET的含義分別為DEBUGREL使用該目標(biāo),在生成目標(biāo)的時候,會為每一個源文件生成調(diào)試信息;DEBUG使用該目標(biāo)為每一個源文件生成最完全的調(diào)試信息;RELEASE使用該目標(biāo)不會生成任何調(diào)試信息。在本例中,使用默認(rèn)的DEBUGREL目標(biāo)。,16,322編譯和鏈接工程前的配置,點擊EDIT菜單,選擇“DEBUGRELSETTINGS”本課程實驗程序都使用默認(rèn)配置即可更多詳細配置說明請看“ARMADS集成開發(fā)環(huán)境的使用DOC”,17,33用AXD進行代碼調(diào)試,AXDARMEXTENDEDDEBUGGER是ADS軟件中獨立于CODEWARRIORIDE的圖形軟件,打開AXD軟件,默認(rèn)是打開的目標(biāo)是ARMULATOR。這個也是調(diào)試的時候最常用的一種調(diào)試工具,本節(jié)主要是結(jié)合ARMULATOR介紹在AXD中進行代碼調(diào)試的方法和過程,使讀者對AXD的調(diào)試有初步的了解。,18,編譯,調(diào)試,運行,,19,調(diào)試過程中查看內(nèi)存數(shù)據(jù)情況,,20,調(diào)試過程中查看寄存器數(shù)據(jù)情況,,21,,提綱,1,3,2,ARM微處理器指令的分類,ARM微處理器指令的尋址方式,32ARM指令分類及尋址方式,ARM微處理器指令的條件域,22,ARM微處理器的指令系統(tǒng),ARM微處理器的指令集是加載/存儲型的,也即指令集僅能處理寄存器中的數(shù)據(jù),而且處理結(jié)果都要放回寄存器中,而對系統(tǒng)存儲器的訪問則需要通過專門的加載/存儲指令來完成。ARM微處理器的指令集可以分為六大類跳轉(zhuǎn)指令數(shù)據(jù)處理指令程序狀態(tài)寄存器(PSR)處理指令加載/存儲指令協(xié)處理器指令和異常產(chǎn)生指令,ARM微處理器指令的分類,23,ARM微處理器指令表1,ARM微處理器指令的分類,24,ARM微處理器指令表2,ARM微處理器指令的分類,25,ARM微處理器指令表3,ARM微處理器指令的分類,26,ARM微處理器指令表4,ARM微處理器指令的分類,27,ARM微處理器指令表5,ARM微處理器指令的分類,28,指令的條件域,當(dāng)處理器工作在ARM狀態(tài)時,幾乎所有的指令均根據(jù)CPSR中條件碼的狀態(tài)和指令的條件域有條件的執(zhí)行。當(dāng)指令的執(zhí)行條件滿足時,指令被執(zhí)行,否則指令被忽略。每一條ARM指令包含4位的條件碼,位于指令的最高4位3128。條件碼共有16種,每種條件碼可用兩個字符表示,這兩個字符可以添加在指令助記符的后面和指令同時使用。例如,跳轉(zhuǎn)指令B可以加上后綴EQ變?yōu)锽EQ表示“相等則跳轉(zhuǎn)”,即當(dāng)CPSR中的Z標(biāo)志置位時發(fā)生跳轉(zhuǎn)。,ARM微處理器指令的條件域,29,指令的條件域表1,ARM微處理器指令的條件域,30,指令的條件域表2,ARM微處理器指令的條件域,31,ARM指令的尋址方式,ARM指令系統(tǒng)支持如下幾種常見的尋址方式立即尋址寄存器尋址寄存器間接尋址基址變址尋址多寄存器尋址相對尋址堆棧尋址,ARM微處理器指令的尋址方式,32,ARM指令系統(tǒng),詳見常用ARM指令集及匯編PDF,33,例子ARM程序設(shè)計,ARM匯編選擇排序詳見示例程序EXAMPLE/ADS_EXAMPLE/選擇排序/SELECTSORTARM匯編冒泡排序詳見示例程序EXAMPLE/ADS_EXAMPLE/冒泡排序/BUBBLESORT其他示例,
下載積分: 6 賞幣
上傳時間:2024-01-05
頁數(shù): 33
大?。?1.09(MB)
子文件數(shù):
-
簡介:2007年度語言文字工作會議簡介3538,報告人鄭澤之2007年3月16日,
下載積分: 6 賞幣
上傳時間:2024-01-05
頁數(shù): 16
大?。?0.28(MB)
子文件數(shù):
-
簡介:51程序設(shè)計語言511程序設(shè)計語言的分類,1機器語言第一代語言2匯編語言第二代語言3高級語言第三代語言4第四代語言,51程序設(shè)計語言512程序設(shè)計語言的選擇,對高級語言選擇需綜合考慮以下幾個方面的因素來決定。(1)系統(tǒng)的應(yīng)用領(lǐng)域(2)軟件執(zhí)行環(huán)境(3)用戶要求(4)程序編寫人員目前具備的知識,52程序設(shè)計風(fēng)格521程序內(nèi)部的文檔,1標(biāo)識符標(biāo)識符的選擇不僅要滿足各種程序設(shè)計語言的語法限制,更重要的是名字要有鮮明的含義,使它能正確的表達它所代表的程序?qū)ο蟮膶嶋H意義,以便于閱讀者理解程序。,52程序設(shè)計風(fēng)格521程序內(nèi)部的文檔,2注釋一類是出現(xiàn)在模塊首部的序言性注釋,它簡要描述了模塊的全名、模塊的功能和性能、主要算法、接口特點、重要的數(shù)據(jù)、調(diào)用格式、開發(fā)歷史。另一類注釋是插在整個程序的中間,在每個具有獨立功能的程序段之前的功能性注釋,它是用以描述下面的這段程序的功能,也就是解釋下面所要做的工作是什么,或是執(zhí)行了下面語句后會產(chǎn)生怎樣的結(jié)果。,52程序設(shè)計風(fēng)格521程序內(nèi)部的文檔,3視覺組織(1)利用空行將自然的程序段分開(2)利用縮進形成階梯式層次結(jié)構(gòu),52程序設(shè)計風(fēng)格522數(shù)據(jù)說明,(1)數(shù)據(jù)說明次序標(biāo)準(zhǔn)化。數(shù)據(jù)說明語句應(yīng)集中放在每個程序或模塊的可執(zhí)行部分之前,而且為了數(shù)據(jù)屬性更容易尋找,有利于測試、糾錯和維護,應(yīng)將數(shù)據(jù)說明的次序固定下來。(2)當(dāng)多個變量名在同一個語句中說明時,應(yīng)該按字母順序排列這些變量。(3)對于一個復(fù)雜的數(shù)據(jù)結(jié)構(gòu),則應(yīng)加注釋,以說明用程序設(shè)計語言實現(xiàn)時的方法和特點;對容易混淆又不方便改變的變量名,也應(yīng)加注釋,說明變量名的作用以示區(qū)別。,52程序設(shè)計風(fēng)格523語句構(gòu)造,(1)不要為了節(jié)省空間而把多個語句寫在一行上。(2)避免使用否定的邏輯條件。(3)使用括號使邏輯表達式或算術(shù)表達式的運算次序更清晰。(4)避免使用臨時變量而使可讀性下降。(5)充分利用庫函數(shù)。,52程序設(shè)計風(fēng)格523語句構(gòu)造,(6)避免大量使用循環(huán)嵌套和條件嵌套。(7)避免不必要的轉(zhuǎn)移和使用GOTO語句。(8)盡量用公用過程或子程序去代替重復(fù)的功能代碼段。(9)按照初始化、數(shù)據(jù)處理、結(jié)果輸出順序安排程序。,52程序設(shè)計風(fēng)格524輸入和輸出,1輸入方面1采用統(tǒng)一的輸入格式,力求輸入格式簡單。2對所有的輸入數(shù)據(jù)進行有效性檢驗,從而識別錯誤的輸入。3檢查輸入項重要組合的合法性。4使用數(shù)據(jù)結(jié)束標(biāo)志或文件結(jié)束標(biāo)志終止一批數(shù)據(jù)的輸入。5用統(tǒng)一方式對待文件結(jié)束條件。,52程序設(shè)計風(fēng)格524輸入和輸出,6輸入數(shù)據(jù)時允許使用自由格式輸入,也允許使用默認(rèn)值。7設(shè)計交互式輸入方式時,應(yīng)明確提示輸入請求,詳細說明可選擇數(shù)值類型和范圍等有關(guān)信息。(8)當(dāng)程序設(shè)計語言對輸入格式有嚴(yán)格的要求時,就保持輸入格式與輸入語句的一致性。2輸出方面1給所有輸出數(shù)據(jù)加標(biāo)志,并加以必要的說明。2設(shè)計具有良好格式的輸出報表。,52程序設(shè)計風(fēng)格525面向?qū)ο蟪绦蛟O(shè)計風(fēng)格,1提高可復(fù)用性(1)提高方法的內(nèi)聚度,降低耦合度。(2)控制方法的規(guī)模。(3)保持方法的一致性。2提高可擴充性(1)封裝實現(xiàn)策略(2)慎用公有方法(3)控制方法的規(guī)模,52程序設(shè)計風(fēng)格525面向?qū)ο蟪绦蛟O(shè)計風(fēng)格,3提高健壯性(1)預(yù)防用戶的操作錯誤(2)檢查參數(shù)的合法性(3)使用動態(tài)內(nèi)存分配機制(4)先測試后優(yōu)化,53程序的效率531程序運行時間,(1)編碼前先化簡算術(shù)表達式和邏輯表達式;(2)仔細檢查算法中嵌套的循環(huán),以確定是否有語句可以從內(nèi)層向外移;(3)盡量不使用多維數(shù)組;(4)盡量不使用指針和復(fù)雜的表;,53程序的效率531程序運行時間,(5)使用執(zhí)行時間短的算術(shù)運算;(6)在表達式中盡量避免出現(xiàn)不同的數(shù)據(jù)類型;(7)盡量使用整數(shù)算術(shù)表達式和布爾表達式;(8)選用等效的高效率算法。,53程序的效率532存儲器效率,要選用有緊縮存儲器特性的編譯程序,生成較短目標(biāo)代碼,在必要時可以使用匯編語言。在大中型計算機系統(tǒng)中,一般來說,使用能保持功能域結(jié)構(gòu)化的控制結(jié)構(gòu),以減少頁面調(diào)度,減少內(nèi)外存之間的交換,是提高效率的好方法。提高程序執(zhí)行效率的技術(shù)也能提高存儲器效率。提高存儲器效率的關(guān)鍵在于程序的簡單性。,53程序的效率533輸入/輸出的效率,(1)輸入/輸出的請求易于理解;(2)為減少通信的額外開銷,所有輸入/輸出都應(yīng)有適當(dāng)?shù)木彌_;(3)對輔存(如磁盤)的訪問應(yīng)選擇盡可能簡單的方式;(4)對輔存的輸入/輸出應(yīng)以塊為單位進行;,53程序的效率533輸入/輸出的效率,(5)任何不易理解的“超高效”的輸入/輸出,則不能采用;(6)應(yīng)考慮輸入輸出設(shè)備(如終端或打印機等)的特性,盡量改善其輸入/輸出質(zhì)量和速度;(7)好的輸入/輸出設(shè)計風(fēng)格對提高輸入/輸出效率會有明顯的效果。,54程序復(fù)雜性度量541MCCABE度量法,MCCABE度量法需要畫出程序圖。用這種度量方法得出的結(jié)果稱為程序的環(huán)路復(fù)雜度。具體數(shù)值可由以下公式計算出V(G)MNP其中V(G)是有向圖G中的環(huán)數(shù);M是有向圖G中的有向弧數(shù)(包括強連通的輔助虛?。?;,54程序復(fù)雜性度量541MCCABE度量法,N是有向圖G中的節(jié)點數(shù);P是有向圖G中分離部分的數(shù)目,對一個正常程序而言,在程序圖中從入口點可達任何一個節(jié)點,因此程序圖總是連通的,則P1。MCCABE度量法是對程序控制流復(fù)雜性的度量,而不考慮數(shù)據(jù)流。,54程序復(fù)雜性度量542HALSTEAD方法,HALSTEAD方法可根據(jù)其中的運算符和操作數(shù)的總數(shù)來度量程序的復(fù)雜程度。設(shè)N1為程序中運算符出現(xiàn)的總次數(shù),N2為操作數(shù)出現(xiàn)的總次數(shù),則程序長度N為NN1N2設(shè)N1為程序中出現(xiàn)的不同操作符的個數(shù),N2為程序中出現(xiàn)的不同操作數(shù)的個數(shù),很顯然,N1,N2將隨著程序規(guī)模增大而增大,HALSTEAD給出預(yù)測程序長度H的公式HN1LOG2N1N2LOG2N2,54程序復(fù)雜性度量542HALSTEAD方法,HN1LOG2N1N2LOG2N2經(jīng)過多次實驗證明,預(yù)測長度H與實際長度N非常接近。HALSTEAD還給出了預(yù)測程序中包含錯誤個數(shù)E的公式ENLOG2N1N2/3000HALSTEAD度量法只考慮程序的數(shù)據(jù)流而不考慮程序的控制流。,55用戶手冊和操作手冊551用戶手冊編寫,1引言編寫目的,背景,定義,參考資料2用途功能,性能,安全保密3運行環(huán)境硬設(shè)備,支持軟件,數(shù)據(jù)結(jié)構(gòu)4使用過程安裝與初始化,輸入,輸出,文卷查詢,出錯處理和恢復(fù),終端操作,55用戶手冊和操作手冊552操作手冊編寫,1引言編寫目的,背景,定義,參考資料2軟件概述軟件的結(jié)構(gòu),程序表,文卷表3安裝與初始化4運行說明運行表,運行步驟,運行1(標(biāo)識符)說明,運行2(標(biāo)識符)說明5非常規(guī)過程6遠程操作,
下載積分: 6 賞幣
上傳時間:2024-01-05
頁數(shù): 23
大?。?0.07(MB)
子文件數(shù):