2023年河北工業(yè)大學匯編實驗報告_第1頁
2023年河北工業(yè)大學匯編實驗報告_第2頁
2023年河北工業(yè)大學匯編實驗報告_第3頁
2023年河北工業(yè)大學匯編實驗報告_第4頁
2023年河北工業(yè)大學匯編實驗報告_第5頁
已閱讀5頁,還剩39頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

匯編實驗實驗一順序與分支程序設(shè)計-、實驗?zāi)康腎)掌握順序程序設(shè)計方法。2)掌握分支程序的結(jié)構(gòu)及分支程序的設(shè)計,調(diào)試方法。2)學習數(shù)據(jù)傳送及算術(shù)和邏輯運算指令的用法。3)熟悉在PC機上建立、匯編、連接、調(diào)試和運營匯編語言程序的過程。二、實驗內(nèi)容1)有一字變量BUF1是以原碼表達的有符號數(shù),規(guī)定將其轉(zhuǎn)換為反碼和補碼,分別存入BUF2和BUF3單元,并在屏幕上顯示出來。2)有兩個兩字節(jié)無符號數(shù)分別放在存儲單元A、B起始的緩沖器中,求其和,結(jié)果放在A起始的緩沖區(qū)并在屏幕上顯示。相加若有進位不存入存儲單元。。3)在BUF和BUF+1、BUF+2單元分別放有一個無符號字節(jié)型數(shù),編程序?qū)⑵渲凶畲髷?shù)存入MAX單元,并在屏幕上顯示。M)規(guī)定同上,只是比較的數(shù)為有符號數(shù)。5)將1()()()H單元開始的1()個字節(jié)數(shù),采用奇偶校驗,將奇數(shù)在前偶數(shù)在后仍存回原數(shù)據(jù)區(qū)。本實驗規(guī)定在DEBUG調(diào)試狀態(tài)下進行,涉及匯編程序、運營程序、檢查結(jié)果。

INT21IIMOVAH,4CHINT21HCODEENDSINT21IIMOVAH,4CHINT21HCODEENDSENDSTART;在屏幕上顯示結(jié)果;帶返回碼終止<C>MicrosoftCorp1981-1985,1987.Allrightsreserved.ObjectFilename(b.OBJJ:SourcelistingCNUL.LST]:Cross-reference[NUL.CRF]:50672+415568Bytessymbolspacefree0WarningErrors0SevereErrors:\huibian>linkbMicrosoft<R>8086ObjectLinkerUersion3.05Copyright<C>MicrosoftCorp1983,1984,1985.Allrightsreserved.RunFile[B.EXE]:ListFile[NUL.MAPJ:Libraries[.LIB]:Warning:nostacksegmentD:\huibian>b.exe9B8AD:\huibian>Exatn3:STACKSEGMENTSTACKDB1000DUP(0)Exatn3:STACKSEGMENTSTACKDB1000DUP(0)STACKENDSDATASEGMENTBUFDB72H,34H,1FH操作數(shù)都占有一個字節(jié)MAXDB2DUP(?),;定義其后的每個操作數(shù)都占有一個字節(jié);堆棧段結(jié)束;數(shù)據(jù)段;定義字節(jié)型變量,其后的每';定義字節(jié)型變量,其后的每操作數(shù)都占有一個字節(jié)

;數(shù)據(jù)段結(jié)束DATAENDS;數(shù)據(jù)段結(jié)束ASSUMECS:CODE,DS:DATA,SS:STACKBEGIN:MOVAX,DATAMOVDS,AX器DSMOVAL,BUFALCMPAL,BUF+1MOVDS,AX器DSMOVAL,BUFALCMPAL,BUF+1JNBLP1則順序向下執(zhí)行MOVAL,BUF+1ALLP1:CMPAL,;比較BUF與BUF+1大小;假如BUF不小于BUF+1,則轉(zhuǎn)到Ipl,否;將BUF+1所指向的一個字節(jié)數(shù)據(jù)裝入BUF+2;將81下和BUF1中較大的一個和BUF+2比較大小JAELP2;假如BUF2小,則轉(zhuǎn)到lp2,否則執(zhí)行順序向下執(zhí)行MOVAL,BUF+2;此時BUF2為三個數(shù)中最大的一個,將最大數(shù)裝入AL寄存器中LP2:MOVCX,04H;以下是將輸出的最大數(shù)轉(zhuǎn)換為相應(yīng)的ASCII值MOVDI,OFFSETMAXMOVDL,ALINCDILP3:ANDAL,OFHCMPAL,OAHJBLP4

ENDJBADDAL,07HLP4:ADDAL,30HMOV[DI],ALDECDTPUSHCXMOVCL,03HSHRDL,CLPOPCXMOVAL,DLLOOPLP3MOVDX,OFFSETMAXMOVAll,0911INT21HMOVAH,4CHINT21HCODEENDSBEGIN京命令提示符-InixiMicrosoft<R>MacroAssemblerUersion5.00Copyright<C>MicrosoftCorp1981-1985,1987.Allrightsreserued.京命令提示符-InixiMicrosoft<R>MacroAssemblerUersion5.00Copyright<C>MicrosoftCorp1981-1985,1987.Allrightsreserued.ObjectFilenameCa.OBJ]:Sourcelisting[NUL.LST]:Cross-reference[NUL.CRF]:50652?415812Bytessymbolspacefree0WarningErrors0SeuereErrorsD:\huibian>linkaMicrosoft<R>8086ObjectLinkerUersion3.05Copyright<C>MicrosoftCorp1983,1984,1985.fillrightsreserued.RunFile[A.EXE]:ListFile[NUL.MAPJ:Libraries[.LIB]::0■■

D7D\huibian>a.exe\huibian>.:0■■

D7DExam4:STACKSEGMENTSTACKDB1000DUP(0)STACKENDSDATASEGMENTBUFDB98H,75H,32HMAXDB4DUP(?),'$'DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKBEGIN:MOVAX,DATAMOVDS,AX

MOVMOVDS,AXMOVMOVAL,BUFCMPAL,BUF+1MOVAL,BUFJGLP1;JG為比較兩個有帶符號數(shù)的大小,比較BUF和BUF1的大小,若BUF>BUF1,則跳轉(zhuǎn)到1p1繼續(xù)執(zhí)行,否則順序向下執(zhí)行XCHGAL,BUF+1;互換AL寄存器中的內(nèi)容和BUF1,使AL寄存器中存放BUF和BUF1中較大的一個LP1:MOVMAX,ALJGElp2o;比較兩個帶符號數(shù),假如BUF2小,則轉(zhuǎn)到lp2,否則執(zhí)行順序向下執(zhí)行MOVAL,BUF+2。Lp2:MOVMAX,AL”;以下是將輸出的最大數(shù)轉(zhuǎn)換為相應(yīng)的ASCII值,

與1)題相同MOVex,04HMOVDI,OFFSETMAXMOVDL,[DI]INCDILP3:MOVAL,DLANDAL,OFHCMPAL,0AHJBLP4ADDAL,07HLP4:ADDAL,3OHMOV[DI],ALDECDIPUSHexMOVCL,02SHRDX,CLPOPCXLOOPLP3MOVDX,OFFSETMAXMOVAH,09HINT21HMOVAH,4CHINT21HCODEENDSENDBEGIND:\huibian>nasmaMicrosoft<R>MacroAssemblerUersion5.00Copyright<C>MicrosoftCorp1981-1985,198?.Allrightsreserved.Objectfilename[a.OBJ]:Sourcelisting[NUL.LST]:Cross-reference[NUL.CRF]:50652+415812Bytessymbolspacefree0WarningErrors0SeuereErrorsD:\huibian>linkaMicrosoft<R>8086ObjectLinkerUersion3.05Copyright<C>MicrosoftCorp1983,1984,1985.Allrightsreserved.RunFile[A.EXE]:ListFile[NUL.MAP]:Libraries[.LIBI:D:\huibian>a.exe75D:\huibian>實驗二循環(huán)與子程序程序設(shè)計一、實驗?zāi)康?)加深對循環(huán)結(jié)構(gòu)的理解。2)掌握循環(huán)程序的設(shè)計方法。3)學習子程序的定義和調(diào)用方法。4)掌握子程序、子程序的嵌套、遞歸子程序的結(jié)構(gòu)。5)掌握子程序設(shè)計、編制及調(diào)試。6)純熟掌握DEBUG的常用命令,學會用DEBUG調(diào)試程序。二、實驗內(nèi)容1)編制程序計算S=1+2?3+3?4+4?5+……+N(N+1)+……直到N(N+1)大「200為止,并將結(jié)果由屏幕上顯示出來。2)將從3000H內(nèi)存單元開始的100個字節(jié)存儲單元所有清0。3)編制在屏幕上顯示九九乘法表的程序。4)編制在屏幕上顯示用*組成的三角形的程序。5)設(shè)有五個字數(shù)據(jù)存放在以BUF為首地址的內(nèi)存單元中,規(guī)定采用調(diào)用多個字數(shù)據(jù)相加的子程序方法編程,和的低位字放在RESULT單元,和的高位字放在RESULT+2單元,并將結(jié)果顯示在屏幕上。6)編寫一個遞歸子程序,計算指數(shù)函數(shù)X"的值,其中X,n從鍵盤輸入。三、實驗設(shè)備PC機一臺四、實驗環(huán)節(jié)

1)按程序流程圖編制實驗程序。2)輸入源程序。3)匯編、連接程序,執(zhí)行程序,檢查結(jié)果。4)對內(nèi)存單元3000H開始的10()個存儲單元用E命令輸入任意數(shù)。5)程序的執(zhí)行可用DEBUG的G命令,也可用T命令單步跟蹤執(zhí)行。6)用D命令檢查執(zhí)行結(jié)果。五、實驗報告的規(guī)定1)列出源程序。2)對程序中用到的寄存器說明其功能。3)總結(jié)計數(shù)控制循環(huán)程序的設(shè)計方法。網(wǎng))說明如何使用DEBUG進行程序調(diào)試的。調(diào)試過程中所碰到的問題是如何解決的。、Examl:DATASEGMENTBUFDB,S=l+2X3+3X4+4X5+-+N(N+1)+-=\RESDW4DUP(0),芍'DMAENDSCODESEGMENTASSUMECS:CODE.DS:DATASTART:MOVAX,DATA

START:MOVAX,DATAMOVDSMOVMOVAH,INT2IHMOVDX,MOVDSMOVMOVAH,INT2IHMOVDX,MOVBL,NEXT:MOVAL,INCBLAXOFFSETBUF09H12BLMULADDCMPJNAMOVMOVADDNEXT1:MOVANDCMPJBADDNEXT2:ADDMOVDECPUSHMOVAX,200NEXTCX,0004HDI,OFFSETRESDI,03HAX,DXAX,000FHAL,0AHNEXT2AL,07AL,30H[DI],ALDICXCL,04SHRDX.CLPOPexLOOPNEXT1MOVDX,OFFSETRESMOVAH,09HINT21HMOVAH,4CHINT21HCODEENDSENDSTART/C:\fIHDOIS\systea32\cad.exe日日QMicrosoft<R>MacroAssemblerVersion5.00Copyright<C>MicrosoftCorp1981-1985,1987.Allrightsreserved.Object£ilenane(a.OBJ]:Sourcelisting[NUL.LST]:Cross-reference(NUL.CRF]:50664+415608Bytessynbolspacefree0WarningErrors0SeuereErrorsC:\huibian>linkaMicrosoft<R>8086ObjectLinkerUersion3.05Copyright<C>MicrosoftCorp1983,1984,1985.Allrightsreserved.RunFile[A.EXE]:ListFile[NUL.MAPJ:Libraries[.LIB]:Warning:nostacksegmentC:\huibian>a.exe3=1+2*3+3*4+4*5+14+N<N+l>+ii=045FC:\huibian>Exam3:DATASEGMENTATADDB?,2AH,?,3DH,?,?,2OH,'$'ATAD1DB?,2AH,?,3DH,?,?,ODH,0AH,z$'DATAENDSSTACKSEGMENTSTACKDB2OHDUP(0)6)從鍵盤上接受一位十進制數(shù)X,計算Y值,并以十六進制形式顯示出來,Y按下列公式計算。X2+XQX=3)X2-2X(X=4)X2(X=5)X2/2(X=6)7)從鍵盤上接受兩個一位十六進制數(shù)X和Y,然后再輸入一個A-D之間的一個字符,按下列規(guī)定計算。a)當輸入字符為A,則計算X+Y,并以十六進制形式顯示出來b)當輸入字符為B,則計算|X-Y|,并以十六進制形式顯示出來c)當輸入字符為C,則計算X*Y,并以十六進制形式顯示出來d)當輸入字符為D,則計算X/Y,并以十六進制形式顯示出來三、實驗設(shè)備PC機一臺四、實驗準備1)分析題目,將程序中的原始數(shù)據(jù)和最終結(jié)果的存取方法擬定好。2)畫出流程圖。3)寫出源程序。4)對程序中的結(jié)果進行分析,并準備好上機調(diào)試與用匯編程序及匯編調(diào)試的過程。五、實驗環(huán)節(jié)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVCL,09HMOVBL,OOHOKL:MOVAL,OOHINCBLOK1:INCALPUSHAXCMPBL,ALJZOKMOVBH,ALMULBLMOVDI,OFFSETATADCALLOKPPOPAXJMPOKIOK:MOVBH,ALMULBLMOVDI,OFFSETATADICALLOKPPOPAXLOOPOKLMOVAH,4CHINT21HOKPPROCPUSHAXPUSHBXPUSHCXADDBX,303OHMOV[DI],BHMOV[DI+02H],BLMOVCX,0AHMOVDH,OOHOKL2:CMPAX,CXJSOK2ADDCX,OAHINCDHJMPOKL2OK2:SUBCX,OAHSUBAX,CXMOVAH,DHADDAX,3030H

MOV[DI+04H],AHMOV[DI+05H],ALMOVDX,DIMOVAH,09HINT21HPOPCXPOPBXPOPAXRETOKPENDPCODEENDSENDSTARTBSD|衣C:\WINDO¥S\systea32\cMd.exeBSD0WarningErrors0SevereErrorsC:\huibian>linkaMicrosoft<R>8086ObjectLinkerUersion3.05Copyright<C>MicrosoftCorp1983,1984,1985.Allrightsreserved.RunFile[A.EXE]:ListFile(NUL.MAP1:Libraries[.LIB]:IC:\huibian>a.exe1*2=021*3-031*4=041-5=051*6=061-7071*2=021*3-031*4=041-5=051*6=061-7071*8=08lx?091*2=021*3-031*4=041-5=051*6=061-7071*8=08lx?092*2=042*3-062*4=082*5-102*6=122*7-142*8=162*9-183*3-091*2=021*3-031*4=041-5=051*6=061-7071*8=08lx?092*2=042*3-062*4=082*5-102*6=122*7-142*8=162*9-183*3-093*4=123*5-153*6=183*7-213*8=243*9-274*4=164*5-204*6=244*7-284*6=324-9-365*5-255*6=305*7-355*6=405*9=456*6=366*7-426*8=486*9-547*7-497*8=568*6=647*9-638*9-729*9-81|C:\huibian>|C:\huibian>|C:\huibian>Exam4:CODESSEGMENTASSUMECS:CODESSTART:XORBX,BXMOVDL,2AHMOVCX,9LOP:PUSHCXINCBLMOVCL,BLMOVDL,2AHLOP2:MOVAH,02HINT21HLOOPLOP2POPCXMOVDL,OAHMOVAH,02HINT2IHMOVDL,ODUMOVAH,02HINT2IHCMPBL,9JZENDPROLOOPLOPENDPRO:MOVAH.4CHINT2IHCODESENDS

ENDSTART同C:\fIHDOIS\systea32\cad.exe1回Q0WarningErrors0SeuereErrorsC:\huibian>linkaMicrosoft<R>8086ObjectLinkerUersion3.05Copyright<C>MicrosoftCorp1983,1984,1985.Allrightsreserved.RunFile[A.EXE]:ListFile[NUL.MAP1:Libraries(.LIBI:Earning:nostacksegmentC:\huibian>a.exeM-M-IHHf|C:\huibian>Exam5:STACKSEGMENTSTACKDB1024DUP(0)STACKENDSDATASEGMENTBUFDWOF101HJ10DH,52H,1OOH,456HCOUNT=($-BUF)/2RESULTDW4DUP(?)/$'DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKWDADDPROCPUSHDIMOVAX,0MOVDX,0MOVDI,OFFSETBUFNEXT2:ADDAX,[Di]JNCNEXT1INCDXNEXT1:ADDDI,2LOOPNEXT2POPDIRETWDADDENDPSHOWPROCPUSHCXPUSHDIMOVCX,04HMOVDI,OFFSETRESULTMOVBX,AXADDDI,07HBBB:MOVAX,BXANDAX,OOOFHCMPAL,OAHJBQQQADDAL,07HQQQ:ADDAL,30HMOV[DI],ALDECDiPUSHCXMOVCL,04SHRBX,CLPOPLOOPMOVCX,0004Hccc:MOVAX,DXANDAX,OOOFHCMPAL,0AHJBDDDADDAL,07HDDD:ADDAL,3OHMOV[DI],ALDECDIPUSHCXMOVCL,04HSHRDX,CLPOPCXLOOPCCCPOPDIPOPCXRETSHOWENDPBEGIN:MOVAX,DATAMOVDS,AXMOVCX,COUNTCALLWDADDCALLSHOWMOVDX,OFFSETRESULTMOVAH,09HINT21HMOVAH,4CHINT2IHCODEENDSENDBEGIN同C:\fIHDOIS\systea32\cad.exe1回QC:\huibian>masmaMicrosoft<R>MacroAssemblerUersion5.00Copyright<C>MicrosoftCorp1981-1985,1987.Allrightsreserved.Objectfilename(a.OBJ]:SourcelistingCNUL.LST]:Cross-reference(NUL.CRP]:50588+415684Bytessymbolspacefree0WarningErrors0SeuereErrorsC:\huibian>linkaMicrosoft<R>8086ObjectLinkerUersion3.05Copyright<C>MicrosoftCorp1983,1984,1985.Allrightsreserved.RunFile[A.EXE]:ListFile[NUL.MAPJ:Libraries[.LIB]:C:\huibian>a.exe000107B6C:\huibian>實驗三算術(shù)運算與代碼轉(zhuǎn)換程序設(shè)計一、實驗?zāi)康?)掌握算術(shù)運算程序的設(shè)計方法。2)掌握代碼轉(zhuǎn)換程序的設(shè)計方法。3)進一步掌握各種程序結(jié)構(gòu)。4)純熟掌握和使用用DEBUG調(diào)試程序。二、實驗內(nèi)容1)編制兩個多字節(jié)整數(shù)加法和減法程序,并將結(jié)果按十六進制形式顯示在屏幕上。2)編制程序?qū)崿F(xiàn)二進制定點數(shù)與十進制數(shù)的ASCII碼串之間轉(zhuǎn)換,并將結(jié)果顯示在屏幕上。3)編寫程序計算從鍵盤輸入兩個不超過四位的十進制數(shù)的和、差、積、商,并以十進制形式輸出。4)寫程序把從鍵盤輸入的四位十六進制數(shù)轉(zhuǎn)換為壓縮的BCD碼,并顯示輸出。5)編寫一通用過程用來將十進制數(shù)(從鍵盤輸入)轉(zhuǎn)換為P(從鍵盤輸入)進制數(shù)。三、實驗設(shè)備PC機一臺四、實驗環(huán)節(jié)1)按程序流程圖編制實驗程序。2)輸入源程序。3)匯編、連接程序,執(zhí)行程序,檢查結(jié)果。4)程序的執(zhí)行可用DEBUG的G命令,也可用T命令單步跟蹤執(zhí)行。5)用D命令檢查執(zhí)行結(jié)果。五、實驗報告的規(guī)定I)列出源程序。2)對程序中用到的寄存器說明其功能。3)總結(jié)算術(shù)運算和代碼轉(zhuǎn)換程序的設(shè)計方法。4)說明如何使用DEBUG進行程序調(diào)試的。調(diào)試過程中所碰到的問題是如何解決的。Eaxml:DATASEGMENT?ADB82H,34H,56H,78H,2AH,OBCH,0EFH,00HBDB34K56H.78H,9AH,0BCH,0EFH,16HLENBEQU$-BLEN2EQU(B-A)*2RESDBLEN2DUP(?),'$'DATAENDSSTACKSEGMENTPARASTACKDW20DUP(?)STACKENDSCODESEGMENTASSUMEDS:DATA,CS:CODE,SS:STACKSTART:oMOVAX,DATAoMOVDS,AX;多字節(jié)相加

1)輸入源程序。2)匯編、連接程序,生成.EXE文獻,執(zhí)行文獻,檢查結(jié)果。六、實驗報告的規(guī)定1)列出源程序,說明程序的基本結(jié)構(gòu),涉及程序中各部分的功能。2)說明程序中各部分所用的算法。3)說明重要符號和所用到寄存器的功能。網(wǎng))總結(jié)為什么在設(shè)計分支程序時必須解決三個問題:判斷、轉(zhuǎn)向和定標號。5)說明標志位CF、SF和OF的意義。6)上機調(diào)試過程中碰到的問題是如何解決的。7)對調(diào)試源程序的結(jié)果進行分析。Exam1:DATASEGMENTBUF1DW7898HBUF2DW4DUP(0),0AH,ODH,'$'DUP(0),'$,;數(shù)據(jù)段結(jié)束DUP(0),'$,;數(shù)據(jù)段結(jié)束;代碼段CODESEGMENT:段寄存器關(guān)聯(lián)說明ASSUMECS:CODE,DS:DATA偽指令BEGIN:MOVAX,DATA:段寄存器關(guān)聯(lián)說明MOVDS,AX;將數(shù)據(jù)段的基地址裝入數(shù)據(jù)MOVDS,AX;將數(shù)據(jù)段的基地址裝入數(shù)據(jù)CLCoMOVCX,LENBLOP1:MOVAL,A[SI]oADCAL,BIS1J-MOVA[SI],ALoINCSILOOPLOP1ADCBYTEPTRA[SI],0;輸出?MOVSI,03ADDSLLENBMOVDL0MOVCX,LENB+1L0P2:PUSHCXMOVAL,A[SI];高位轉(zhuǎn)換3MoVBL,AL-MOVCL,4?SHRBL,CLoCMPBL,0AHoJBNEXT)?ADDBL,07HNEXT1:ADDBL,30H?MOVRES[DI],BLINCDI;低位轉(zhuǎn)換0MoVBL,ALANDBL,0FIICMPBL,OAHdBNEXT2ADDBL,07HNEXT2:ADDBL,30HMOVRES[DI],BLINCDIoDECSIPOPCXLOOPLOP2MOVAH,09H◎MOVDX,OFFSETRESINT21HoMOVAH,4CHINT21HCODEENDSENDSTART/C:\fIHDOIS\systea32\cad.exe日日QC:\huibian>masmaMicrosoft<R>MacroAssemblerUersion5.00Copyright<C>MicrosoftCorp1981-1985,1987.Allrightsreserved.Objectfilename[a.OBJ]:Sourcelisting[NUL.LST]:Cross-reference(NUL.CRF]:50512+415760Bytessymbolspacefree0WarningErrors0SevereErrorsC:\huibian>linkaMicrosoft<R>8086ObjectLinkerUersion3.05Copyright<C>MicrosoftCorp1983,1984,1985.Allrightsreserved.RunFile[fi.EXE]:ListFile[NUL.MAP]:Libraries[.LIB]:C:Shuibian>a.exe0106ABE712CE8AB6C:\huibian>Exam5:DATASEGMENTSTRING!DB,INPUTYOURM=';$,STRING2DBINPUTYOURP=','$'REDB8DUP(3OH)DATAENDSSTACK1SEGMENTSTACKDW60HDUP(0)STACK1ENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKISTART:MOVAX,DATAMOVDS,AXMOVDX,OFFSETSTRING1MOVAH,09HINT21HMOVAH,01HINT21HANDAX,0000FHMOVDLJOMULDLMOVBX,AXMOVAH.O1HINT21HANDAL.OFHCLCADDBL,ALADCBH,0MOVDL,0AHMOVAH,02HINT21HMOVDL,0DHINT21HMOVDX,OFFSETSTRING2MOVAH.09HINT21HMOVAH.O1HINT2IHMOVDH.ALSUBDH,30HMOVDL,0AHMOVAH,02HINT21HMOVDL,0DHINT21HMOVAX,BXMOVBX,0001HMOVDI,OFFSETRELOP1:DIVDHADDAH.30HMOV[DI],AHCBWADDDI,BXCMPAUOJALOP1MOVCX,08HMOVDLOFFSETRECLCADCDI,CXLOP2:SUBDI,BXMOVDLJDI]MOVAH,02HINT21HLOOPLOP2MOVAH,4CHINT21HCODEENDSENDSTART同C:\fIHDOIS\systea32\cad.exe日日QCopyright<C>MicrosoftCorp1981-1985,1987.Allrightsreserved.Objectfilename[a.OBJ]:Sourcelisting(NUL.LST]:Cross-reference[NUL.CRF]:50626+415646Bytessymbolspacefree0WarningErrors0SevereErrorsC:\huibian>linkaMicrosoft<R>8086ObjectLinkerUersion3.05Copyright<C>MicrosoftCorp1983,1984,1985.Allrightsreserved.RunFile[A.EXE]:ListFile[NUL.MAP]:Libraries[.LIB]:C:\huibian>a.exeINPUTYOURM=14INPUTYOURP=500000024C:\huibian>實驗五輸入輸出程序設(shè)計一、實驗?zāi)康?)掌握輸入輸出程序的編寫方法。2)熟悉系統(tǒng)功能調(diào)用的方法。3)熟悉動畫程序的編寫方法。二、實驗內(nèi)容1)在CRT上每隔一秒連續(xù)顯示字符0—9。編程提醒為了使輸出的字符之間有空格,在每一個循環(huán)中輸出一個0—9的字符和一個空格。為了輸出0-9,置寄存器BL初值為0,每循環(huán)一次使其增量。為了保證輸出是十進制,增量后用DAA調(diào)整指令。由于輸出為一位十進制數(shù),用AND0FH指令屏蔽高4位。2)用系統(tǒng)功能調(diào)用將'HELLO,由鍵盤輸入,再從屏幕輸出'***HELL0***'。3)編制在屏幕上畫線的子程序,調(diào)用該子程序畫一矩形。4)編制字母下落一行的子程序,調(diào)用該子程序使字母從屏幕頂部下落到底部。5)創(chuàng)建一磁盤文獻,保存從鍵盤輸入的字符串。6)編寫程序用設(shè)立系統(tǒng)時間,一方面從鍵盤以十進制數(shù)形式輸入時間,然后修改系統(tǒng)時間,并重新以十進制形式顯示時間。7)編寫程序?qū)⑵聊环指畛筛駹?,每一格涂上不同顏色,格?shù)從鍵盤輸入。8)編寫程序在屏幕上顯示菜單,輸入相應(yīng)菜單的序號后,選種該菜單項。三、實驗設(shè)備PC機一臺四、實驗環(huán)節(jié)01)按程序流程圖編制實驗程序。。2)輸入源程序。3)匯編、連接程序,執(zhí)行程序,檢查結(jié)果。4)程序的執(zhí)行可用DEBUG的G命令,也可用T命令單步跟蹤執(zhí)行。五、實驗報告的規(guī)定1)列出源程序。2)總結(jié)輸入輸出程序及動畫的編寫方法。3)總結(jié)常用系統(tǒng)調(diào)用的功能及調(diào)用方法。ExamI:STACKSEGMENTSTACKDB1024DUP(O)STACKENDSCODESEGMENTASSUMECS:CODE,SS:STACKSTART:MOVBL,0LP:MOVDL,20HMOVAH,2INT21HMOVAL,BLADDAL,0DAAANDAL,OFHMOVBL,ALPUSHBXORAL,3OH

MOVDL,ALMOVAH,2INT21HMOVBX,3E8HLP2:MOVCX,I76H誕時1msLP1:PUSHFPOPFLOOPLP1DECBXTOC\o"1-5"\h\zJNZLP2POPBXINCBLJMPLPCODEENDSENDSTART>OZ.exe01Z340123401Z3401Z34012340123401Z34789012789012789012?8901Z78901278901Z75675675675675675679019019019019019016789067890678906789067890678901Z1Z121Z1Z1z678967896789678967896789Exam2:STACKSEGMENTSTACKDB1024DUP(0)STACKENDSDATASEGMENTBUFFBUFFBUFFDB6,7DUP(?),巧BUFFDB6,7DUP(?),巧INPUTMACROBUFEMOVDX,OFFSETBUFEMOVAH,0AHINT21HENDMPUTCHARMACROCHARMOVDL,CHARMOVAH,02HINT21HENDMCODESEGMENTdataASSUMECS:CODE,DS:DATA,SS:STACKdataSTART:MOVAX,DATAMOVDS,AXINPUTBUFF;讀取字符串-BUFFPUTCHARODHPUTCHAROAH;光標另起一行MOVCX,0003HNEXT:PUTCHAR2AHLOOPNEXTMOVCL,BUFF+lSUBCH,CHMOVBX,OFFSETBUFF+2;為正,反碼與原碼;為正,補碼與;為正,反碼與原碼;為正,補碼與;將符號位變?yōu)?;求MB求補碼;將補碼;W0004H^ACX;將DI指向MOVAX,BUF1;將字型變量BUF1的值裝入AX寄存器ADDAX,0;AX寄存器里的數(shù)據(jù)加0,以便進行轉(zhuǎn)移測試JSNEXT;判斷(AX)的正負,若為負則轉(zhuǎn)到NEXT,為正則往下順序執(zhí)行。MOVBUF2,AX同樣MOVBUF3,AX原碼同樣JMPEEENEXT:ANDAX,7FFFHNOTAX反碼MOVBUF2,AXUF1的反碼裝入BUF2INCAXMOVBUF3,AX裝入BUF3EEE:MOVCX,0004H計數(shù)器寄存器中MOVDI,OFFSETBUF2變量BUF2開始的存儲單元

BEGIN:MOVAL,IBXJPUTCHARALINCBXLOOPBEGINMOVCX,0003HNEXT1:PUTCHAR2AHLOOPNEXT1MOVAH,4CHINT21HCODEENDSENDSTARTC:S>003.exeHellolo***C:\>Exam5:SSTACKSEGMENTSTACK'stack'aDB1024DUP(?)SSTACKENDSDATASEGMENTaaSKNAMEDB0DH,OAH,'EntertheyDB'destfi1enamezS*aASKCONTDBODH,OAH,*Enterthestring,DB'asfilecontent:'0dh,0ah,'$'aFILEBLFDB62,63DUP(?)HANDDDW?MSGMERDB0DH,0AI1,OAHDB'Directoryfu11',ODH,0AH,'$'aMSGWERDBODH,OAH,OAHDB'Diskfu1r,0DH,OAH,,$,MSGSUCDBODH,0AH,OAHDB'WritefileisSuccessfuVaDBODH,OAH,'$'DATAENDSDISPLYMACROTEXTMOVDX,OFFSETTEXTMOVAH,09HINT21HENDMaCRIIANDMACROPATH,ATTRaMOVDX,OFFSETPATHMOVCL,ATTRaXORCH,CHaMOVAH,3CHINT21HENDMWRHANDMACROHAND,BUFF,BYTEaMOVBX,HANDaMOVDX,OFFSETBUFFaADDDX,2MOVCL,BYTEaXORCH,CHMOVAH,4OHINT21HENDMaCLHANDMACROHANDMOVBX,HANDaMOVAH,3EHINT21HENDMCODESEGMENTPROGPROCFARASSUMECS:CODE,DS:DATA,SS:SSTACKPUSHDSMOVAX,0PUSHAXaMOVAX,DATAMOVDS,AXaDISPLYASKNAMEMOVDX,OFFSETFILEBUFaMOVAH,OAHINT21HMOVDI,OFFSETFILEBUF[2]MOVBL,FILEBUF[1]aXORBH,BHMOVBYTEPTR[BX][DI],0OH<RHANDFILEBUF[2],0JCCRTERR4MOVHAND_D,AXaDISPLYASKCONTMOVDX,OFFSETFILEBUFaMOVAH,OAHaINT21HaWRHANDHAND_D,FILEBUF,FILEBUF[1]aJCWRITERRCLHANDIIAND_DaDTSPLYMSGSUCJMPEXITCRTERR:DISPLYMSGMERJMPEXITWRITERR:DISPLYMSGWEREXIT:RETaPROGENDPaCODEENDSaENDPRE:\>b.exelEnterthedestfilename:(DirectoryfullIE:\>b.cxcname:1Z3filecontent)?123name:1Z3filecontent)?123MOVDX,[DI];將。1所指的數(shù)據(jù)裝入DX寄存器中ADDDI,03;將口1指針下移三個字BBB:MOVAX,DX中的內(nèi)容裝入AX寄存器中ANDAX,OOOFH;即使BUF2的低四位不變,其余均變?yōu)?CMPAL,0AH;比較[AL]與OAH的大小,以便能對的轉(zhuǎn)換為MOVDX,[DI];將。1所指的數(shù)據(jù)裝入DX寄存器中ADDDI,03;將口1指針下移三個字BBB:MOVAX,DX中的內(nèi)容裝入AX寄存器中ANDAX,OOOFH;即使BUF2的低四位不變,其余均變?yōu)?CMPAL,0AH;比較[AL]與OAH的大小,以便能對的轉(zhuǎn)換為0-9的ASCII值JBQQQ;若[AL]<0All,貝IJ轉(zhuǎn)至UQQQ,否貝IJJ顧序執(zhí)行ADDAL,07H;由于[AL]〉0AH,所以QQQ:ADDAL,30H應(yīng)數(shù)字的ASCII值MOVMOVMOV[DI],AL;將MOV[DI],AL;將AL中的內(nèi)容裝入以DS中的內(nèi)容為段基地址,以DI的內(nèi)容為偏移地址的存儲單元中DECDIDECDIDECDI;DI=DI-1,即將DI指向前一個存儲單元DECDI4HPUSHMOVSIIRCXCL,04HDX,CL;保存CX寄存器的內(nèi)容4HPUSHMOVSIIRCXCL,04HDX,CL;保存CX寄存器的內(nèi)容;給?L寄存器賦值為0;將期]邏輯右移四位POPCXPOPCXPOPCX;恢復(fù)CX寄存器的內(nèi)容

LOOPBBB;循環(huán)判斷語句,CX=CX-POPCX1,若CX不等于0,則轉(zhuǎn)到BBB,將下一個低四位存入存儲單元中,否則循環(huán)結(jié)MOVCX,MOVCX,0004HMOVSI,OFFSETBUF3始的存儲單元MOVDX,[SI]寄存器中ADDSI,03HCCC:MOVAX,DXANDAX,OOOFH均變?yōu)?CMPAL,0AH能對的轉(zhuǎn)換為0-9的ASCII值JBDDDMOVCX,0004HMOVCX,0004HMOVSI,OFFSETBUF3始的存儲單元MOVDX,[SI]寄存器中ADDSI,03HCCC:MOVAX,DXANDAX,OOOFH均變?yōu)?CMPAL,

溫馨提示

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

評論

0/150

提交評論