北京理工大學(xué)匯編第四次(分支和循環(huán)程序設(shè)計(jì)實(shí)驗(yàn))報(bào)告_第1頁
北京理工大學(xué)匯編第四次(分支和循環(huán)程序設(shè)計(jì)實(shí)驗(yàn))報(bào)告_第2頁
北京理工大學(xué)匯編第四次(分支和循環(huán)程序設(shè)計(jì)實(shí)驗(yàn))報(bào)告_第3頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、匯編第四次(分支和循環(huán)程序設(shè)計(jì)實(shí)驗(yàn))報(bào)告一、實(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)相 減產(chǎn)生的結(jié)果

2、來進(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)簡單條件轉(zhuǎn)移指令。根據(jù)單個(gè)標(biāo)志位的狀態(tài)判斷轉(zhuǎn)移條件。下表表示條件轉(zhuǎn)移指令標(biāo)志位的狀態(tài):標(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)移指令前使用比較

3、指令, 比較兩個(gè)無符號(hào)數(shù)A, B,指令進(jìn)行的的操作是A-B,其轉(zhuǎn)移指令如下:指令轉(zhuǎn)移條件意義JA/JNBECF=0 AND ZF=0A>BJAE/JNBCF=0 OR ZF=1A>=BJB/JNAECF=1 AND ZF=0A<BJBE/JNACF=1 OR ZF=1A<=B3) 帶符號(hào)數(shù)條件轉(zhuǎn)移指令。指令轉(zhuǎn)移條件意義JG/JNLESF=OF AND ZF=0A>BJGE/JNLSF=OF OR ZF=1A>=BJL/JNGESF OF AND ZF=0A<BJLE/JNGSF OF OR ZF=1A<=B在匯編程序設(shè)計(jì)中,要熟練使用循環(huán)指令和跳

4、轉(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)備

5、; 循環(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é)束條件LOO赫號(hào)CX=CX-1 ;若 CX=0 則循環(huán) cx=oLOOPNZ/LOOPNE號(hào)CX=CX-1若 CX=0且 ZF=0,則循環(huán) CX=0或 ZF=0LOOPZ/LOOpg號(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)地址

6、,否則順序執(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)行,如ex cx-1,j nz 等結(jié)合實(shí)現(xiàn)。四、實(shí)驗(yàn)內(nèi)容與步驟1、判斷方程AX2+BX+C=(是否有實(shí)根。若有實(shí)根,則將字節(jié)變量tag置1,否則置0。假設(shè)A B、C勻?yàn)樽止?jié)變量,數(shù)據(jù)范圍為-128127。流程圖如下:(1)代碼data segme ntA db 5B db 10C db 5tag db 0data endscode segmentassume cs:c

7、ode,ds:datastart:mov ax,datamov ds,axmov al,Bmul almov cx,axmov al,Amul Cmov bx,axmov ax,4mul bxsbb ax,cxcmp ax,0jl yepjmp nopeyep:mov al,1mov tag,al n ope:mov ah,4chint 21hcode endsend start(2)主要操作初始值a=5, b=10, c=5顯然有實(shí)根使用-u、-g命令查看結(jié)果,可知確實(shí)有tag=al=13000 cyciesr Frameskip 0r Program:7C即 EH師 BO01 ft2O3O

8、GB41CCD21C0Z10G000G000G 礙加 0GOGDX=0000 CS=1CA6I NTHI* =0006 MU UF DISI=0000 PL Efl NNBP=0G0G NU I IF JIT Proqra«21h:ErdSPM3O0GIP=06ZBSI=0GG0 PL ZR H 許DI 電300PE NCruyraiv tcrmi in ted RC =1!QW!l 0G23 :0G2S:0G(2O :磁命X=M01BX=9G15 CX=0GG4SAIGAS ES=LC35 SS-1CA4 CA5:06Za B41C nstxniot i on ffreakpoin

9、t=2801 BXeeis cx=og& =1CA5 ES=1DF SS=1OM ftib:&32A CDZ1ace InterruptDOS Box 0.74, Cpu speed:LMP«u«ul)ur<TrtlMD)DI)DDDII)DjjmmmiiaaaaaShort GWZO Short GGZ3 AL rQLh 00G9,hL IL4Ch ZlhZltiLBX+S1dAX LBX+SIEAL LBXSIJ.AL (BX+STEAL LBX+SI1.ALspaeee3000 cycles, Frames lei 卩 0, Program:DO

10、Bok 0.74,更改a=1, b=1, c=1,再次查看知al未賦值“ 1”,故tag仍為初始值“ 0”ICAb: 0D1F 兀庇JLahert (JtKJLCAb:«*Il Ebfcfejrwiihert tJUZOLCAb:BU01ruuAL,UlhICAb: ttKb AZfcJdOOHJULtjetaJ.flLl£Ab:磁H B44CMUUAH 沁口iICAb: 0tKA CDZ11NTICAb: UGKC C1)Z11MIZUiltAb:zioeANDLBX+aU.AXICAb: ytKJO tW0GADDLBX+iil J,ALlCAb:«3l32

11、06GGADDLBX+*il J,ALlCAb:(KW4 0(J0GADDLBX+iil J,ALICAb: OtUb 0W3GADD1BX+SIJ,AL-gLX=6e01cx=eeeinx=t«0eSP=e0GQ «K=DG00Sl=tBG01)1=0000D=lCAh =lCUbSli=lCA4Oi=lCA&IP=GtJ2H NU UP DICL H2 HAPE NCIXHb:磁tJ B44CMUUAH,4ChJmstruction BreakpointH曲色幻bx=«»ig磁1略旳畑SF=C)W0 珊老妙31=0900DI=0OWD 滸 1

12、X5 E3=1C95SS=1C4CS=1CA&1件磁2 HU UP 1HPL MS 舶PE NClCftb:救H CUZlIHT;tnd ProgramCpu speed:.1=11Trace Interrupt 一 t一-q退出2、編寫一個(gè)程序,判別鍵盤上輸入的字符;若是 1-9字符,則顯示之; 若為A-Z字符,顯示“C”若為a-z字符,顯示“c”;若是回車字符CR其 ASCII碼為ODH),則結(jié)束程序,若為其它字符則顯示顯示“ R'。流程圖如下:(1)代碼DATA SEGMENTCHAR DBDATA ENDSSTACK SEGMENTSTACK ENDSCODE SEGM

13、ENTASSUME CS:CODE,SS:STACK,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV AH,1HINT 21HCMP AL,0DHJE END1CMP AL,39HJBE L1JMP L2L1: CMP AL,31HJAE S1JMP END0L2: CMP AL,41HJB END0CMP AL,59HJBE END2JMP L3L3: CMP AL,61HJB END0CMP AL,79HJBE END3JMP END0S1: MOV DL,ALMOV AH,02INT 21HJMP END1END0:MOV DL,52HMOV AH,02INT

14、21HJMP END1END2:MOV DL,43HMOV AH,02HINT 21HJMP END1END3:MOV DL,63HMOV AH,02HINT 21HJMP END1END1:MOV AH,4CHINT 21HCODE ENDSEND START(2)主要操作分別輸入9 d G '以及回車,使用-t、-g指令查看結(jié)果如下,滿足要DOSBox O./4d 匚卩 u speed: 3OUU 匚 ycfes, I rameskip 0, Prog ram:13 上 xcDctugiSZ - Ucrsion 1.0CopyrightCOLarsonCoftut I ngC:&g

15、t;debn(j3Z 13, exf?DetugiSZ Ltersion 1.0 - CopyrightLarsonCoirvirt i ng1394de134 cxc>ebuy3Z 一 Cupjrlybt<C>Lar-suitConut t ivGCC:s>1>EBUG32 13.EXEJ>bug3Z UtJFLjiun l.G - CupijrlglkLCOLdi 憎 imCuirjut t 即丄994C;S?DEBUGJ£ 13 +EXEDebuySZ Uei-slDn l.G - CapqriyhttCLaapsonConjut i tk|

16、19943、分類統(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ù)。流程圖如下:1)代碼 data segmentbuf db 9,5,4,2,0,0,0,-1,-2,-3positive dw 0negative dw 0zero dw 0data ends code segmentassume cs:code,ds:datastart:mov ax,data mov ds,ax mov si,0 mov cx,10s:cm

17、p cx,0 je done dec cxcmp byte ptr si,0je s1jg s2jl s3 s1: inc zeroinc sijmp ss2: inc positiveinc sijmp ss3: inc negativeinc sijmp sdone:mov ax,positive mov bx,zero mov dx,negative mov ah,4chint 21hcode endsend start結(jié)果應(yīng)為四(2)主要操作易知,按輸入數(shù)據(jù) buf db 9,5,4,2,0,0,0,-1,-2,-3個(gè)正數(shù),3個(gè)零,三個(gè)負(fù)數(shù)即ax=4、bx=3、dx=3,使用-u、-g

18、指令查看寄存器結(jié)果如下圖:噩 DOSBox 0.74, Cpu speed:3000 tyc.les, F arneskp 0 Program: D.0 r 'IlcntGOirEBEAJITShort G0OBicnt:GceiFFGtoneoINCUord PtrGGh】4hJICStlcnoeosGEDE3JITSlturl GOODFF060C00INCWard Ftr600C1tCft6:O0ZC4&INCSIEBPCJITShort BOOB1CA6:fiAZFmuAXJAAfAllCft6;OO3ZBBiEeeooMOVBXJ9G6EtCAfc:O0368B16G

19、C60MOUDX40G6CBMCruuAH.1Chg 0606哄SP=0fifit»n?=ofimDSICAG 1ES=1C9G SS=1CC3=1CA6ir-9006NU UP DIFL Eft NftFE NClCAfc:G0368B16QC0OMOUDX40G6Cinstruction BreakpointRX=0fim 冥=f)f加哄刪碣l) I =>¥)(¥)IKMWS E3-1C95 SS-lCrtC3=1CMir-9GG2NU ur DIPL 引 NftFE MCtCAfc:0G*3AB44CMOUAH,4ChTrace Interrupt結(jié)果

20、正確!-q退出即可。4、編寫程序,在字符串變量 STRING存有一個(gè)以$為結(jié)尾的ASCII碼字 符串,要求計(jì)算字符串的長度,并把它存入 LENGTH元中。(要求用條 件控制循環(huán)方法,并且字符串分?jǐn)?shù)據(jù)類型是字節(jié)和字兩種情況)DBS( 1)代碼:DATA SEGMENTSTRING DB 'SABERSABEREXCALIBUR$'LEN DB ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV AX,0MOV DI,0S: CMP BYTE PTR DI,'$'JZ E

21、ND1INC DIINC AXJMP SEND1:MOV WORD PTR LEN,AXMOV AX,4CHINT 21HCODE ENDSEND START(2)操作:查看寄存器AX=13(即十進(jìn)制19),與輸入吻合,檢測(cè)成功岡 DOSLiox 0. /4, 1 puiOtKJ cycles, hrameski卩 0, Program: U.ICFU = 405 j Itettl Hudtj 133 比p =岀說,A20 disablnlItcn?;0wo ssnsicMOV帶CJSShlA7:0t»3 BEDBMOUDS, AXmuRX*f®Hfih1CA7:0O6G

22、E6GO00mou譏 eeoeh1CA7:00GB BH3OO0MOVDI reooh1CA7:900E SG3D24CMPBitc Ptr D】憶1CA7:0911 7404JSShari 0017lCA7:oaU 4?INCD11CA7:0O14 4£)INCAX1CA7:E®15 EZF7LOOP6GGE1CA?:0O17 (131490nouoom 川 x1CA?:O01A E64C的MD(JAX,GG4Ch-g tOlaCX=Hk:Cnx=axw sk=ow »p-gu(w sj=(*w di=ojijDS-1CA5 IS-1C95 SS-1CA4CS-

23、1CA7 f-G01A HU UP 01 FL ZR 冊(cè) FE NOlcnviooin uo4cooMOUftX,004ChInstruction BrcAkpcirtttAX=ogg 粒=00購 CX=WI;sfseuot-) 刖=麗理 si =(%»%) »i=eOT.D3-1CA5 E3-1C95 3S-1CA4CSICAT 】F-001J MU UP DI FL ZR Nh PE NO1CA7:0>1I> CC21hTZlli ;rruyraH TeininaleTrace InterruptDW型(1)代碼DATA SEGMENTBUF DB 'S','A','B','E','R','$'L DB 0DATA ENDSC

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論