版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
本教案內(nèi)容第4章
匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)源程序的匯編、連接與調(diào)試分支程序設(shè)計(jì)技術(shù)循環(huán)程序設(shè)計(jì)技術(shù)子程序設(shè)計(jì)技術(shù)綜合程序設(shè)計(jì)示例4.6.4綜合程序設(shè)計(jì)示例本節(jié)介紹一些匯編語(yǔ)言設(shè)計(jì)的綜合示例,包括各種題型:選擇題、分析題和編程題。例4.16單項(xiàng)選擇題1.在偽指令BUFDB20DUP(2,2DUP(8))定義的緩沖區(qū)中,數(shù)據(jù)字0208H的個(gè)數(shù)有:①20 ②40 ③0 ④192.將DX:AX構(gòu)成的雙字(有符號(hào)數(shù))除以2的指令為:①SARAX,1②SHRAX,1RCRDX,1RCRDX,1③SARDX,1④
SARDX,1RORAX,1RCRAX,1
4.6.4綜合程序設(shè)計(jì)示例3.MOVBL,55HAND0F0H指令執(zhí)行后,(BL)的內(nèi)容為:①55H②0F0H ③50H ④05H解:答案依次為④④③。例4.17多項(xiàng)選擇題1.能使(AX)和CF同時(shí)清零的指令有①M(fèi)OVAX,0 ②SUBAX,AX③CMPAX,AX④XORAX,AX ⑤ANDAX,AX2.已有定義 DATASEGMENTVAR1 DW10DUP(?)DATA ENDS則源操作數(shù)為立即尋址的指令有:①M(fèi)OVAX,DATA ②MOVAX,VAR1③MOVAX,OFFSETVAR1④MOVAX,LENGTHVAR1⑤MOVAX,SIZEVAR14.6.4綜合程序設(shè)計(jì)示例3.使用AL寄存器的指令有:①SAHF ②XALT ③AAA ④MOVSB ⑤STOSB解:1.②④⑤2.①③④⑤ 3.②③⑤例4.18分析下列程序段完成的功能:MOVCX,100LEASI,F(xiàn)IRSTLEADI,SECONDCLDREPMOVSB解:只要搞清楚MOVSB指令的用法,就容易分析出該程序段的功能:從緩沖區(qū)FIRST傳送100個(gè)字節(jié)到緩沖區(qū)SECOND。4.6.4綜合程序設(shè)計(jì)示例例4.19分析下列程序段:LEADI,STRINGMOVCX,200CLDMOVAL,20HREPZSCASBJNZFOUNDJMPNOT_FOUND問(wèn):轉(zhuǎn)移到FOUND的條件。解:只要搞清楚SCASB指令和重復(fù)前綴REPZ的用法,就可以分析出該程序段的功能:在200個(gè)字節(jié)的緩沖區(qū)STRING中,如果找到非空格字符(ASCII碼為20H)則轉(zhuǎn)到FOUND;如果全是空格,則轉(zhuǎn)到NOT_FOUND。
4.6.4綜合程序設(shè)計(jì)示例例4.20分析下列子程序FUNC1,并回答相應(yīng)的問(wèn)題。FUNC1PROCNEARXORCX,CXMOVDX,01MOVCL,XJCXZA20INCDXINCDXDECCXJCXZA20A10:MOVAX,02SHLAX,CL
ADDDX,AXLOOPA104.6.4綜合程序設(shè)計(jì)示例
A20:MOVY,DXRETFUNC1ENDP若該子程序的入口參數(shù)為X(0≤X≤10),其輸出參數(shù)為Y,則:(1)該子程序的功能是Y=f(X)=
;(2)若X=0,則Y=
; 若X=3,則Y=
;若X=5,則Y=
。解:分析題是近年來(lái)出現(xiàn)的比較多的考題.對(duì)于分析題,應(yīng)該邊分析邊畫(huà)流程草圖,特別要注意搞清楚數(shù)據(jù)緩沖區(qū)的結(jié)構(gòu)、指針及其操作過(guò)程,這樣便于理解程序的功能和思路。4.6.4綜合程序設(shè)計(jì)示例通過(guò)分析該子程序,很容易獲知,當(dāng)X=0時(shí),直接轉(zhuǎn)到A20,即Y=1;當(dāng)X=1時(shí),Y=3;當(dāng)X=2時(shí),Y=7;當(dāng)X=3時(shí),Y=15;如此等等,當(dāng)X=n時(shí),有因此第(1)題為;由分析過(guò)程和得到的表達(dá)式,第(2)題三個(gè)空應(yīng)依次填1,15,63。例4.21已知N(3<N<100)個(gè)8位無(wú)符號(hào)數(shù)已存放在緩存區(qū)INX中,其中第一個(gè)字節(jié)存放個(gè)數(shù)N,從第二個(gè)字節(jié)開(kāi)始存放數(shù)據(jù),下列的FUNC2子程序完成對(duì)這N個(gè)數(shù)據(jù)按由大到小排序,在劃線(xiàn)處填入必要指令,使子程序完整。
4.6.4綜合程序設(shè)計(jì)示例FUNC2PROCNEARLEASI,INXXORCX,CXMOVCL,[SI]DECCXB10:INCSIMOVDI,SIPUSHSI
①M(fèi)OVAL,[SI]B20:INCSICMPAL,[SI]
②
4.6.4綜合程序設(shè)計(jì)示例
MOVAL,[SI]MOVDI,SIB30:LOOPB20POPCXPOPSIMOVAH,[SI]MOV[SI],ALMOV[DI],AHLOOPB10
③FUNC2ENDP
4.6.4綜合程序設(shè)計(jì)示例解:指令填空題也是出現(xiàn)較多的考題,它有可能會(huì)替代編程題。求解指令填空題時(shí),應(yīng)該理解題義,緊跟程序思路,從而找出缺少的指令。一般來(lái)說(shuō),題目中會(huì)有一些暗示,例如在子程序中應(yīng)該確保PUSH和POP數(shù)量上的對(duì)等;子程序要有RET指令等等。對(duì)于本題,第③空顯然應(yīng)該填入RET;而且PUSH與POP并不對(duì)等,因此初步分析,第①空應(yīng)該填入PUSHCX指令。為全面分析程序,需要搞清楚數(shù)據(jù)緩沖區(qū)INX的結(jié)構(gòu),如圖4.9所示,指針SI指向緩沖區(qū)INX,并且隨著比較操作而增加,4.6.4綜合程序設(shè)計(jì)示例但DI用于指定某個(gè)適當(dāng)?shù)奈恢?,根?jù)LOOP指令的前三條指令的交換操作,SI為緩沖區(qū)數(shù)據(jù)的首地址(第一次循環(huán)時(shí)),而題目要求將數(shù)據(jù)由大到小排序,因此,找到的DI位置應(yīng)該存放著最大值,第②空處的指令應(yīng)該大于等于時(shí)轉(zhuǎn)移到B30的指令,再根據(jù)題目給出的是無(wú)符號(hào)數(shù),所以,第②空應(yīng)該填入JAEB30指令。程序段完整后,再仔細(xì)看一遍,是否能夠完成題目給定的任務(wù)。4.6.4綜合程序設(shè)計(jì)示例例4.22假設(shè)X和X+2單元的內(nèi)容為雙精度數(shù)P,Y和Y+2單元的內(nèi)容為雙精度數(shù)Q(P,Q均為無(wú)符號(hào)數(shù),其中X,Y為低位數(shù)),下列的子程序FUNC3完成:當(dāng)2P>Q時(shí),(AX)=1;當(dāng)2P≤Q時(shí),(AX)=-1,在劃線(xiàn)處填入必要指令,使子程序完整。FUNC3PROCNEARMOVDX,X+2MOVAX,XADDAX,AXADCDX,DXJCC1
CMPDX,Y+2
①C20
②C104.6.4綜合程序設(shè)計(jì)示例
CMPAX,Y
③C20C10:MOVAX,1
④C30C20:MOVAX,-1C30:RETFUNC3ENDP解:雙精度數(shù)占用2個(gè)字,低位字在前,高位字在后。分析該子程序,發(fā)現(xiàn)這4個(gè)空全是有條件轉(zhuǎn)移指令,由于題目給定的數(shù)據(jù)為無(wú)符號(hào)數(shù),因此應(yīng)該采用JA、JB等指令。子程序的前4條指令完成2×P,當(dāng)2×P有進(jìn)位時(shí)表示超出32位二進(jìn)制數(shù)的范圍,這時(shí)可以肯定2×P>Q,程序應(yīng)轉(zhuǎn)向C10。當(dāng)2×P≤Q時(shí),應(yīng)轉(zhuǎn)向C20。
4.6.4綜合程序設(shè)計(jì)示例只有當(dāng)高位字相等時(shí),才需要比較低位字,因此根據(jù)以上分析,可以確定各處填入的指令分別為:第①空填入JB;第②空填入JA;第③空填入JBE;第④空填入JMP。例4.23編寫(xiě)子程序COMPT4DIV1,完成4字節(jié)(即雙字)的無(wú)符號(hào)數(shù)除以1字節(jié)。解:設(shè)要完成的操作為A=P÷Q,其中Q為一個(gè)字節(jié),P由4個(gè)字節(jié)構(gòu)成。將P的4個(gè)字節(jié)從高位到低位分別表示成P4、P3、P2和P1,則這樣可以將計(jì)算分成下列4個(gè)步驟:(1)先計(jì)算,其商為結(jié)果A的31~24位;4.6.4綜合程序設(shè)計(jì)示例(2)應(yīng)該特別注意上一步操作的余數(shù)(記作R1),它應(yīng)該與P3構(gòu)成一個(gè)字,因此這時(shí)應(yīng)完成,其商可能是16位,應(yīng)該加到A的31~16位;(3)與(2)步類(lèi)似,完成,其商加到A的23~8位;(4)與(2)步類(lèi)似,完成,其商加到A的15~0位;
子程序COMPT4DIV1的入口參數(shù)為:DX:AX(參數(shù)P)和CL(參數(shù)Q),出口參數(shù)為:DX:AX(計(jì)算結(jié)果,即參數(shù)A),采用寄存器參數(shù)傳遞方式,用到的寄存器為:DX和AX。利用匯編語(yǔ)言編寫(xiě)的子程序COMPT4DIV1及其應(yīng)用示例如下:
4.6綜合程序設(shè)計(jì)示例STACKSEGMENTSTACK'STACK'DW100HDUP(?)TOPLABELWORDSTACKENDSDATASEGMENTCONSTDW42XDATDD987654321YDAT DD? ;166D1BBHDATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AX4.6綜合程序設(shè)計(jì)示例MOVES,AXMOVAX,STACKMOVSS,AXLEASP,TOP MOVCX,CONST MOVAX,WORDPTRXDAT MOVDX,WORDPTRXDAT+2CALLCOMPT4DIV1 MOVWORDPTRYDAT,AX MOVWORDPTRYDAT+2,DX XCHGAX,DX ;顯示計(jì)算結(jié)果 CALLDISPAX XCHGAX,DX CALLDISPAX4.6綜合程序設(shè)計(jì)示例CALLDISPCRMOVAH,4CH;返回DOSMOVAL,0INT21HCOMPT4DIV1PROCNEAR PUSHBX PUSHCX PUSHSI XORCH,CH CMPCX,1 JECOMPTDIV1 MOVSI,CX PUSHAX ;保存低位字 MOVAX,DX4.6綜合程序設(shè)計(jì)示例XORDX,DX XORBX,BX ;結(jié)果暫存在BX:CX XORCX,CX PUSHAX ;保存高位字 XORAL,AL ;最高位字節(jié)除以Q XCHGAL,AH DIVSI ADDBH,AL MOVAH,DL ;次高位字節(jié)除以Q POPDX MOVAL,DL XORDX,DX DIVSI ADDBL,AL4.6綜合程序設(shè)計(jì)示例ADCBH,AH MOVAH,DL ;第三位字節(jié)除以Q POPDX ;取出低位字 PUSHDX MOVAL,DH XORDX,DX DIVSI ADDCH,AL ADCBL,AH MOVAH,DL ;最低位字節(jié)除以Q POPDX ;取出低位字 MOVAL,DL XORDX,DX DIVSI4.6綜合程序設(shè)計(jì)示例ADDCL,AL ADCCH,AH MOVAX,CX MOVDX,BXCOMPTDIV1: POPSI POPCX POPBXRETCOMPT4DIV1ENDPCODEENDSENDSTART◆當(dāng)除數(shù)Q=1時(shí),A=P,可以直接得到結(jié)果,不需要進(jìn)行復(fù)雜的運(yùn)算。4.6綜合程序設(shè)計(jì)示例例4.24在首址為XDAT的字型數(shù)組中,第一個(gè)字存放某單位的人數(shù)N(N<1000),第二個(gè)字存放B(個(gè)人所得稅起征額),從第三個(gè)字開(kāi)始分別存放該單位N個(gè)人的A(本月收入總額,A<300000)。要求編寫(xiě)匯編語(yǔ)言程序?qū)崿F(xiàn):根據(jù)個(gè)人所得稅率表和個(gè)人所得稅計(jì)算公式計(jì)算個(gè)人應(yīng)納稅和單位應(yīng)納稅總額,將結(jié)果存儲(chǔ)在首址為YDAT的字型組中,其中第一個(gè)字存放單位人數(shù),第二個(gè)字存放單位納稅總額,從第三個(gè)字開(kāi)始分別存放該單位N個(gè)人的個(gè)人應(yīng)納稅。個(gè)人所得稅率如表4.5所示。4.6綜合程序設(shè)計(jì)示例表4.5個(gè)人所得稅率表級(jí)數(shù)E(全月應(yīng)納稅所得額單位:元)C(稅率(%))D(速算扣除數(shù)單位:元)10<E<500502500<=E<2000102532000<=E<50001512545000<=E<200002037552000<=E<40000251375640000<=E<60000303375760000<=E<80000356375880000<=E<10000040103759E>=10000045153754.6綜合程序設(shè)計(jì)示例個(gè)人所得稅計(jì)算公式為:S(應(yīng)納稅)=E(全月應(yīng)納稅總額)×C(稅率)-D(速算扣除數(shù))其中,E=A(本月收入總額)-B(個(gè)人所得稅起征額)。例如,若張三的A=1200元,個(gè)人所得稅起征額B=1600,由E=A-B<0,得S=0。若李四的A=2600元,個(gè)人所得稅起征額B=1600,由E=A-B=1000元,查“個(gè)人所得稅率表”可得C=10%,D=25元,因此李四應(yīng)納稅為:S=(A-B)×C-D=(2600-1600)×10%-25=75(元)4.6綜合程序設(shè)計(jì)示例解:題目的要求比較復(fù)雜,而且有一定的難度。為此,應(yīng)該先搞清楚緩沖區(qū)結(jié)構(gòu),輸入緩沖區(qū)XDAT和輸出緩沖區(qū)YDAT的結(jié)構(gòu)如圖4.10所示。在XDAT中,第一個(gè)字為某單位的人數(shù)N,第二個(gè)字表示個(gè)人所得稅起征額B,從第三個(gè)字開(kāi)始,每?jī)蓚€(gè)字存放一位員工的工資A。在YDAT中,第一個(gè)字為某單位的人數(shù)N,第二、三個(gè)字用于存放全單位應(yīng)交個(gè)人所得稅的總和,從第四個(gè)字開(kāi)始,每?jī)蓚€(gè)字用于存放每位員工應(yīng)交個(gè)人所得稅S。在程序設(shè)計(jì)中,分別采用指針SI和DI來(lái)指示。4.6綜合程序設(shè)計(jì)示例為了計(jì)算方便,將表4.5中的個(gè)人所得稅9個(gè)等級(jí)變換成三個(gè)數(shù)據(jù)表:INCOME(個(gè)人所得稅界線(xiàn)值,雙字型變量)、TAXRATE(稅率,字型變量)、DEDUCTION(速算扣除數(shù),字型變量),其結(jié)構(gòu)如圖4.11所示。INCOME存放每個(gè)等級(jí)的上限值,最后一級(jí)可以給定一個(gè)較大的值,比如300000(由題目限定)。編寫(xiě)子程序INCOMERATE實(shí)現(xiàn)個(gè)人所得稅的計(jì)算,其入口參數(shù)為DX:AX(工資A)和BX(個(gè)人所得稅起征額B),出口參數(shù)為DX:AX(個(gè)人所得稅S),采用寄存器參數(shù)傳遞方式。4.6綜合程序設(shè)計(jì)示例圖4.11個(gè)人所得稅界線(xiàn)值、稅率和速算扣除數(shù)的結(jié)構(gòu)4.6綜合程序設(shè)計(jì)示例在子程序INCOMERATE中,先計(jì)算出E=A-B,然后將E與INCOME中的上限值比較,確定出征稅的等級(jí),并通過(guò)TAXRATE和DEDUCTION找出稅率C和速算扣除數(shù)D,由S=E×C-D就可以計(jì)算出個(gè)人所得稅。為了方便操作,在子程序INCOMERATE中,通過(guò)(BX)+(SI)的值作為INCOME的表內(nèi)偏移地址,每次BX和SI都進(jìn)行加2操作,一旦確定出等級(jí),就可以直接采用BX或SI訪(fǎng)問(wèn)TAXRATE和DEDUCTION數(shù)據(jù)表,如圖4.11所示。實(shí)際上,E×C運(yùn)算相當(dāng)于實(shí)現(xiàn)E×dd÷100(其中dd為相應(yīng)的稅率×100),因此,可以利用例4.23計(jì)算4字節(jié)除以1字節(jié)的子程序COMPT4DIV1,完成除以100的運(yùn)算。4.6綜合程序設(shè)計(jì)示例匯編語(yǔ)言程序如下:STACKSEGMENTSTACK'STACK'DW100HDUP(?)TOPLABELWORDSTACKENDSDATASEGMENTTAXRATEDW5,10,15,20,25,30,35,40,45DEDUCTIONDW0,25,125,375,1375,3375,6375,10375,15375INCOMELABELWORDDD500,2000,5000,20000,40000,60000,80000,100000,300000XDAT DW19,1600 DD1200,2600,3000,4000,5000,6000,7000,80004.6綜合程序設(shè)計(jì)示例
DD9000,10000,15000,20000,30000,40000,50000,59900 DD60000,65000,200000YDAT DW? DD50DUP(?)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVES,AXMOVAX,STACKMOVSS,AX4.6綜合程序設(shè)計(jì)示例
LEASP,TOP LEASI,XDAT MOVCX,[SI] ADDSI,2 MOVBX,[SI] ADDSI,2 LEADI,YDAT+6 MOVYDAT,CX MOVYDAT+2,0 MOVYDAT+4,0L1: MOVAX,[SI] ;取出一位員工的工資 MOVDX,[SI+2] ADDSI,44.6綜合程序設(shè)計(jì)示例CALLINCOMERATE ;計(jì)算個(gè)人所得稅 MOV[DI],AX ;保存?zhèn)€人所得稅 MOV[DI+2],DX ADDDI,4 ADDYDAT+2,AX ;統(tǒng)計(jì)單位個(gè)人所得稅總額 ADCYDAT+4,DX XCHGAX,DX ;顯示 CALLDISPAX XCHGAX,DX CALLDISPAX CALLDISPCR LOOPL1 CALLDISPCR4.6綜合程序設(shè)計(jì)示例MOVAX,YDAT+4 ;顯示單位個(gè)人所得稅總額 CALLDISPAX MOVAX,YDAT+2 CALLDISPAX CALLDISPCR MOVAH,4CH INT21HINCOMERATEPROCNEAR ;計(jì)算個(gè)人所得稅子程序 PUSHBX PUSHCX PUSHSI SUBAX,BX ;E=A-B SBBDX,0 JSINCRATE4 ;不需納稅出口4.6綜合程序設(shè)計(jì)示例
XORBX,BX ;判定納稅等級(jí) XORSI,SI MOVCX,9INCRATE1: CMPDX,INCOME[BX][SI+2] JBINCRATE2 JAINCRATE3 CMPAX,INCOME[BX][SI] JBINCRATE2INCRATE3: ADDBX,2 ADDSI,2 LOOPINCRATE1INCRATE2: ;根據(jù)納稅等級(jí)計(jì)算E×dd4.6綜合程序設(shè)計(jì)示例
PUSHAX MOVAX,DX MULTAXRATE[BX] POPCX PUSHAX MOVAX,CX MULTAXRATE[BX] POPCX ADDDX,CX MOVCX,100 CALLCOMPT4DIV1 ;計(jì)算E×dd÷100 SUBAX,DEDUCTION[BX] ;計(jì)算S SBBDX,0 JMPINCRATE54.6綜合程序設(shè)計(jì)示例INCRATE4: MOVDX,0 MOVAX,0INCRATE5: POPSI POPCX POPBX RETINCOMERATEENDPCOMPT4DIV1PROCNEARCOMPT4DIV1ENDPCODEENDS ENDSTART4.6綜合程序設(shè)計(jì)示例例4.25設(shè)已經(jīng)編寫(xiě)好8個(gè)子程序(SUB0~SUB7),要求編寫(xiě)程序?qū)崿F(xiàn)從鍵盤(pán)輸入0~7進(jìn)行選擇。解:如果采用比較指令,則會(huì)使程序變得復(fù)雜。為此,這里介紹跳轉(zhuǎn)表的方法,即利用偽指令DW構(gòu)成各個(gè)子程序入口地址的跳轉(zhuǎn)表,然后根據(jù)鍵盤(pán)輸入進(jìn)行調(diào)用。匯編語(yǔ)言程序如下:STACKSEGMENTSTACK'STACK'DW100HDUP(?)TOPLABELWORDSTACKENDS4.6綜合程序設(shè)計(jì)示例DATASEGMENTTABLE DWSUB0,SUB1,SUB2,SUB3,SUB4,SUB5,SUB6,SUB7STRINGDB'Pleaseinput0~7toselectsubroutines',0AH,0DH,'$'DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVES,AXMOVAX,STACKMOVSS,AXLEASP,TOP4.6綜合程序設(shè)計(jì)示例ST1: MOVAH,9 ;顯示提示字符串 LEADX,STRING ING21H MOVAH,1 ;輸入一個(gè)字符 INT21H SUBAL,30H JBST1 CMPAL,8 JAEST1 SHLAL,1 ;(AL)×2 XORAH,AH MOVBX,AX CALLTABLE[BX] ;通過(guò)跳轉(zhuǎn)表調(diào)用各個(gè)子程序4.6綜合程序設(shè)計(jì)示例JMPST1 ;循環(huán)執(zhí)行 MOVAH,4CH ;返回DOS操作系統(tǒng) INT21HCODEENDSENDSTART例4.26在AVG緩沖區(qū)中保存有按報(bào)考號(hào)順序排列的研究生考生平均成績(jī),在MIN緩沖區(qū)保存有與AVG相對(duì)應(yīng)的考生單科最低成績(jī),報(bào)考學(xué)生總?cè)藬?shù)存儲(chǔ)在字變量NUM中,給定錄取條件為:(1)最低單科成績(jī)不得低于60分;(2)選定錄取分?jǐn)?shù)線(xiàn),按平均成績(jī)從高分到低分錄取,但錄取人數(shù)不超過(guò)800人。編程求取錄取分?jǐn)?shù)線(xiàn)N1和實(shí)際錄取人數(shù)N2。4.6綜合程序設(shè)計(jì)示例解:首先,根據(jù)考生的單科最低成績(jī),剔除不合格的考生;然后將合格考生按平均成績(jī)由高分到低分進(jìn)行排序,在排序時(shí),應(yīng)該保留考生的考號(hào)信息。當(dāng)合格考生人數(shù)超出計(jì)劃錄取人數(shù)時(shí),錄取分?jǐn)?shù)線(xiàn)就是第800位考生的平均成績(jī);當(dāng)合格考生人數(shù)不足計(jì)劃錄取人數(shù)時(shí),錄取分?jǐn)?shù)線(xiàn)就是最后一位合格考生的平均成績(jī)。匯編語(yǔ)言程序如下:STACKSEGMENTSTACK'stack'DW256HDUP(?)TOPLABELWORDSTACKENDS4.6綜合程序設(shè)計(jì)示例N=2000 ;考生人數(shù)M=800 ;計(jì)劃錄取人數(shù)DATASEGMENTNUMDWN;學(xué)生總?cè)藬?shù)AVGDBNDUP(?);平均成績(jī)MINDBNDUP(?);最低單科成績(jī)N1DB? ;存放錄取分?jǐn)?shù)線(xiàn)N2DW? ;存放實(shí)際錄取人數(shù)BUF1DBNDUP(?);暫存平均成績(jī)BUF2 DWNDUP(?);暫存學(xué)號(hào)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACK4.6綜合程序設(shè)計(jì)示例START:MOVAX,DATAMOVDS,AXMOVES,AXMOVAX,STACKMOVSS,AXLEASP,TOP MOVCX,NUM CALLPRODUCT ;產(chǎn)生模擬數(shù)據(jù) XORSI,SI ;剔除單科不合格的考生 XORDI,DI XORBX,BX MOVCX,NUM4.6綜合程序設(shè)計(jì)示例ELIMINATE: CMPMIN[SI],60 JBELIMINATE1 MOVAL,AVG[SI] MOVBUF1[DI],AL ;保存合格考生的平均成績(jī) INCDI MOVBUF2[BX],SI ;保存合格考生的考號(hào) ADDBX,2ELIMINATE1: INCSI LOOPELIMINATEMOVCX,DI ;對(duì)合格考生按平均成績(jī)由高分到低分排序 LEASI,BUF1 LEADI,BUF24.6綜合程序設(shè)計(jì)示例CALLSORTCMPCX,M;合格考生數(shù)是否大于計(jì)劃錄取人數(shù)?JBEMATRI00MOVCX,MMATRI00: MOVBX,CX MOVAL,BUF1[BX] ;錄取分?jǐn)?shù)線(xiàn) MOVN1,AL MOVN2,BX ;實(shí)際錄取人數(shù) MOVAL,N1 ;顯示錄取分?jǐn)?shù)線(xiàn) CALLDISPAL CALLDISPCR MOVAX,N2 ;顯示實(shí)際錄取人數(shù)4.6綜合程序設(shè)計(jì)示例CALLDISPAX CALLDISPCR MOVAH,4CH ;返回DOS系統(tǒng)INT21HSORT PROCNEAR ;數(shù)據(jù)排序程序 PUSHAX PUSHCX PUSHSI PUSHDI DECCX ADDSI,CX ;SI指向BUF1末地址 ADDDI,CX ;SI指向BUF2末地址 ADDDI,CX4.6綜合程序設(shè)計(jì)示例LP1: ;外循環(huán)開(kāi)始PUSHCXPUSHSI PUSHDILP2: ;內(nèi)循環(huán)開(kāi)始MOVAL,[SI]CMPAL,[SI-1]JBENOXCHGXCHGAL,[SI-1] ;交換操作MOV[SI],AL MOVAX,[DI] ;考生考號(hào)也同步交換 XCHGAX,[DI-2] MOV[DI],AX4.6綜合程序設(shè)計(jì)示例NOXCHG:DECSI DECDI DECDILOOPLP2 POPDIPOPSIPOPCXLOOPLP1 POPDI POPSI POPCX POPAX RET4.6綜合程序設(shè)計(jì)示例SORT ENDPPRODUCTPROCNEAR ;產(chǎn)生模擬數(shù)據(jù) PUSHAX PUSHCX MOVAL,17 MOVBH,59 LEASI,AVGPR1: ADDAL,BH CMPAL,100 JAEPR1 CMPAL,40 JBPR1 MOV[SI],AL4.6綜合程序設(shè)計(jì)示例INCSI LOOPPR1 POPCX MOVAL,5 MOVBH,3 LEASI,AVG LEADI,MINPR2: ADDAL,BH CMPAL,15 JAEPR2 MOVBL,[SI] SUBBL,AL4.6綜合程序設(shè)計(jì)示例MOV[DI],BL INCSI INCDI LOOPPR2 POPAX RETPRODUCTENDPCODEENDSENDSTART4.6綜合程序設(shè)計(jì)示例例4.27在首地址為XDAT的字節(jié)型數(shù)組中,第一個(gè)單元存放數(shù)的個(gè)數(shù)N(N<100),第二、三單元分別存放門(mén)限T1和T2(T1<T2<256),從第4個(gè)單元開(kāi)始存放N個(gè)無(wú)符號(hào)數(shù)(每個(gè)數(shù)占用一個(gè)字節(jié))。編寫(xiě)匯編語(yǔ)言程序?qū)崿F(xiàn):先對(duì)這N個(gè)數(shù)進(jìn)行剔除奇異值處理,再進(jìn)行滑窗式濾波處理,要求將濾波結(jié)果按四舍五入取整后存儲(chǔ)在YDAT開(kāi)始的內(nèi)存單元中,并將數(shù)據(jù)個(gè)數(shù)存放在字節(jié)變量NUM中。設(shè)x(n)為數(shù)據(jù)原值,M為剔除奇異值后剩余數(shù)據(jù)的個(gè)數(shù),則剔除奇異值方法為:4.6綜合程序設(shè)計(jì)示例滑窗式濾波方法為:例如,設(shè)N=10,T1=1,T2=5,則●原數(shù)據(jù):3,1,4,7,5,4,3,2,6,4●剔除奇異值后:3,1,4,5,4,3,2,4●濾波且四舍五入取整:3,1,3,3,4,4,2,44.6綜合程序設(shè)計(jì)示例解:在實(shí)際的信號(hào)處理和控制系統(tǒng)中,經(jīng)常采用DSP、CPU或單片機(jī)構(gòu)成,這樣對(duì)數(shù)據(jù)進(jìn)行處理就遠(yuǎn)比在普通微機(jī)上的復(fù)雜,因此,有必要進(jìn)行說(shuō)明。在實(shí)際環(huán)境的數(shù)據(jù)采集中,會(huì)受到干擾和噪聲的影響,也可能會(huì)產(chǎn)生不可預(yù)見(jiàn)的錯(cuò)誤數(shù)據(jù),導(dǎo)致數(shù)據(jù)明顯偏移正常范圍,這些值稱(chēng)為奇異值。在對(duì)數(shù)據(jù)區(qū)進(jìn)行處理之前,應(yīng)該將奇異值剔除,這樣雖然會(huì)對(duì)處理精度有一定的影響,但不至于使算法失效,實(shí)際上,這樣的奇異值只有很少幾個(gè),對(duì)系統(tǒng)精度幾乎沒(méi)有影響。
平滑濾波是常用的一種信號(hào)處理方法,這里采用5點(diǎn)平滑,并對(duì)結(jié)果要進(jìn)行四舍五入處理。由于程序采用整數(shù)表示數(shù)據(jù),因此,應(yīng)該在除法之前完成四舍五入運(yùn)算。4.6綜合程序設(shè)計(jì)示例記:則將分成兩部分:5的整倍數(shù)和余數(shù),這樣四舍五入運(yùn)算實(shí)際上就是對(duì)余數(shù)進(jìn)行適當(dāng)?shù)奶幚恚浩渲?,f(.)表示四舍五入運(yùn)算。直接利用整數(shù)運(yùn)算的特性,可以簡(jiǎn)化成:4.6綜合程序設(shè)計(jì)示例這表示,計(jì)算的四舍五入結(jié)果時(shí),只需要將先加2,再完成除以5的操作.一般情況下,計(jì)算的四舍五入結(jié)果時(shí),其結(jié)果為,其中int(.)表示取整運(yùn)算。匯編語(yǔ)言程序如下:NEQU100 ;數(shù)據(jù)個(gè)數(shù)T1EQU10 ;低門(mén)限T2EQU50 ;高門(mén)限STACKSEGMENT DW256DUP(?)TOPLABELWORDSTACKENDS。
4.6綜合程序設(shè)計(jì)示例DATASEGMENTXDATDBN,T1,T2 ;輸入數(shù)據(jù)區(qū) X=17REPTNX=(X+79)mod256DBXENDMYDATDBNDUP(?) ;輸出數(shù)據(jù)區(qū)NUMDB? ;數(shù)據(jù)的實(shí)際個(gè)數(shù)BUF1 DBNDUP(?) DATAENDS4.6綜合程序設(shè)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版房屋維修基金管理合作協(xié)議示范文本3篇
- 2024年第三方借款擔(dān)保服務(wù)合作合同一
- 體育賽事活動(dòng)策劃與執(zhí)行流程優(yōu)化方案
- 2025年度牛只屠宰與肉品加工企業(yè)牛源供應(yīng)合同9篇
- 企業(yè)數(shù)字化轉(zhuǎn)型咨詢(xún)協(xié)議
- 2024甲乙雙方關(guān)于城市共享單車(chē)運(yùn)營(yíng)管理服務(wù)合同
- 二零二五年度家庭能源管理與節(jié)能服務(wù)合同范本3篇
- 2024年起重設(shè)備維修保養(yǎng)配件購(gòu)銷(xiāo)合同范本3篇
- 珠寶行業(yè)O2O銷(xiāo)售模式與售后服務(wù)體系構(gòu)建方案
- 2024科技公司與政府部門(mén)的技術(shù)開(kāi)發(fā)與服務(wù)合同
- GB/T 8571-2008復(fù)混肥料實(shí)驗(yàn)室樣品制備
- GB/T 3216-2016回轉(zhuǎn)動(dòng)力泵水力性能驗(yàn)收試驗(yàn)1級(jí)、2級(jí)和3級(jí)
- 期末家長(zhǎng)會(huì)(小學(xué)生一年級(jí)期末家長(zhǎng)會(huì)課件)
- 【高教版周紹敏】 電工技術(shù)基礎(chǔ)與技能教案
- 【醫(yī)療】急診預(yù)檢分診專(zhuān)家共識(shí)課件
- 國(guó)家開(kāi)放大學(xué)《西方經(jīng)濟(jì)學(xué)》復(fù)習(xí)題庫(kù)及參考答案
- 北京版小學(xué)三年級(jí)數(shù)學(xué)下冊(cè)全套課件
- 中國(guó)近代史綱要(完整版)
- 修井緊急情況的處理措施應(yīng)急方案
- 智能座艙市場(chǎng)與技術(shù)發(fā)展趨勢(shì)研究白皮書(shū)課件
- 中級(jí)無(wú)機(jī)化學(xué)答案版
評(píng)論
0/150
提交評(píng)論