大三上汇编限选复习_第1页
大三上汇编限选复习_第2页
大三上汇编限选复习_第3页
大三上汇编限选复习_第4页
大三上汇编限选复习_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论