微機(jī)原理與匯編語言程序設(shè)計(jì)課程設(shè)計(jì)_第1頁
微機(jī)原理與匯編語言程序設(shè)計(jì)課程設(shè)計(jì)_第2頁
微機(jī)原理與匯編語言程序設(shè)計(jì)課程設(shè)計(jì)_第3頁
微機(jī)原理與匯編語言程序設(shè)計(jì)課程設(shè)計(jì)_第4頁
微機(jī)原理與匯編語言程序設(shè)計(jì)課程設(shè)計(jì)_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

一、課程設(shè)計(jì)(綜合實(shí)驗(yàn))的目的與要求本課程設(shè)計(jì)包含軟件部分和硬件部分兩個(gè)環(huán)節(jié)。軟件部分:進(jìn)一步熟悉匯編語言設(shè)計(jì)方法和步驟,完成在有限的課內(nèi)實(shí)驗(yàn)環(huán)節(jié)無法涉及到的具有綜合設(shè)計(jì)性的軟件實(shí)驗(yàn),主要內(nèi)容包括:1.完善前期電話號碼本設(shè)計(jì)的功能;2.顯示器I/O程序設(shè)計(jì),完成窗口控制程序;3.發(fā)聲系統(tǒng)設(shè)計(jì);4.鍵盤程序設(shè)計(jì)。硬件部分:利用偉福試驗(yàn)設(shè)備中的8253可編程定時(shí)/計(jì)數(shù)器,8259中斷控制器,8255可編程并行接口芯片和七段數(shù)碼管等設(shè)計(jì)一個(gè)電子鐘電路,并編制一個(gè)程序使電子鐘能正常運(yùn)行。二、設(shè)計(jì)(實(shí)驗(yàn))正文軟件部分【實(shí)驗(yàn)一】:電話號碼本程序完善實(shí)驗(yàn)要求:根據(jù)課內(nèi)實(shí)驗(yàn)驗(yàn)收時(shí)指導(dǎo)教師提出的意見,以及和同學(xué)討論的結(jié)果,設(shè)計(jì)實(shí)現(xiàn)一個(gè)功能比較完善的電話號碼本,并在設(shè)計(jì)中體現(xiàn)自己的工作特色,即具備和其他設(shè)計(jì)不同之處。實(shí)驗(yàn)設(shè)計(jì):1)已有功能:(1)電話號碼本,包括人名和電話號碼。(2)程序可以完成電話號碼的添加、查詢,號碼本的排序和顯示。2)增加功能:(1)電話號碼中已有記錄條數(shù)顯示和剩余記錄數(shù)顯示(2)查詢時(shí)出現(xiàn)重名情況,顯示所有具有該名的人的信息(增加功能的)實(shí)現(xiàn)原理:1)建立一個(gè)可存放100項(xiàng)的電話號碼表,每項(xiàng)包括人名(最多10個(gè)字符)和電話號碼(最多11個(gè)字符)兩個(gè)部分。2)設(shè)置變量Storenumber已經(jīng)存入的電話信息數(shù)和變量spacenumber還可以存入的電話信息數(shù)。每當(dāng)添加一個(gè)記錄,storenumber+1,spacenumber-1,并且0WstorenumberW100,0WspacenumberW100。5頃白頃g皿ospacenunberdb100;還訶以存A&lC話信息數(shù)3)顯示Storenumber和spacenumber時(shí),用display子程序,用除10取余法將Storenumber和spacenumber轉(zhuǎn)換成十進(jìn)制數(shù)并輸出

4)在已有的Storenumber條記錄里,遍歷每條記錄的名字,只要名字完全相符,就■4)在已有的Storenumber條記錄里,遍歷每條記錄的名字,只要名字完全相符,就■■■■MiiMriii■■*iii■diilifriii■■A:■■?lit■ilitMJ'1-^-*/it基■Hit房■aifa■atit■Wit雋antitmtat?;用除]喊紊法將二進(jìn)制敖轉(zhuǎn)換成H制數(shù)并輸出displayprucHOUCNf3:用"除以循環(huán)狀xnr,h"hMOVHl,It)LP1;XORdhtahD]Ubl顧ahr3?H;咆除法后,時(shí)中存商湖申存余數(shù),余數(shù)轉(zhuǎn)換成對應(yīng)的機(jī)1】碼壓入棧pushanLOOPLP1H叫CX>3;將之前從低位到高位依次壓入的順序彈出,循環(huán)3次LP2:POPDKnovHlAhHOUAH.02HINT21HLOOPLP2retdMplwyendp實(shí)驗(yàn)實(shí)現(xiàn):1)子程序:mulu子程序一一顯示程序標(biāo)題并介紹各指令按鍵與功能Number子程序一一顯示已有和尚存電話條數(shù)信息③Storename子程序存入人名和電話號碼Order子程序一一冒泡排序,將輸入的名字和電話按名字排序Findname子程序一一查找并打印所有符合的名字及電話號碼Showall子程序一一排序后,打印所有已記錄的名字電話號碼2)主程序:①輸入指令并判斷;②根據(jù)輸入的指令,跳轉(zhuǎn)到對應(yīng)的功能區(qū)域和子程序做處理;實(shí)驗(yàn)結(jié)果1)初始界面:DOSBdx0.74rCpuspeed:3000cyclesFram1)初始界面:DOSBdx0.74rCpuspeed:3000cyclesFrameskipOfPro...TfeIEp11O11CBDk****IHress"H”:addanewrecord'rcss"F”:findrecordiress"S”:shnidalltherecords(press"E”:exitLstorertnumberl:090[RerrtainednumberI100ledieinputyuLirchoicie-2)添加電話記錄::addamewrecord:fimdrernrd:^}iuw<t11Diei-euuids:exitmumber]:0095numhprl:100leaseiinput:addamewrecord:fimdrernrd:^}iuw<t11Diei-euuids:exitmumber]:0095numhprl:100leaseiinputyourchoice:leaseInputaleaseIinputn.miimberPleaseinputyourchoice:aJplcaseInputuna.incwitlilesstliaii10chardeters:bbbbpleaseInputatelephoiiEnumberuith11numbers:22222222[storednumberJ:002[RegainednLimberJ?G93ledseinputyuuifcchoice:3)按照姓名排序并顯示所有電話記錄:[storednumberJ:002[RemainednumberJ?G93Pleaseinputyourdioicc:apleaseIinputanaineuithlessthaii10characters:bhbl>pleaseInputatelephonenumberuith11nuiiiliers;33333[storednumberJ:G03[Remainednumber]?G9?Pleaseiinputyourchoice:znameTelephoneRg1111111bbbb岸匕窟岸匕bbbL33333—[storednumber]:G03[Rerrtainednumber]G97ricaaeiinputyum1choice:-——4)顯示查找到的姓名為bbbb的人的電話信息:[sLuiednumber];GOO「Rennin前numtiFrl:S7Heaseinputyourclioice:fpleaseImputtlicnameyouFimding:bbbbnameTelephoneUbL22222222bbbb33333實(shí)驗(yàn)代碼DATASSEGMEHTbaqkdb2伽(lnp(H門bookenddyufnara?db10dlup(?)storpnunberdb0spa'C'Pfiiuiiihpt*db1utiflHdtdldli0用字蝴入的蝴中區(qū)telinjmi?db11db?db11dup(?)[電話輸入g巾區(qū)phonedb12dbYdb12<liiip(?)i目錄信息址地末畤入槌馨錄坯姓f記已L/寶信翦可記多?時(shí)電/否,使查入彝本的出存以標(biāo)于Asm〕還用labledbtislhiladbtislbiFdbtishisautishiedbllneldlblimedb:提示輸入信息tl^hli(iiejinnamedibinphoneflndnanesdD;提示輸出倍患inforidbinFor2如^hui#dbnaperson曲nonime>dH9,?*■■??**i+■■???*#■■??#*#Telpfhone日。。k■??**■■■??**■■■??**■,QdhBQah>■$11'Press"[fir":ddddnF!#rtcard'?0iHipCidl,hp■PresswlFhh::Fiiaidrecordl*\OdhT0iah3'$1■press:showallthereciros■..adin.tMiri,'$fc■press"1""::^xit呼.9。h.Oah,?$?BTQdh^Qahi,*$p1BP0dhrOah/$B■Pledge■please■please'pleaseinpulInputInputInputyourLhaiLv:Bt'$"mnanpuithIeesthan10characters:a11$atelephonenumberifith11numbers:-.thenawjfouFinding:'pq$'OiiTASENPS|'[storednunber]:8/$';-[Renainednumber]:8,*$*;NdneTelepliuiiELDdli,Odh,'4NdPsrsDnl*.OidlhRflah,4$'Sorrytlhensneisnotexistpd?的存到示示旨潮$■;代碼段CODESSEGMENTft^SUMESTftllT:MIIU心.DM低MOUDSgciLLmu1IImain:MILnunhprmovdh,0111iut21hcallcrlfempdl/M'jeWDempal/a'jeWDempal,'F'jeFINDempalt1f1jeFINDempt1S1jeSHempalt15'jeSHenpalF1E1j已EXITempalF>1jeEXITjmpmainRD:瘤加新的記錄LeadKtinnanenouah.@9hint2inDdllstortridnerailcrlfLeadx,inphonefwumh,四h£nrzini^llstorephuneincstorpnunberdecspacenunbermilordercallcfIFcd11crlFcallcrlfjmpiuinFIND:;根據(jù)姓名查找電話號碼leadxtfLnditanesnovah,(Whint21hcallFindnamecd11trlFcd11crlfcallcrlfjmpiuinSH:;顯示所有電話號碼LeadKtshounouahTfl^hint21hcallsliDinallcj11crlfcallcrlfcallcrlfjfiipiuinEXIT:;退出muahviirhint21h■■n-ttin■wHu■?*!!!?■5tOFENa*子彳雖I手?mu■n-n-fl-11!■■w■■nn-h■■■???■????■■:輸入名字并保存到M曲電話本中g(shù)tor^iidneprfliCipusii>idixiptiSllpushsipush<Hpushb?Ilesib^ihookleaflx.ttlnanp;輸入甦名muuah|Odhint21h::::搭麟gir的指針mulstorenunfiprmuu>|[IILpjmmOVEKp11::將輔A姓名存入電話本.將最后的回車換成■$?.之后的空輅傕舊,一共11個(gè)字符riDVdlfteloamefSi+Sjcmpal,jt5tup*>u[tav*diJTallinesi&diloopn^metobookstop:moual#24-hmov[bM+di]RalloopmarietQOookpoplb:xpopiiIfjiup5popBXpopdxretstarenameendip;扯*蚪村雖雖科*雖雖麟普雖*?■炷雖黑責(zé)烽艱生■村?:炭暴奈■村烽炭果村畏炭來*置扯麟詈雖*蚌普呆是蚪普雖*■村烷果村村:■;輔入電話并保存到血曲電話本中starepHoneprntpushdxpushrxpushsipushdipushbx1eb^^bnokleadxvphone:輔入電話號碼mouah,Qdhint211movsi>0滯向獨(dú)人的電話的篷沖區(qū)的指針muudl+23mulsto-reimmhermuuill4.^k皿dl?11;獲宿電話本末地址muuex#12phonetiobioDlH:;將輸入電話存入電話本,將最后的回車換成5.之后的空格依舊,一共1玲字符niDUal+phanefs].*2]empdlrMhjestopRav[bx^-di]?alihEsiIriicdiloopphanetabonkstop:mualP2^hrov[bK*di]Ralloopphonetcbookpop[誠pop>diiipup-sipopaxjjup>dlxretslurEpliofflit?etiilpXorCk^CXhduclr5tDi-eniutiiberTOC\o"1-5"\h\zcnpexjbeexitl;將storenunbEK^>\C!!■若不用排序decexFioualTstoreniJnberdecalnoubl,23mulnnvnounoUloopin:mou^ddgo:cnpJbmoucnpjzjgccjnlinue:addJinpblboohend?a^<51rodiresiFdisit23bookendfSlluopoutalfbook[di]|al^baoh[5Ljequalchangesi,23y°二吳1BJH最環(huán)環(huán)si計(jì)內(nèi)外苜地址,,并存在bookend4);內(nèi)循環(huán)從外循環(huán)的下一條開始:內(nèi)循環(huán)退出條件.tH>okenfl<sl償環(huán)環(huán)

-■-IFFTT%%里子初下

的<-K續(xù)

環(huán)一盤

循下環(huán)環(huán)

和SEk信息的苜字母集交換contimiE;MdlSi^23j"!1咿pushcmpu&hdipushsiF1CUCKV1Unext:incdiincsindU1dl,lliaDk[di]cnpal,bcak[Ei]jlcontinue11qcihangBlloopneKtcontimiuel:;外箍環(huán)的小內(nèi)循環(huán)繼綻下一條-;相等時(shí)?繼瀆比較下一字母F比較前壓棧相應(yīng)寄存器cootiwuiechanq^Ipopsipopdipupcsi.jnpcontinuechange!i|1叩sipopdipopexjnpchangechdmge:pushCMpuishdipushsihcju5*23chan:nnu!alvboDk[di]xcigJlfbaokfsi]xchgbDolk[idi±]ziincsiincdiloopchanpupsipopdipopCM;對應(yīng)兩條電話信息,互相交換’交換前對應(yīng)寄存器壓棧,交換后出棧popdipopexjnpcontinue偵"pgt:;外循壬祥畛比較下一條*di,23Implonpinp^iti:popflipopsip叩Uxpupaxpupl*xpopCKretortierendp【卻序后.打印所有巳記錄的名字和電話號碼shouallprocpushjxpushexpushdxKU『;紿的賦值存儲(chǔ)的電話信息條數(shù)r限制輸出rwvclrstnrenijnihprempext&jenastore滸儲(chǔ)條數(shù)為。時(shí).提示沒有信息ledbxnbnok?eKt:;每條信息,姓名11個(gè)字符,號碼U個(gè)字符、共芝峪字符,為一條pushCMnullCM,23npstl:iwudljht]海條信息中,輸出時(shí),遇到$就跳過’繼續(xù)輸出下一^符empdlr24hjznext?mouah,02hint21hneXtW:incbxloopnFKtlcallcrlfpQpCMloopnextjnpexit2nostore:leadx^nopersonintzinexit2:pupdxpopCXpopaxretshowj1.1?ndp;It?H?Kf10JR.1^IBBHMHMHMHMBMBMBHK■■■■■-It■-?■?■■?■■「;查找并打印所有符合的名字及電話號媽pits11d*ipu&llaxipu^llexpifsllbKnuuFindedt0ledpits11d*ipu&llaxipu^llexpifsllbKnuuFindedt0leddx,詞nupinnuah.Hahint21hcallcrlfleabx,fFidHUPmoudi,flnwy51,finwv脆iwBFiMnwual?telnidmeenpdl,Bdhjestopnwv[&x+ai]Balific51Mediloopin^metoFinidFindnameproc否找到該姓名;將輸入的姓名存到Fnane中’將輸入串的最后一個(gè)回車符變?yōu)?$,stop:nwunwvloopxormo#mouagain:pushpushmynatchinoyempJ.僮rtuy匚呷火■l,24h[bx*di]RalndmetoFindexvcx■cl^storenumberalaFnane[si]alg24hiiidtrh1AhBbnak[bx*$l]?9li924rimdtizlhbiiss:開始查找垓姓名,將牌賦值為序人的電話條數(shù):指示電話本中匹配到的每一條的首堀11;取查找姓名的低對個(gè)字符,并比較是否是;比較此時(shí)匹配到的電話信息的姓君的第5是否是,$?i都是?*'匹百倒最后,甌成^曜到未尾,tbfest曜到未尾,tbfest應(yīng)的字奇是否相等,相等就字符,不等就看Tf電話;匹配成功,骨改標(biāo)志位月ex,浦出標(biāo)題和匹配倒依電詰信息;不一親電話■信息,蛔?網(wǎng);用刊判斷是否拔到電話悟息:未找到就轅出沒有該姓名rwtchiil二empalTbaDl{|[bi:-i"Si]jnzneKt皿51.11Jffip?4tchempfinded.*0[hedi/p日leadK^shoufkiuBh.曲hint21h<MuF“』MB1dispe=:muic;k,芝9mudiT0>disptli:nowSlvV)Mk[bK*(ll]CRp岫】j2di^plnauah+fl*2hint21Hiuispi:ADVdi,1loopdljpoc^llcrlFnext::pap<E!Xpapbuaddbu,23luup4ydinvkjuempjnzdoLeaiIm.nonanenauah309hintUhdo:popbxpopex.p叩ax.popd宣iact||

*MHifM?M-MKiKMKMKMIfIEM>N-IEMMKiM9t?0UAll)PI""T4?ItMMKM9tW?lE9fMHltKiKSIItMMKftIEMMK9fKIfrItHIE濕示已有和尚存的電話條數(shù)信息,提示輸入一謎擇操作iiunbtr|irocpushHXpushdxHOUdx,offsetinforlinuudli¥09hint21hmoual,5torcnunbercalldisplay;,tistorenumber^^成十謎制數(shù)并輸出Cdllcrlfmoudx?oFf5PtinFor2HOUa"9hiftt21hI1UUdljSpacenunljerrJlldisplay;^spacenunber$|換成十進(jìn)制數(shù)并輸出callcrlfmoudKjOFfsetlinemau8口皿int21hnoudx.offsettHld;選擇進(jìn)行何種操作nou皿int21I)p叩dxpopaxretnunber頃Up;卜…………bU子程序;回車并換行模塊crlFproispushaxpushdxROMdlfQdhmnuahWhint21riinuudl.Odlimouint21nPopidxpop-axretcrlFend|i;it****-*****************-******dlsp子彳呈序****?***********?<*************;用除1哪條法將二避制數(shù)轉(zhuǎn)挨成十進(jìn)制數(shù)并輸出displayprocMOUCX,3F用洲除ttbl=m,循環(huán)欲xorahHDUB1J0LP1:XDRah?ahD1Ublah,3麗;咆除法后,M中存商中存余數(shù),余數(shù)轉(zhuǎn)換成對應(yīng)的皓C1I碼壓入核PUSHIXLOOPLP1M叫CX.3;將之前從低位到高位依次壓入的順序彈出,循環(huán)3次LP2:POPDxmoudi,dhHDUAHr0ZH1HT21HLOOPLP2retdisplay@ndpCODESEWSENDSTfiRT【實(shí)驗(yàn)二】:顯示器I/O程序設(shè)計(jì)實(shí)驗(yàn)要求:要求在屏幕上開出三個(gè)窗口,它們的左上角和右下角的坐標(biāo)分別是(5,10),(15,30)和(5,50),(15,70)和(18,15),(22,65),如從鍵盤輸入字符,則顯示在右窗口,同時(shí)也顯示在下窗口的最下面一行。若需要將字符顯示于左窗口,則先按下一鍵,接著再從鍵盤輸入字符,字符就會(huì)從左窗口的最下行開始顯示,同時(shí)下窗口也顯示出左窗口的內(nèi)容。如果再按下一鍵,輸入字符就會(huì)接在先前輸入的字符之后顯示出來。當(dāng)一行字符顯示滿后,窗口自動(dòng)向上卷動(dòng)一行,輸入字符繼續(xù)顯示與最低一行,窗口最高一行向上卷動(dòng)后消失。實(shí)驗(yàn)設(shè)計(jì):1)功能設(shè)計(jì):(1)創(chuàng)建三個(gè)窗口;(2)判斷是否需要上卷以及實(shí)現(xiàn)窗口上卷(3)設(shè)置光標(biāo)位置;(4)在光標(biāo)處輸出字符。2)流程圖:2.3.實(shí)現(xiàn)原理:1)ROM-BIOSINT10h——顯示器功能調(diào)用①Ah=02h——設(shè)置光標(biāo)位置②Ah=06h——窗口上滾;宏定義隊(duì)創(chuàng)建窗口以及滾動(dòng)窗口createnacranumberTtDpleft_r,topleftcJiottomriyhtr.bottomriyhtcL保護(hù)"的做防止被修改:影響到林應(yīng)的醯出pushaxnou-mouinouimovinouihduimou|intpopendmah,6al,num。"ch,topleft_rcl,topleft_cdhtbottonriqhtr01,bottonright_cbh,F4hiQhax憤列號口的左口的右下角行號旦碇若下角列號上MbI孟顯示器?能調(diào)用③Ah=0ah——在光標(biāo)處寫字符I;宏定義2:在光標(biāo)處輸入字符并在屏幕顯示writpmacro;nouan.uaniwubht0;第。偵IIMJVCXf1;逢繡寫字符敬設(shè)為iint1Bh回等待的acsWS.輸出M里面的宇符erdn實(shí)驗(yàn)實(shí)現(xiàn):1)數(shù)據(jù)段①flag——一標(biāo)記第一行是左窗口0還是右窗口1(默認(rèn)值0)②x0,y0;窗口0當(dāng)前光標(biāo)位置(x0,y0)(默認(rèn)值(15,10))③x1,y1;窗口1當(dāng)前光標(biāo)位置(x1,y1)(默認(rèn)值(15,50))④x2,y3;窗口2當(dāng)前光標(biāo)位置(x2,y2)(默認(rèn)值(25,15))2)代碼段a)宏定義:guangbiao宏定義設(shè)置光標(biāo)位置;write宏定義——在光標(biāo)處輸入字符并在屏幕顯示;create宏定義一一實(shí)現(xiàn)創(chuàng)建窗口以及滾動(dòng)窗口。b)主程序:初始化三個(gè)窗口及光標(biāo)位置;從光標(biāo)處輸入字符;第一行兩個(gè)窗口處理:判斷此時(shí)第一行是在左窗口還是右窗口,并跳轉(zhuǎn)到對應(yīng)窗口的處理區(qū)域。若是在右窗口,判斷字符是否為“->”,是則需改變窗口0到窗口1,不是則在光標(biāo)處寫字符,光標(biāo)后移并判斷是否需要上卷一行,需要就用create上卷,重置光標(biāo),不需要就直接進(jìn)入下方窗口的輸出處理區(qū)域。若是在右窗口,判斷字符是否為“<-”,是則需改變窗口1到窗口0,不是則在光標(biāo)處寫字符,光標(biāo)后移并判斷是否需要上卷一行,需要就用create上卷,重置光標(biāo),不需要就直接進(jìn)入下方窗口的輸出處理區(qū)域。④下方窗口處理:光標(biāo)設(shè)置在下方窗口,并在光標(biāo)處輸出字符,判斷是否需要上卷,需要就用create上卷,不需要就繼續(xù)輸入字符。實(shí)驗(yàn)結(jié)果1)初始界面:光標(biāo)在第一行右側(cè)窗口。2)輸入文字,輸入內(nèi)容顯示在右上角和下方窗口,并自動(dòng)上卷:3)按“<-”,則輸入顯示在第一行左窗口和下方窗口,并自動(dòng)上卷:

4)按"->”,則輸入顯示在第一行右窗口和下方窗口,并自動(dòng)上卷:實(shí)驗(yàn)代碼DATASSEGMENTflagdb1;標(biāo)記是左窗口0還是右窗口1;窗口0當(dāng)前光標(biāo)位置(x0,y0)x0db15y0db10x1db15;窗口1當(dāng)前光標(biāo)位置(x1,y1)y1db50x2db22;窗口2當(dāng)前光標(biāo)位置(x2,y2)y2db15DATASENDS.““““““““““““““““““““““““““““士赫-Hr““““““““““““““““““““““““““““““““?個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)么T乂沃個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)

;宏定義1:設(shè)置光標(biāo)位置guangbiaomacrox,ymovah,2movbh,0;光標(biāo)所在頁號movdh,x;光標(biāo)所在行movdl,y;光標(biāo)所在列int10h;BIOS調(diào)用,置光標(biāo)位置endm;宏定義2:在光標(biāo)處輸入字符并在屏幕顯示writemacro;movah,0ahmovbh,0;第0頁movcx,1;連續(xù)寫字符數(shù)設(shè)為1int10h;al=字符的acsii碼,輸出al里面的字符endmpushax;保護(hù)ax的值,防止被修改,影響到win2的輸出;宏定義3:創(chuàng)建窗口以及滾動(dòng)窗口createmacropushax;保護(hù)ax的值,防止被修改,影響到win2的輸出moval,number;要滾動(dòng)的行數(shù)movch,topleft_r;滾動(dòng)窗口的左上角行號moval,number;要滾動(dòng)的行數(shù)movch,topleft_r;滾動(dòng)窗口的左上角行號movcl,topleft_c;滾動(dòng)窗口的左上角列號movah,6;白底紅字int10h;白底紅字int10h;ROM-BIOS顯示器功能調(diào)用movdh,bottomright_r;滾動(dòng)窗口的右下角行號movdl,bottomright_c;滾動(dòng)窗口的右下角列號movbh,74hpopaxendm?旦-rh““““““““““““““““““““““““““““.*******************************十4、干/TT乂沃個(gè)***************************CODESSEGMENTASSUMECS:CODES,DS:DATAS

START:MOVAX,DATASMOVDS,AXcreate11,5,10,15,30create11,5,10,15,30;初始化窗口與光標(biāo)位置create11,5,50,15,70create5,18,15,22,65putin:guangbiao15,50;輸入字符putin:movah,0int16h;BIOS調(diào)用,從鍵盤讀字符,al=ASCII碼,ah=掃描碼cmpint16hcmpflag,1;判斷在左窗口0還是右窗口1jzwin1_win2win0win2:;窗口0和窗口2顯示時(shí)cmpah,4Dhwin0win2:;窗口0和窗口2顯示時(shí)cmpah,4Dh;判斷字符是否為右方向鍵,是否需改變窗口0到窗口jztowin1;需要就跳轉(zhuǎn)到towin1guangbiaox0,y0;不需要就設(shè)置光標(biāo)在win0writeincy0cmpy0,30;判斷是否需要上卷一行jnanoscroll0;不需要就跳轉(zhuǎn)到noscroll0writeincy0cmpy0,30;判斷是否需要上卷一行jnanoscroll0;不需要就跳轉(zhuǎn)到noscroll0create1,5,10,15,30;需要就利用create上卷一行,并重置光標(biāo)movy0,10noscroll0:;noscroll0部分,不需要上卷,直接光標(biāo)后移,跳轉(zhuǎn)到在win2顯示字符的部分guangbiaox0,y0jmpwin2showtowin1:;towin1部分,將光標(biāo)設(shè)置為窗口1的光標(biāo),改變flag,繼續(xù)輸入字符guangbiaox1,y1movflag,1jmpputinnoscroll0:towin1:win1win2:;窗口1和窗口2顯示時(shí),和上部分結(jié)構(gòu)相同cmpah,4Bhjztowin0guangbiaox1,y1writeincy1cmpy1,70jnanoscroll1create1,5,50,15,70movy1,50noscroll1:guangbiaox1,y1jmpwin2showtowin0:guangbiaox0,y0movflag,0jmpputinwin2show:guangbiaox2,y2writeincy2cmpy2,65jnanoscroll2create1,18,15,22,65movy2,15noscroll2:jmpputinMOVAH,4CHINT21H;判斷字符是否為左方向鍵;noscroll1部分;towin0部分;在win2輸出;窗口2光標(biāo)設(shè)置;顯示字符;判斷win2是否上卷;不大于,不上卷,跳轉(zhuǎn)到noscroll2;大于,需要上卷1行;光標(biāo)回到新一行起點(diǎn);noscroll2部分,繼續(xù)輸入字符CODESENDSENDSTART3.【實(shí)驗(yàn)三】:發(fā)聲系統(tǒng)設(shè)計(jì)實(shí)驗(yàn)要求:要求當(dāng)按下1?8數(shù)字鍵時(shí),分別發(fā)出連續(xù)的中音1?7和高音i(對應(yīng)頻率依次為524Hz、588Hz、660Hz、698Hz、784Hz、880Hz、988Hz和1048Hz);當(dāng)按下其他鍵時(shí),暫停發(fā)聲。如果時(shí)間允許,可在此基礎(chǔ)上自行發(fā)揮,如增加按鍵功能、編輯歌曲等。實(shí)驗(yàn)設(shè)計(jì):1)基本功能:(1)當(dāng)按下1?8數(shù)字鍵時(shí),分別發(fā)出連續(xù)的中音1?7和高音i。(2)當(dāng)按下其他鍵(除“u”和“1”)時(shí),暫停發(fā)聲。2)增加功能:(1)當(dāng)按下“u”(up)時(shí),發(fā)出的音在當(dāng)前播放的音基礎(chǔ)上上升一個(gè),如果超出1-8范圍則暫停;(2)當(dāng)按下“1”(1ow)時(shí),發(fā)出的音在當(dāng)前播放的音基礎(chǔ)上下降一個(gè),如果超出1-8范圍則暫停;實(shí)現(xiàn)原理:1)發(fā)聲原理:通過給計(jì)數(shù)器2設(shè)定為方式3,先低后高寫入不同的計(jì)數(shù)值,實(shí)現(xiàn)不同頻率的方波發(fā)生器,從而發(fā)出各種頻率的聲音。2)獲得計(jì)數(shù)值:判斷輸入的字符,找到hz表中對應(yīng)的計(jì)數(shù)值賦值給計(jì)數(shù)器,或hz表中后一位/前一位賦值給計(jì)數(shù)器。實(shí)驗(yàn)實(shí)現(xiàn):1)數(shù)據(jù)段Hz表——存儲(chǔ)要求的8個(gè)頻率對應(yīng)的計(jì)數(shù)值Hz1193180/524,1193180/588,1193180/660,1193180/698,1193180/784,1193180/880,1193180/988,1193180/1048previous——記錄前一發(fā)出的音調(diào),用于“u”和“1”的功能實(shí)現(xiàn)。2)程序段a)子程序:spenkon子程序揚(yáng)聲器開子程序。當(dāng)PB0與PB1同時(shí)為高電平,揚(yáng)聲器才打開speakoff子程序揚(yáng)聲器關(guān)閉子程序。令PB1PB0=00B,其他位不變。b)主程序:通過控制字,設(shè)置計(jì)數(shù)器2工作方式為方波發(fā)生器;輸入字符;判斷是否是“u”或“1”,是則在前一音基礎(chǔ)上,進(jìn)行升降調(diào);

判斷是否是1-8,是則將hz表中對應(yīng)數(shù)值賦值給計(jì)數(shù)器2,都不是則暫停。實(shí)驗(yàn)結(jié)果DUS-1)輸入1-8時(shí),發(fā)出對應(yīng)的音調(diào):DUS-DOSBox0,74Cpuspeed:30QQcydesrFrameskip0,Pro...2)輸入“疽'或“l(fā)”時(shí),進(jìn)行升調(diào)和降調(diào):DOSBox0.74Cpuspeed:3DOOcycles,Frameskip0DOSBox0.74Cpuspeed:3)按下除了1-8、“u”和“l(fā)”以外的按鍵,聲音暫停:囹DOSBoxD.74;Cpuspeed:3000cycles,Frameskip0,Pro..,—X實(shí)驗(yàn)代碼DATASSEGMENT;中音1?7和高音i,對應(yīng)頻率依次為524Hz、588Hz、660Hz、698Hz、784Hz、880Hz、988Hz和1048Hz,ax=1193180/發(fā)音頻率hzdw1193180/524,1193180/588,1193180/660,1193180/698,1193180/784,1193180/880,1193180/988,1193180/1048previousdw0DATASENDSCODESSEGMENTASSUMECS:CODES,DS:DATASSTART:MOVAX,DATASMOVDS,AXmoval,0b6h;通過控制字,設(shè)置定時(shí)器2工作方式,al=10110110,方式3-方波發(fā)生器,先低后高寫入out43h,alagain:movah,1;輸入字符int21hcmpprevious,0;判斷是否有前一音,即是否在播放中jznopreviouscmpal,'u';播放中,按下'u'就可以在前一音基礎(chǔ)上,進(jìn)行升調(diào)jzincreasecmpal,'l';播放中,按下'1'就可以在前一音基礎(chǔ)上,進(jìn)行降調(diào)jzdecreasenoprevious:cmpal,'1';判斷是否為數(shù)字1?8jbnextcmpal,'8'janextsubal,31h;將1?8變?yōu)??7,存于alshlax,1;因?yàn)榇鎯?chǔ)為字型變量,所以要將0-7變?yōu)榈刂菲茣r(shí)要乘以2xorah,ahmovbx,ax;bx獲得偏移量movprevious,axmovax,hz[bx];取出對應(yīng)的記數(shù)值out42h,al;設(shè)置定時(shí)器2的記數(shù)值moval,ahout42h,alcallspeakonjmpagain;連續(xù)發(fā)聲,直到按下另一個(gè)鍵next:;暫停callspeakoffmovprevious,0jmpagainincrease:;在正在播放的音調(diào)基礎(chǔ)上升調(diào),當(dāng)超過限定音調(diào)時(shí)暫停addprevious,2cmpprevious,14;與最高音比較janextmovbx,previousmovax,hz[bx]out42h,almoval,ahout42h,alcallspeakonjmpagaindecrease:;在正在播放的音調(diào)基礎(chǔ)上降調(diào),當(dāng)?shù)陀谙薅ㄒ粽{(diào)時(shí)暫停subprevious,2cmpprevious,0;與最低音比較jbnextmovbx,previousmovax,hz[bx]out42h,almoval,ahout42h,alcallspeakonjmpagainMOVAH,4CHINT21H?二^毛旦1^由二Mr“““““““““““““““““““““““““““““““,個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)」4、干-p用乂慶個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè);子程序1:【揚(yáng)聲器開子程序】;GATE2接并行接口PB0,即61H的D0位,輸出OUT2經(jīng)與門,與門受PB1控制,只有PB0與PB1同時(shí)為高電平,揚(yáng)聲器才打開speakonprocpushaxinal,61h;讀取61H端口的原控制信息oral,03h;al=00000011,只令D1D0=PB1PB0=11B,其他位不變out61h,alpopaxretspeakonendp;子程序2:【揚(yáng)聲器關(guān)閉子程序】speakoffprocpushaxinal,61handal,0fch;al=11111100,只令D1D0=PB1PB0=00B,其他位不變out61h,alpopaxretspeakoffendpCODESENDSENDSTART【實(shí)驗(yàn)四】:鍵盤程序設(shè)計(jì)實(shí)驗(yàn)要求:鍵盤程序設(shè)計(jì),編寫一個(gè)程序,每當(dāng)在鍵盤上按下一個(gè)按鍵時(shí),就顯示其接通和斷開掃描碼。實(shí)驗(yàn)設(shè)計(jì):1)保存原09h號中斷處理程序地址;2)設(shè)置新的中斷處理程序地址:3)設(shè)計(jì)新的中斷處理new09h——獲得返回的鍵盤掃描碼并以十進(jìn)制數(shù)輸出;4)恢復(fù)原09H中斷處理程序地址。實(shí)現(xiàn)原理:1)Pc機(jī)鍵盤面向用戶的是由按鍵組成的矩形結(jié)構(gòu)鍵盤陣列。鍵盤電路正常工作時(shí)不斷地掃描鍵盤矩陣。有按鍵,則確定按鍵位置后以串行數(shù)據(jù)形式發(fā)送給系統(tǒng)板鍵盤接口電路。按鍵按下時(shí),發(fā)送接通掃描碼,簡稱掃描碼;鍵松開時(shí),則發(fā)送該鍵的斷開掃描碼。斷開掃描碼=接通掃描碼+80H。若一直按住該鍵,則以每秒10次拍發(fā)速率連續(xù)發(fā)送該鍵的接通掃描碼。2)83鍵的pc機(jī)標(biāo)準(zhǔn)鍵盤的接通碼:3)微處理器響應(yīng)中斷,則進(jìn)入鍵盤中斷服務(wù)程序(INT09H),中斷服務(wù)程序完成:讀取鍵盤掃描碼:用INTAL,60H即可;響應(yīng)鍵盤:系統(tǒng)使PB7=1;允許鍵盤工作:系統(tǒng)使PB7=0;處理鍵盤數(shù)據(jù);給8259A中斷結(jié)束EOI命令,中斷返回。實(shí)驗(yàn)實(shí)現(xiàn):1)子程序:New09h子程序——新的09h中斷處理程序。dpcrlf子程序一一使光標(biāo)后輸出空格的子程序;display子程序一一用除10取余法將接通碼和斷開碼轉(zhuǎn)換成十進(jìn)制數(shù)并輸出。2)主程序:獲取09號原中斷中斷向量,并在棧中保存返回的中斷向量es:bx;關(guān)中斷;設(shè)置09號新中斷向量,ds:dx=new09h段地址:new09h有效地址;設(shè)置8259A,允許IRQ1號中斷,其他不變;新中斷設(shè)置完成,開中斷;關(guān)中斷,返回8259原狀態(tài),恢復(fù)原中斷,恢復(fù)完成,開中斷。實(shí)驗(yàn)結(jié)果1)依次按下“A”、“B”、“C”,依次輸出它們的接通碼和斷開碼A:30158;B:48176;C:461742)連續(xù)按下“A”,則以每秒10次拍發(fā)速率輸出它的的接通碼torLXJSBok0.74,Cpuspeed:3000cycles,Frameskip0,Pro..,toroaomafcuti036auwtwooau由。tuatwooutiauwtwoeaoe坦tuatwoeuoauw03003015BG290E6QG?實(shí)驗(yàn)代碼DATASSEGMENTflagbyte0DATASENDSCODESSEGMENTASSUMECS:CODES,DS:DATASSTART:MOVAX,DATASMOVDS,AXmovax,3509hes:bxint21h;獲取09號原中斷中斷向量,并在棧中保存返回的中斷向量pushespushbxcli;關(guān)中斷pushds;設(shè)置09號新中斷向量,ds:dx=new09h段地址:new09h有效地址movdx,segnew09hmovds,dxmovdx,offsetnew09hmovax,2509hint21hpopdsinal,21h;設(shè)置8259A,允許IRQ1號中斷,其他不變pushaxandal,0fdh;11111101out21h,alsti;新中斷設(shè)置完成,開中斷start1:cmpflag,1;判斷是否恢復(fù)jnestart1cli;關(guān)中斷popax;返回8259原狀態(tài)out21h,alpopdx;恢復(fù)原中斷popdsmovax,2509hint21hsti;回復(fù)完成,開中斷;***********************子程序1:新的09h中斷處理程序*****************new09hprocsti;開中斷pushax;保護(hù)寄存器pushbxinal,60h;讀取鍵盤掃描碼pushaxinal,61h;61h是8255的PB口地址,使PB7=1,響應(yīng)鍵盤oral,80h;10000000out61h,alandal,7fh;01111111,使PB7=0,允許鍵盤工作out61h,alpopax;以下進(jìn)行鍵盤數(shù)據(jù)處理cmpal,1;esc退出jenextcalldisplaycalldpcrlfjmpagainnext:pushdsMOVAX,DATASMOVDS,AXmovflag,1popdsagain:moval,20h;向中斷控制器8259A發(fā)送普通中斷結(jié)束命令out20h,alpopbxpopaxiretnew09hendp;*******************子程序2:dpcrlf子程序**************************;使光標(biāo)后輸出空格的子程序dpcrlfprocpushaxpushdxmovah,2movdl,20hint21hpopdxpopaxretdpcrlfendp;*********************子程序3:display子程序***************************;用除10取余法將二進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)制數(shù)并輸出displayprocpushcxpushaxpushbxpushdxMOVCX,3;用ax除以bl=10,循環(huán)3次xorah,ahMOVBl,10LP1:XORah,ahDIVblADDah,30H;8位除法后,al中存商,ah中存余數(shù),余數(shù)轉(zhuǎn)換成對應(yīng)的ASCII碼壓入棧PUSHaxLOOPLP1MOVCX,3;將之前從低位到高位依次壓入的順序彈出,循環(huán)3次LP2:POPDxmovdl,dhMOVAH,02HINT21HLOOPLP2popdxpopbxpopaxpopcxretdisplayendpMOVAH,4CHINT21HCODESENDSENDSTART硬件部分【實(shí)驗(yàn)五】:電子鐘設(shè)計(jì)實(shí)驗(yàn)要求:利用偉福實(shí)驗(yàn)系統(tǒng)提供的8253計(jì)數(shù)器,8259中斷控制器、七段數(shù)碼管、8255并行接口芯片等,設(shè)計(jì)實(shí)現(xiàn)一個(gè)電子鐘的電路,并編制一個(gè)程序使得該電子鐘能正常工作。其中,8253計(jì)數(shù)器用于產(chǎn)生計(jì)時(shí)脈沖(如1s、100ms等),中斷服務(wù)程序用于對時(shí)、分、秒的計(jì)數(shù)更新,并存入相應(yīng)的存儲(chǔ)單元,主程序設(shè)置相應(yīng)芯片的工作方式、完成時(shí)、分、秒信息的顯示等。實(shí)驗(yàn)設(shè)計(jì):1)功能設(shè)計(jì):能產(chǎn)生一秒脈沖將一秒脈沖送到8259,計(jì)算機(jī)能根據(jù)一秒脈沖計(jì)時(shí),相應(yīng)的更改時(shí):分:秒的值,并將其顯示在LED管中;能通過實(shí)驗(yàn)箱上的小鍵盤,設(shè)定鬧鐘的時(shí)和分和時(shí)間的起始值的時(shí)和分;當(dāng)時(shí)間的時(shí)和分和鬧鐘的時(shí)和分完全相同時(shí),揚(yáng)聲器響起,響鈴一分鐘后停止。整個(gè)過程中,正常計(jì)時(shí)。實(shí)現(xiàn)原理:1)8259用于獲得一秒脈沖,每1s調(diào)用中斷服務(wù)程序更新存儲(chǔ)的時(shí)分秒數(shù)值。2)8253計(jì)數(shù)器用于產(chǎn)生計(jì)時(shí)1S脈沖(如1s、100ms等),同時(shí)可以用來控制揚(yáng)聲器的開和關(guān)。3)6位8段碼LED顯示電路,只要按地址輸出相應(yīng)數(shù)據(jù),就可以實(shí)現(xiàn)對顯示器的控制。顯示共有6位,用動(dòng)態(tài)方式顯示。8位段碼輸出地址位0x004h,位碼輸出地址為0x002h。4)6*4的小鍵盤,向列掃描碼地址(0x002h)逐列輸出低電平,然后從行地址(0x001h)讀回。如果有鍵按下,則相應(yīng)的行的值應(yīng)為低,如果無鍵按下,由于上拉電阻的作用,行為高。這樣就可以通過輸出的列碼和讀取的行碼來判斷按下的是什么鍵。實(shí)驗(yàn)實(shí)現(xiàn):1)硬件實(shí)現(xiàn):1s脈沖的產(chǎn)生:F=4M脈沖,通過F/64輸出4M/64脈沖,將該脈沖連接到8253的count0輸入口,給count0計(jì)數(shù)值62500,則count0輸出4M/(64*62500)=1Hz脈沖,即一秒脈沖。鬧鈴的開和關(guān):F=4M脈沖,通過F/4輸出1M脈沖,將1M脈沖連接到8253的count1輸入口,將count1的輸出連接到揚(yáng)聲器。當(dāng)沒有鬧鐘的時(shí)和分和當(dāng)前顯示時(shí)間的時(shí)和分不同時(shí),將count1的計(jì)數(shù)值設(shè)為00H,從而實(shí)現(xiàn)揚(yáng)聲器的關(guān)閉,當(dāng)鬧鐘的時(shí)和分和當(dāng)前顯示時(shí)間的時(shí)和分相同時(shí),將count1的計(jì)數(shù)值設(shè)為2500(其他一些值也可),從而實(shí)現(xiàn)揚(yáng)聲器的打開,鬧鈴響起。2)軟件實(shí)現(xiàn):

a)子程序:Delay子程序一一延時(shí)子程序,用于LED管的顯示;DisplayLED子程序——6個(gè)八段管從左到右顯示LEDBuf中存的數(shù)據(jù);TestKey子程序——檢測是否有按鍵按下;GetKey子程序——獲得按下的鍵的鍵碼;Iinit子程序——初始化8259芯片;IEnter子程序一一新的中斷服務(wù)程序;8253的count0口的1s脈沖的輸出連接到8259,每來一個(gè)脈沖,就進(jìn)入新設(shè)置的中斷服務(wù)程序,進(jìn)行時(shí)分秒的更新。Nclock子程序一一鬧鐘,判斷當(dāng)前時(shí)和分是否和鬧鐘的時(shí)和分相等,不等就結(jié)束,相等就打開揚(yáng)聲器;b)主程序:初始化8253,設(shè)置新的中斷處理程序地址;等待從鍵盤輸入鬧鐘的時(shí)和分等待從鍵盤輸入時(shí)間起始的時(shí)和分6個(gè)八段管顯示時(shí)分秒并正常計(jì)時(shí),同時(shí)判斷是否到鬧鐘設(shè)定值,到了就響鈴。5.5.實(shí)驗(yàn)接線5.5.實(shí)驗(yàn)接線COUNT2equ0c002hOUTBITequ08002h;位控制口實(shí)驗(yàn)代碼CONTROLequ0c003hCOUNT0equ0c000hCOUNT2equ0c002hOUTBITequ08002h;位控制口OUTSEGequ08004h;段控制口popcxIN_KEYequ08001h;鍵盤讀入popax口retDelayendpICW1equ00010011b;單片8259,上升沿中斷,要寫ICW4DisplayLEDprocnearICW2equ00100000b;中斷movbx,offsetLEDBuf號為20Hmovcl,6;共6ICW4equ00000001b;工作個(gè)八段管在8086/88方式movah,00100000b;從OCW1equ11111110b;只響左邊開始顯示應(yīng)INT0中斷DLoop:CS8259Aequ0d000h;8259movdx,OUTBIT地址moval,0CS8259Bequ0d001houtdx,al;關(guān)所有八段管datasegmentmoval,[bx]CNTdb0movdx,OUTSEGLEDBufdb6dup(?);顯示緩沖outdx,alHourdb0movdx,OUTBITMinutedb0moval,ahSeconddb0outdx,al;顯示LEDMAP:;八段管顯一位八段管示碼pushaxdb3fh,06h,5bh,4fh,movah,166h,6dh,7dh,07hcallDelaydb7fh,6fh,77h,7ch,popax39h,5eh,79h,71hshrah,1KeyTable:;鍵碼定incbx義deccldb16h,15h,14h,0ffhjnzDLoopdb13h,12h,11h,10hmovdx,OUTBITdb0dh,0ch,0bh,0ahmoval,0db0eh,03h,06h,09houtdx,al;關(guān)所db0fh,02h,05h,08h有八段管db00h,01h,04h,07hretN_MDB0DisplayLEDendpN_HDB0dataendsTestKeyprocnearmovdx,OUTBITcodesegmentmoval,0assumecs:code,ds:dataoutdx,al;輸出Delayprocnear線置為0pushax;延時(shí)子程movdx,IN_KEY序inal,dx;讀入pushcx鍵狀態(tài)moval,0notalmovcx,axandal,0fh;高四loop$位不用TestKeyendp等鍵釋放movah,10GetKeyprocnearcallDelaymovch,00100000bcallTestKeymovcl,6jneWaitReleaseKLoop:moval,blmovdx,OUTBITretmoval,ch;GetKeyendp找出鍵所在列notalIEnterprocnearoutdx,alpushaxshrch,1pushdxmovdx,IN_KEYincSecondinal,dxmoval,Secondnotalcmpal,60andal,0fhjneExitjneGoon_;該列movSecond,0有鍵入incMinutedecclmoval,MinutejnzKLoopcmpal,60movcl,0ffh;沒有jneExit鍵按下,返回0ffhmovMinute,0jmpExit1incHourGoon_:moval,Hourdecclcmpal,24shlcl,2;鍵值jneExit=列X4+行movHour,0movch,4Exit:LoopC:movdx,CS8259Atestal,1moval,20hjnzExitl中斷服務(wù)程序結(jié)束指令shral,1outdx,alincclpopdxdecchpopaxjnzLoopCiretExit1:IEnterendpmovdx,OUTBITmoval,0IInitprocoutdx,almovdx,CS8259Amovch,0moval,ICW1movbx,offsetKeyTableoutdx,aladdbx,cxmovdx,CS8259Bmoval,[bx];moval,ICW2取出鍵碼outdx,almovbl,almoval,ICW4WaitRelease:outdx,almovdx,OUTBITmoval,OCW1moval,0outdx,alretoutdx,alretmovds,axIlnitendpmovHour,0movMinute,0nclockprocMOVsECOND,0;鬧鐘MOVN_H,0movAL,N_HMOVBL,HOURMOVN_M,0CMPBL,ALmoval,36h;00110110BJNZNOT1計(jì)數(shù)器0,16位,方式3,二進(jìn)制movAL,N_Mmovdx,CONTROLMOVBL,Minuteoutdx,alCMPBL,ALmovax,62500JNZNOT1movdx,COUNT0outdx,;MOVBL,secondal;計(jì)數(shù)器低字節(jié);addbl,10moval,ahMOVDX,outdx,CONTROL;8253al;計(jì)數(shù)器高字節(jié)MOVAL,76H;計(jì)數(shù)器1,方moval,70h;01110100B式3計(jì)數(shù)器1,16位,方式0,二進(jìn)制OUTDX,ALmovdx,CONTROLoutdx,alplay:MOVDX,COUNT1calldisplayledMOVAX,00HMOVAX,2500OUTDX,ALMOVDX,COUNT1MOVAL,AHOUTOUTDX,ALDX,AL;裝入計(jì)數(shù)初值cliMOVAL,AHmovax,0OUTDX,ALmovds,axmovbx,moval,70h;4*ICW2;中斷號01110100B;計(jì)數(shù)器1,16位,方式0,movax,code二進(jìn)制shlax,movdx,CONTROL4;x16outdx,aladdax,offsetIEnterMOVDX,COUNT1中斷入口地址(段地址為0)MOVAX,00Hmov[bx],axOUTDX,ALmovax,0MOVAL,AHincbxOUTDX,ALincbxnot1:mov[bx],retax;代碼段地址為0nclockendpcallIInitmovax,datastartprocnearmovds,axmovax,datasti

cmpsi,2pushaxjnzQLoop11pushbxpushcxMLoop21:pushdxmovsi,0movax,datamovdx,offsetLEDBufmovds,axmovLEDBuf,08H;顯QLoop21:示一.一.一.一.callDisplayLEDmovLEDBuf+1,08H顯示movLEDBuf+2,08HcallTestKeymovLEDBuf+3,08H有鍵入?movLEDBuf+4,08HjeQLoop21movLEDBuf+5,08H無鍵入,繼續(xù)顯示MLoopll:callGetKeymovsi,0讀入鍵碼movdx,offsetLEDBufandal,0fh顯示鍵碼QLoopll:movah,0callDisplayLED;movbx,offsetLEDMAP顯示addbx,axcallTestKey;pushax有鍵入?moval,[bx]jeQLoop11;movLEDBuf+si+2,al無鍵入,繼續(xù)顯示popaxcallGetKey;cmpsi,0讀入鍵碼jeTen21andal,0fh;jmpOne21顯示鍵碼Ten21:movah,0movcl,10movbx,offsetLEDMAPmulcladdbx,axaddN_M,alpushaxincsimoval,[bx]cmpsi,2movLEDBuf+si,aljnzQLoop21popaxOne21:cmpsi,0addN_M,aljeTen11incsijmpOne11cmpsi,2Ten11:jnzQLoop21movcl,10popdxmulclpopcxaddN_H,alpopbxincsipopaxcmpsi,2jnzQLoop11pushaxOne11:pushbxaddN_H,alpushcxincsipushdx

movax,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論