




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
mess1db'stock;stokninlabelbytemaxdb3actdbstokndb3;stoktabdb'05','Excavatorsdb'08',' db'09',' db'12','Valves db'23','Processors'db'27',' ;descrndb14dup(20h),13,10,'$'messdb'Notintable!','$'DATASENDSCODESSEGMENTASSUMEmainprocpushdssubax,axpushaxmovds,axmoves,axleadx,mess1movah,09intleadx,stokninmovah,0ahintcmpact,0jeexitmovmovah,stokn+1movcx,06lea
cmpax,wordptr[si]jea30
addsi,14loopleadx,messmovah,09int21hjmpmovleadi,descrnrepmovsw;leadx,descrnmovah,09int21hjmpstartmainendpCODESENDSenddatareasegment;definedata 10dup(?)datareaendsprogramsegment;mainproc programends [表格形式顯示ASCII字符] db db'$' assumecs:code,ds:data,ss:stack ; ; int21h incdl dl,';intleadx,space calldisy ;內層循環,cx ;lea ;calldisypopdx callexitdisyproc int21hdisyendpexitproc int21hexitendp endmaindatasegmentout1db'Enterout2db'Entersentence:','$'out3db'Matchatlocation:','$'out4db'Hofthesentence',13,10,'$'out5db'Nomatch',13,10,'$'keyworddbdbdb255dup(?)sentencedb255dbdb255dupkdbsdb0dataendscodepushdssubax,axpushax leasi,keyword+2;si
leadi,sentence+2;dileadx,out1movah,09int21hmovah,0ahint;keywordmoval,[bx]mov;movdl,0ahmovah,2int;Entersentenceleadx,out2movah,09int21h;sentencesentenceleadx,sentencemovah,0ahint;sentencemoval,[bx]mov;movdl,0ahmovah,2int21hmoval,ssubal,kmovah,0incaxmov push ;cxmovcl,k如果相等,串比較指令將執行的次數movch,0repzjz ;
;如果不相等,si指向關鍵字首地址,dimoval,kmovah,0subax,cxdecaxsubdi,axpop ;cxloopsearchjmpno_mach;Matchatlocation:leadx,out3movah,09int21hmovbx,dimoval,kmovah,0subbx,axleadi,sentence+1subbx,dimovch,4;
movrolbx,cl;左循環移位moval,blandaddal,30h;ASCIIcmpal,3ah;是不是>9 addal,7h;Amovdl,almovah,2int21hdecch;Hofthesentenceleadx,out4movintleasi,keyword+2leadi,sentence+2jmpsen;Nomatchleadx,out5movah,09int21h
movah,4chint21hcodeendsendstartdatagradedws5dws6dws7dws8dws9dws10dw0dataendsmainprocfar;setstackforreturnpushdssubax,axpushax;setdsregistertocurrentdatasegmentmovax,datamov;mainpartofcodegoesheremovs5,0movs6,0movs7,0movs8,0movs9,0movmovcx,movbx,offsetgradeendstart ;bxcmp ;jlfive cmpax,70jlcmpax,80jlsevencmpax,90jleightcmpax,100jlnineincjmpshortnine:incs9 jmpshortchange_addreight:incjmpshortchange_addrseven:incs7jmpshortchange_addrsix:incs6jmpshortchange_addrfive:incs5change_addr:addbx,2 loopcompare main;programendstart[顯示月份名direct]datasegmentpara'data'threedb3messdb'month?',13,10,'$'moninlabelbytemaxdb3actdb?mondb3dup(?)alfmondb'???',13,10,'$'montabdbdb'jul','aug','sep','oct','nov','dec'dataendscodesegmentpara'code'mainprocfarpushdssubax,axpushaxmovax,datamovds,axmoves,axleadx,messmovah,09int21hleadx,moninmovah,0ahintmovdl,13;回車movah,02intmovdl,10;換行movah,02intcmpact,0jeexitmovah,30hcmpact,2jetwomoval,monjmpconvmoval,mon+1movah,monxorax,3030hcmpah,0jzsubah,ahaddleasi,montabdecalmulthreeaddsi,axmovcx,03learepleadx,alfmonmovah,09int21hjmpstartexit:retmainendpcodeendDSEGSEGMENTPARACREQU ;13LFEQU10EOMEQU'$';OUT_OF_RANGEDB'Errorcodeisnotinvalidrange(1-83)'DBCR,LF,EOMDB'Errorcodeis(36-79)',CR,LF,EOMER1DB'Invalidfunctionnumber',CR,LF,EOMER2DB'Filenotfound',CR,LF,EOMER82DB'Cannotmake',CR,LF,EOMER83DB'FailonINTERTAB1DWER1,ER2,ER3,ER4,ER5,ER6,ER7,ER8,ER9,ER10DWER11,ER12,ER13,ER14,ER15,ER16,ER17,ER18DWER19,ER20,ER21,ER22,ER23,ER24,ER25,ER26DWER27,ER28,ER29,ER30,ER31,ER32,ER33,ER34DWER35ERTAB2DWER80,ER81,ER82,ER83DSEGENDSCSEGSEGMENTPARAASSUMECS:CSEG,DS:DSEGSHOW_ERRPROCFARPUSHDSPUSHBX;MOVSI,DSEGMOVDS,SI;PUSHCMP ;AX83JGO_O_RCMPJG ;083O_O_R:LEADX,OUT_OF_RANGE把偏移地址記錄下來并且跳轉去顯示,直接執行的話就會顯示這句話JMPSHORTDISP_MSG;CMPAX,35JGTRY79DECAXJMPCMPAX,79JGLAST_4LEA ; 的偏移地址放到dx里面顯示,也是前面定義的句JMPANDAX,3SHLAX,1 ADDBX,AXMOVDX,[BX] ;messageDXMOVAH,9 INT21HPOPAX SHOW_ERR;CSEG;ENDdata db0 db0 ;數字計數 db0 db ;緩沖區最大字符db db80dup(datacodeassume
movax,datamovds,axleamovah,0ah int21hlea ;str+2Bxmovmov movcmpal,'0' jbothers cmpal,'9'jasmallinc ;jmpshort ;直接檢查下一個字符,next cmpal,'a'jbcmpal,'z'jabigincletter jmpshortnext cmpal,'A'jbotherscmpal,'Z'jaothersincletter jmpshortnext;直接檢查下一個字符others:incother;1next:incbxloopmovah,4ch int21hcodeendsendmaingradedw50dup(?)rankdw50dup(?)countdw?mess1dbmess2db13,10,'InputError!',13,10,'$'mess3db'Rank:$'DATASENDSSTACKSENDSprognamSEGMENTmainprocfarpushdssubax,axpushaxMOVDS,AXcallinputcallrankpcalloutputmain;inputproc ;ipleadx,mess1 movah,09 int21h;
mov mov calldecibin inccount cmpjestore cmpdl,13 jeexit2jneerrormovgrade[si],bx;add ;是因為用字jmpleadx,mess2;輸出錯誤movah,09intmovgrade[si],bx結束返回什么?callcrlfinput;rankpprocnear movdi,countmovmovmovwordptrrank[bx],0;往內存里面存立即數的時候要加上類型那些movcx,countleacmpjg incwordptrrank[bxaxax對應在rank里面的位置加一,addloopnextaddbx,2dec ;0之后,jneloop1rankp;outputprocleadx,mess3movah,09int
movmovcallbinidecmovdl,','movah,02int21haddsi,2decdijnznext1callcrlfoutput;decibinprocmovbx,0movah,1 int21hmovsub ;10jlexit1;小于0跳轉cmpal,9d ;大于9jgexit1cbw;ALD7AHAL0AH=00;AL1AH=FFH。AL不變。;xchg ;交換兩個操作數的數據,bxmovcx,10d;放到十位上mulcxxchg;addbx,axjmpnewchardecibinendp;binidecprocnear;210;pushbxpushcxpushsipushmovcalldec_divmovcx,10dcalldec_divmovcx,1dcalldec_divpopdipopsipopcxpopbxbinidec;dec_divproc;movax,bx不懂movdx,0div ;cxaxmovbx,dxmovdl,al;addmovah,02h;輸出int21hdec_div;crlfproc;movdl,0ah;換行movah,02hint;movdl,0dh;回車movah,02hint;crlf;prognamENDstacksgsegmentparastack'stack'dw32dup(?)stacksg segmentpara byte;時間的緩沖maxhlendb6 acthlendb? db6rateparlabel byte工作率的緩沖區maxrlendb6actrlendbrateflddb6messg1db'Hoursworked?','$'messg2db'Rateofpay?','$'messg3db'Wageascwagedb14dup(30h),13,10,'$';14messg4db13,10,'Overflow!',13,10,'$' dw? dw0 ;中間變量的2進制 dw0 binratedw0 db ;decinddb ;0mult10dw01 dw ;兩個操作數小數點后位數之和(3種情況 db3 ;跳了3行 dw? dw10tempdxdw?tempaxdw codesgsegment ; farwageassume;setupstackforreturn ;setDSregistertocurrentdatasegment ;mainpartofprogramgoeshere ;CALLcallq10scr;清除屏幕callq20curs置光標位置callb10inpt;hour calld10hour;Hour的ASCII2進制數calle10rate;rate的ASCII2進制數callf10mult;計算工資wagecall ;wage2ASCIIcall a20loop循環起來接收;call callq10scr ;;Input;b10inpt ;把時間的緩沖區偏移地址放到dx ;0 callq20curs;置光標位置leadx,messg2;輸出話 lea b10inpt;Processhours:HourASCII2; ;加起來此時si就是數最后一個位置callm10asbi ;然后去轉換為2進制 ;2 ;Processrate:rateASCII2;e10rate call ;2 e10rate;;把工作時間和工資率的乘積的二進制值(有舍入和移位處理)dx:ax;f10mult ;7 ; ;將標志寄存器Flag的方向標志位DF ;重復字符串操作前綴,dx shift,10;shift10n ;cx ;cx2 ;
shift,ax;為什么把ax給shift ;邏輯右移除以2 ;adjust不等于0的時候就要用ax(乘積)/shift
f10mult;ConverttoASC2ASCII; ;從+11 byteptr[si],'.' byteptr[si],: ;為;ax10
;;Disywage顯示工資在屏幕;k10dispproc callq20curs
byteptr[si],30h;0 byteptr[si],20h callq10scr
callk10disp;;ConvertASCto; ;10,mult1010 ;decind=00 ;and4 ;給binval賦值 ;decind=0bx+1繼續下面,Bx ;Scrollscreen;q10scr subcx,cx int10hq10screndp;;Set;q20cursproc sub int10hq20curs;codesgend[HANOIdatarea db db'WhatisthenameofspindleX?'db0ah,0dh,'$' db'WhatisthenameofspindleY?'db0ah,0dh,'$' db'WhatisthenameifspindleZ?'db0ah,0dh,'$' dw dw10000,1000,100,10,1datareaendsprognamsegment; ;setupstackforreturn ;setDSregistertocurrentdatasegment ;mainpartofprogramgoes call ;ASCIINBXcall ; ;0 ; callcrlf; callcrlf; callcrlf;call;exit:ret;returnto; ; ;SolvestowerofHANOI ;N=1returncall ;調用入棧的方 ;B,Ccallhanoi callrestorcallprint ;A,Bcallhanoijmp callprintreturn:ret ; ;print call ;顯示N,調用了binidec把在BX中的N打印出 callcrlf ; ;bp中的是返回的地 ; popbxpushbp ;decibinproc ;al;; ; decibinendp;binidec ;bxN;; ; ;10進制,bx存放的是余數,dl wordptr[si] ; ;flag0 ;商=0的時候去讓si+2 ;printthecontetsofDLonscreen popcxpopbxbinidec;crlf ;printcarriagereturnandlinefeed ; ;crlf; endstart[查找datasg_tabdb50dup(28dup(;=50*28tab_lendw0endaddrdw0最后一個記錄的地址+28tnamedb21,?,20dup(''),?;緩沖區tphonedb9,?,8dup(' ;緩沖tempdb28dup(?) mess1db13,10,'Inputname:',13,10,'$'mess2db13,10,'Inputaephonemess3db13,10,'Doyouwanttocontinuetymess4db13,10,'Thenamehasbeeninthetable!Pleaseinputagain!',13,10,'$'mess5db13,10,'Doyouwantaephonenumber?(Y/N)',13,10,'$'mess6dbmess7db13,10,'Name .',13,10,'$'mess8db13,10,'Thenameisnotintable.',13,10,'$'datasgendscodesgsegment;mainprocassume
pushds pushax ;Inputcallcallname_search;查重,判 _tab中是否已經包含當前人 call ;Thenamehasinthetable!Pleaseinputagain! callstor_name ;Inputaephonenumber: callinphonecallname_sortcallcrlf ;Doyouwanttocontinuety?(Y/N) ;用戶選 callprintallcall ;Doyouwantaephonenumber?(Y/N)callcrlf callinput_namecallname_searchcallcrlfcall callprintline call ;Thenameisnotintable. ; 20input_nameprocnearcallcrlf ;:入 ;為填充空格做準備,清0 ; tname[bx+2],20hmaxact loopcallcrlfinput_name;stor_nameprocnear cl,tname[1;cx= si,tname[2];si=name ;sicxdi stor_name;inphoneprocnear ;接收并存入 call tphone[1],0; ; cl,tphone[1];cx=字符數 si,tphone[2];si=首地址 inphone;name_sortprocnear對_tab對人名進行排序cmptab_len,1;僅有一人,不需要排序jeexitnleadi,_tab;第一個記錄的地址movsi,endaddr ;ASCII repecmpsb ; name_sortendp; 根據人名查找所需要的,查到則將對應地址存入bx,否則bx=-1name_searchprocnear ;si=待查地 movdi,bxrepecmpsbjzmovaddbx,28;查找下一個cmpbx,endaddr name_search;printlineprocnear;按name格式輸出查詢結pushaxcallcrlf ;bx=當前記錄址si=字符的偏移地址 loopnextccallcrlf printline;printallprocnear輸出表中所有記錄callcrlfcall ;Name. callprintline;顯示當前聯系人 bx,endaddr;是否達到表尾 printallendp;crlfprocnear movdl,0dhmovah,02hint21hcrlf;codesgend datasfreqdw 2dup(262,294,330,262
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 重慶理工職業學院《外貿英語函電》2023-2024學年第一學期期末試卷
- 平頂山學院《透視與解剖》2023-2024學年第二學期期末試卷
- 江西建設職業技術學院《元素地球化學》2023-2024學年第二學期期末試卷
- 重慶城市管理職業學院《水生生物學實驗》2023-2024學年第二學期期末試卷
- 培養孩子的自主管理能力
- 2025廚房設備專利技術合作合同
- 2025貨物商品購銷合同范本
- 2025家居用品購銷合同范本
- 小學語文統編版(2024)三年級上冊美麗的小興安嶺第二課時教案及反思
- 2025房屋租賃居間合同參考范本
- 11樓11月份工程施工月進度計劃表
- 高處作業安全監理實施細則
- 卵巢癌根治術后護理查房
- 2019年度上海市小學生健康體檢表
- 運用PDCA血透室導管感染率
- 臨床醫生教師如何上好一堂課課件
- 馬克思主義政治經濟學概論
- 布地奈德福莫特羅粉吸入劑
- 《雷雨》課件2022-2023學年人教版高中語文必修四
- 抗日游擊戰爭的戰略問題
- 2022年廣西農業農村廳事業單位筆試試題及答案
評論
0/150
提交評論