編考 實(shí)驗(yàn) 題實(shí)驗(yàn)四_第1頁(yè)
編考 實(shí)驗(yàn) 題實(shí)驗(yàn)四_第2頁(yè)
編考 實(shí)驗(yàn) 題實(shí)驗(yàn)四_第3頁(yè)
編考 實(shí)驗(yàn) 題實(shí)驗(yàn)四_第4頁(yè)
編考 實(shí)驗(yàn) 題實(shí)驗(yàn)四_第5頁(yè)
已閱讀5頁(yè),還剩7頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

匯編實(shí)驗(yàn)四姓名:康杰靚學(xué)號(hào):1120111262班號(hào):05211101專業(yè):通信工程實(shí)驗(yàn)四分支和循環(huán)程序設(shè)計(jì)實(shí)驗(yàn)姓名:康杰靚學(xué)號(hào):1120111262班級(jí):05211101專業(yè):通信工程一、實(shí)驗(yàn)要求和目的1.熟悉匯編語言程序設(shè)計(jì)結(jié)構(gòu);2.熟悉匯編語言分支程序基本指令的使用方法;3.掌握利用匯編語言實(shí)現(xiàn)單分支、雙分支、多分支的程序設(shè)計(jì)方法;4.了解匯編語言循環(huán)程序設(shè)計(jì)的基本流程;5.熟悉匯編語言循環(huán)基本指令的使用方法;6.掌握利用匯編語言的循環(huán)指令完成循環(huán)程序設(shè)計(jì)方法。。二、軟硬件環(huán)境1、硬件環(huán)境:計(jì)算機(jī)系統(tǒng)windows;2、軟件環(huán)境:裝有MASM、DEBUG、LINK、等應(yīng)用程序。三、實(shí)驗(yàn)涉及的主要知識(shí)在實(shí)際應(yīng)用中,經(jīng)常根據(jù)一些條件來選擇一條分支執(zhí)行。匯編語言的條件判斷主要是通過狀態(tài)寄存器中的狀態(tài)位、無符號(hào)數(shù)相減或有符號(hào)相減而導(dǎo)致的結(jié)果來進(jìn)行。1.無條件轉(zhuǎn)移指令JMP無條件轉(zhuǎn)移指令JMP是使程序無條件轉(zhuǎn)移至目標(biāo)處,又分為段內(nèi)轉(zhuǎn)移、段間轉(zhuǎn)移。2.條件轉(zhuǎn)移指令JXX條件轉(zhuǎn)移指令可分為三大類:1)簡(jiǎn)單條件轉(zhuǎn)移指令指令。根據(jù)單個(gè)標(biāo)志位的狀態(tài)判斷轉(zhuǎn)移條件。標(biāo)志位指令轉(zhuǎn)移條件意義CFJCCF=1有進(jìn)位/借位JNCCF=0無進(jìn)位/借位ZFJE/JZZF=1相等/等于0JNE/JNZZF=0不相等/不等于0SFJSSF=1是負(fù)數(shù)JNSSF=0是正數(shù)OFJOOF=1有溢出JNOOF=0無溢出PFJP/JPEPF=1有偶數(shù)個(gè)1JNP/JPOPF=0有奇數(shù)個(gè)12)無符號(hào)數(shù)條件轉(zhuǎn)移指令。假設(shè)在條件轉(zhuǎn)移指令前使用比較指令,比較兩個(gè)無符號(hào)數(shù)A,B,指令進(jìn)行的的操作是A-B,其轉(zhuǎn)移指令如下:指令轉(zhuǎn)移條件意義JA/JNBECF=0ANDZF=0A>BJAE/JNBCF=0ORZF=1A>=BJB/JNAECF=1ANDZF=0A<BJBE/JNACF=1ORZF=1A<=B3).帶符號(hào)數(shù)條件轉(zhuǎn)移指令。指令轉(zhuǎn)移條件意義JG/JNLESF=OFANDZF=0A>BJGE/JNLSF=OFORZF=1A>=BJL/JNGESFOFANDZF=0A<BJLE/JNGSFOFORZF=1A<=B在匯編程序設(shè)計(jì)中,要熟練使用循環(huán)指令和跳轉(zhuǎn)等指令來實(shí)現(xiàn)循環(huán),理解循環(huán)體結(jié)構(gòu)中的初始化部分、循環(huán)體、結(jié)束部分,并且要結(jié)合前面分支結(jié)構(gòu)相關(guān)的知識(shí)點(diǎn),加深對(duì)循環(huán)結(jié)構(gòu)的理解和掌握。循環(huán)結(jié)構(gòu)的組成及其設(shè)計(jì)方法的知識(shí)要點(diǎn)有:1、循環(huán)程序的基本結(jié)構(gòu)通常由3部分組成1)初始化部分建立循環(huán)初始值,為循環(huán)做準(zhǔn)備,如設(shè)置地址指針,(BX/SI/DI/BP),初始化循環(huán)控制變量或計(jì)數(shù)器(CX),數(shù)據(jù)寄存器(AX/DX)初值等.2)循環(huán)體循環(huán)體是循環(huán)程序的主體,是程序中重復(fù)執(zhí)行的程序段.它是由循環(huán)工作部分、修改部分、和循環(huán)控制部分。①循環(huán)工作部分:完成程序功能的主要程序段,用于解決程序的實(shí)際任務(wù);②修改部分:對(duì)循環(huán)參數(shù)進(jìn)行修改,并為下一次循環(huán)做準(zhǔn)備;③循環(huán)控制部分:判斷循環(huán)結(jié)束條件是否滿足。通常判斷循環(huán)結(jié)束方法:用計(jì)數(shù)控制循環(huán);循環(huán)是否進(jìn)行了預(yù)定的次數(shù)。用條件控制循環(huán)。循環(huán)終止條件是否滿足。3)結(jié)束處理處理部分主要是對(duì)循環(huán)的結(jié)果進(jìn)行處理,比如現(xiàn)實(shí)提示信息等,很多時(shí)候沒有此部分程序。2、循環(huán)控制指令:指令格式執(zhí)行操作循環(huán)結(jié)束條件LOOP標(biāo)號(hào)CX=CX-1;若CX=0,則循環(huán)CX=0LOOPNZ/LOOPNE標(biāo)號(hào)CX=CX-1;若CX=0且ZF=0,則循環(huán)CX=0或ZF=0LOOPZ/LOOPE標(biāo)號(hào)CX=CX-1;若CX=0且ZF=1,則循環(huán)CX=0或ZF=1JCXZ標(biāo)號(hào)僅測(cè)試(CX)=0?若等于0,則轉(zhuǎn)移到目標(biāo)地址,否則就順序執(zhí)行3、循環(huán)控制可以分為:計(jì)數(shù)循環(huán)和條件循環(huán)。作為計(jì)數(shù)循環(huán),一般是指循環(huán)次數(shù)是已知的情況,在程序設(shè)計(jì)的的循環(huán)時(shí),先應(yīng)將循環(huán)次數(shù)送入計(jì)數(shù)器CX中進(jìn)行計(jì)數(shù),在循環(huán)體中使用LOOP等循環(huán)指令。當(dāng)然,也可以通過其他方式來進(jìn)行,如cx←cx-1,jnz等結(jié)合實(shí)現(xiàn)。四、實(shí)驗(yàn)內(nèi)容與步驟1、判斷方程AX2+BX+C=0是否有實(shí)根。若有實(shí)根,則將字節(jié)變量tag置1,否則置0。假設(shè)A、B、C均為字節(jié)變量,數(shù)據(jù)范圍為-128~127。2、編寫一個(gè)程序,判別鍵盤上輸入的字符;若是1-9字符,則顯示之;若為A-Z字符,顯示“C”;若為a-z字符,顯示“c”;若是回車字符<CR>(其ASCII碼為0DH),則結(jié)束程序,若為其它字符則顯示顯示“R”。3、(大家再次編成實(shí)現(xiàn)實(shí)驗(yàn)一的題目,看是否可以優(yōu)化程序?)分類統(tǒng)計(jì)字?jǐn)?shù)組data中正數(shù)、負(fù)數(shù)和零的個(gè)數(shù),并分別存入內(nèi)存字變量Positive、Negative和Zero中,數(shù)組元素個(gè)數(shù)保存在其第一個(gè)字中。使用Debug查看Positive、Negative和Zero三個(gè)變量的數(shù)據(jù)。4、編寫程序,在字符串變量STRING中存有一個(gè)以$為結(jié)尾的ASCII碼字符串,要求計(jì)算字符串的長(zhǎng)度,并把它存入LENGTH單元中。(要求用條件控制循環(huán)方法,并且字符串?dāng)?shù)據(jù)類型是字節(jié)和字兩種情況)。五、實(shí)驗(yàn)過程及結(jié)果分析實(shí)驗(yàn)一:一元二次方程有實(shí)根的條件是B*B-A*A*C的值大于等于0,故要使用條件跳轉(zhuǎn)JB,若有實(shí)根,將tag置1,否則置零。流程圖如下: START AX←B*B BX←AX AX←4*A*C Y BX>=AX? N tag=1 tag=0 END程序源代碼:DATASSEGMENTBUF1DW1HBUF2DW4HBUF3DW5HtagDB0DATASENDSCODESSEGMENTASSUMECS:CODES,DS:DATASSTART:MOVAX,DATASMOVDS,AXMOVAX,BUF2MULAXMOVBX,AXMOVAX,BUF1MULBUF3MOVCX,4HMULCXCMPBX,AXJBNOMOVtag,'1'JMPPRINTNO:MOVtag,'0'PRINT:MOVAH,2MOVDL,tagINT21HMOVAH,4CHINT21HCODESENDSENDSTART運(yùn)行結(jié)果:當(dāng)A=1,B=4,C=2時(shí),有實(shí)根,tag=1當(dāng)A=1,B=4,C=5時(shí),無實(shí)根,tag=0實(shí)驗(yàn)二:此程序需要對(duì)所輸入的字符做多次判斷,首先判斷是否為數(shù)字,其次判斷是否為大寫字母,之后再判斷是否為小寫字母,最后判斷是否為回車(換行符),如果均不是,則為其他,輸出‘R’。流程圖如下: START 輸入一個(gè)字符 是否為數(shù)字 Y 輸出該數(shù)字 N Y 是否為大寫字母 輸出’C’ N Y 是否為小寫字母 輸出’c’ N 是否為回車 Y END N 輸出’R’程序源代碼:DATASSEGMENT;此處輸入數(shù)據(jù)段代碼DATASENDSCODESSEGMENTASSUMECS:CODES,DS:DATASSTART:MOVAX,DATASMOVDS,AXMOVAH,01HINT21HCMPAL,'1'JNBONEJMPFIVEONE:CMPAL,'9'JLREADJGETOWREAD:MOVDL,ALMOVAH,02HINT21HMOVAH,4CHINT21HTOW:CMPAL,'A'JGEAA:CMPAL,'Z'JLREAD1JGETHREEREAD1:MOVDL,'C'MOVAH,02HINT21HMOVAH,4CHINT21HTHREE:CMPAL,'a'JGEBB:CMPAL,'z'JLREAD2JGEFOURREAD2:MOVDL,'c'MOVAH,02HINT21HMOVAH,4CHINT21HFOUR:CMPAL,0DHJZCRJNZFIVECR:MOVAH,4CHINT21HFIVE:MOVDL,'R'MOVAH,02HINT21HMOVAH,4CHINT21HCODESENDSENDSTART運(yùn)行結(jié)果:實(shí)驗(yàn)三:本實(shí)驗(yàn)是對(duì)實(shí)驗(yàn)一的優(yōu)化,加入了運(yùn)行結(jié)果的輸出部分,利用了幾種帶符號(hào)數(shù)條件跳轉(zhuǎn)指令,以及l(fā)oop循環(huán)。流程圖如下:程序源代碼:DATASSEGMENTdatadw5,4,2,0,-1,0positivedw0negativedw0zerodw0DATASENDSCODESSEGMENTASSUMECS:CODES,DS:DATASSTART:MOVAX,DATASMOVDS,AXmovBX,2movCX,dataCOMPARE:movAX,data[BX]cmpAX,0jzequaljssmalljnslargeequal:inczeroaddBX,2jmpnextsmall:incnegativeaddBX,2jmpnextlarge:incpositiveaddBX,2jmpnextnext:loopCOMPAREADDpositive,30haddnegative,30haddzero,30hMOVAH,2MOVDX,positiveINT21HMOVAH,2MOVDX,negativeINT21HMOVAH,2MOVDX,zeroINT21HMOVAH,4CHINT21HCODESENDSENDSTART運(yùn)行結(jié)果:實(shí)驗(yàn)四:要計(jì)算字符串長(zhǎng)度,就要利用循環(huán),逐個(gè)掃描字符串中的每個(gè)字符,并計(jì)數(shù),直到找到串結(jié)束標(biāo)志$為止,字節(jié)型和字類型的差別是,在定義數(shù)據(jù)段的時(shí)候,字類型要逐個(gè)字符定義,而字節(jié)型只需定義整個(gè)串即可。流程圖如下: START 當(dāng)前所指為$ N LEN+1 SI+1(字節(jié)型)/SI+2(字類型) 輸出LEN END程序源代碼:STRING為字節(jié)型:DATASSEGMENTSTRING1DB';LKHRRW$'LEN1DB-1DATASENDSCODESSEGMENTASSUMECS:CODES,DS:DATASSTART:MOVAX,DATASMOVDS,AXMOVES,AXLEASI,STRING1MOVCL,0COUNT1:MOVAH,0CMPBYTEPTR[SI],'$'JZSTOPINCSIINCCLMOVLEN1+1,CLJMPCOUNT1STOP:MOVAH,0ADDCL,30HMOVDL,CLMOVAH,2INT21HMOVAH,4CHINT21HCODESENDSENDSTART運(yùn)行結(jié)果:STRING為字類型:DATASSEGMENTSTRING2DW'E','W','3','E','$'LEN2DB-1DATASENDSCODESSEGMENTASSUMECS:CODES,DS:DATASSTART:MOVAX,DATASMOVDS,AXMOVES,AXLEASI,STRING2MOVCL,0COUNT2:MOVAX,DS:[SI]MOVAH,0CMPAX,'$'JZSTOPADDSI,2INCCLJMPCOUNT2STOP:MOVAH,0ADDCL,30HMO

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論