西安电子科技大学微机原理大作业.docx
西安电子科技大学微机原理大作业,载机原理大作必第一次上机一、实验目的1 .熟练掌握8086/8088的各种寻址方式及应用。2 .掌握DEBUG调试程序中的一些常用命令的使用方法,为以后的实验打下基础二、实验仪器586微机1台三、实验内容1.关于数据的寻址方式练习8086/8088提供多种方式实现操作数寻址,大体可分为7种:a.立即寻址b.寄存器寻址C,直接寻址d.寄存器间接寻址e.寄存器相对寻址f.基址变址寻址g.基址变址且相对寻址掌握8086/8088的这些寻址方式,是学习汇编语言编程的关键。指令SRC寻址方式SRC的地址AX推算值AX实际值MOVAX,CX寄存器寻址00050005MOVAX,500H立即寻址05000500MOVAX,TABLE直接寻址1541:0004A5A4A5A4MOVAX,ES:BXJ寄存器间接寻址1542:0004C5C4C5C4MOVAX,BX+05H寄存器相对寻址1541:0009AAA9AAA9MOVAX,SS:BX+03H寄存器相对寻址153F:0007B8B7B8B7MOVAX,TABLEBX寄存器相对寻址1541:0008A9A8A9A8MOVAX,07HIBX寄存器相对寻址154k000BACABACABMOVAX,BP寄存器间接寻址I53F:OOO3B4B3B4B3MOVAX,TABLEBP寄存器相对寻址1541:0007A8A7A8A7MOVAX,08HBP寄存器相对寻址153F:000BBCBBBCBBMOVAX,BP+06H寄存器相对寻址153F:0009BAB9BAB9MOVAX,DS:BP+03H寄存器相对寻址1541:0006A7A6A7A6MOVAX,BP+05H寄存器相对寻址153F:0008B9B8B9B8MOVAX,ES:SI+O3H寄存器相对寻址1542:0005C6C5C6C5MOVAX,DI+06H寄存器相对寻址1541:0007A8A7A8A7MOVAX,DI1+O5H寄存器相对寻址1541:0006A7A6A7A6MOVAX,TABLESI寄存器相对寻址1541:0006A7A6A7A6MOVAX,SI寄存器间接寻址1541:0002A3A2A3A2MOVAX,TABLEDI寄存器相对寻址1541:0005A6A5A6A5MOVAX,S1+O5H寄存器相对寻址1541:0007A8A7A8A7MOVAX,BXDI+01H基址变址且相对寻址1541:0006A7A6A7A6MOVAX,BXSI+O3H基址变址且相对寻址1541:0009AAA9AAA9MOVAX,TABLEBXSI基址变址且相对寻址154k000AABAAABAAMOVAX,ES:BXJDIJ基址变址寻址1542:0005C6C5C6C5MOVAX,BPDI+02H基址变址且相对寻址153F:0006B7B6B7B6MOVAX,TABLE(BPIDI基址变址且相对寻址1541:0008A9A8A9A8MOVAX,ES:BPSI基址变址寻址1542:0005C6C5C6C5MOVAX,BPSI+05H基址变址且相对寻址153F:000ABBBABBBAMOVAX,03HBPDI基址变址且相对寻址153F:0007B8B7B8B7MOVAX,BPSI基址变址寻址153F:0005B6B5B6B5MOVAX,BP+02HDI+03H基址变址且相对寻址153F:0009BAB9BAB9MOVAX,TABLEBP+02H1DI+03H基址变址且相对寻址154k000DAEADAEAD第二次上机一、实验目的1 .熟练掌握汇编语言程序设计的方法及上机步骤。2 .掌握算术运算中,十进制数调整指令的应用。3 .掌握子程序的设计方法。4 .掌握DoS功能的调用方法。二、实验仪器586微机1台三、实验内容1 .编写求十进制数02121424与21736543之和的程序,并将和以十进制数的形式送屏幕显示。STACKSEGMENTSTACK'STACK'MOVES,AXDW100HDUP(?)MOVAX,STACKSTACKENDSMOVSS,AXDATASEGMENTLEASI,ADDlADDlDD02121424HLEADI,ADD2ADD2DD21736543HLEABX,SUMSUMDD?MOVAL,SIDATAENDSADDALJDICODESEGMENTDAAASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACKMOVBX,ALMOVAL,SI+HSTART:MOVAX,DATAADCAL,(DI+1MOVDS,AXDAAMOVBX+1,ALMOVAL,SI+2ADCAL,DI+2DAAMOVBX+2,ALMOVAL,SI+3ADCAL,DI+3DAAMOVBX+3,ALMOVDL,00ADCDL,00CALLDISPSUMMOVAH,4CHINT21HDISPSUMPROCNEARPUSHAXPUSHBXPUSHCXPUSHSIMOVSI,4PUSHDXMOVCX,51.AB:PUSHCXPUSHBXMOVAL,DLMOVCL,4SHRAL,CLADDAL,30HMOVAH,02MOVDUALINT21HANDBL,OFHADDBL,30HMOVAH,02MOVDL,BLINT21HPOPBXPOPCXDECSIMOVDL,BXSI1.OOPLABPOPDXPOPSIPOPCXPOPBXPOPAXRETDISPSUMENDPCODEENDSENDSTARTMOVBL,DL2.有个首地址为A的N字数组,请编程序使该数组中的数按从大到小的次序排列。MOV AX,STACKMOV SS,AXLEA DX,STRING1MOV AH,09HINT 21HMOV CX,6LEA SI,DATAlLI:MOV AX,SIADD SI,2CALL DISPAXCALL DISPCRLOOPLlMOV CX,5LEA SI,DATAlADD SI, 10STACKSEGMENTSTACKDB256DUP(?)STACKENDSDATASEGMENTDATAIDW7800H,6832H,0000H,87HJ275H,0EC34HSTRING1DB'inputnumber:',ODH,OAH,$STRING2DB'Thenumbersfromlargetosmallis:',0DH,0AH;$'DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVES,AXLPl:PUSHCXPUSHSIMOVAH,02HLP2:MOVAX,SIMOVDL,ALCMPAX,SI-2INT21HJBENOXCHGPOPAXXCHGAX,SI-2ANDAX,OFHMOVSI,AXCALLCHANGNOXCHG:DECSIMOVAH,02HDECSIMOVDL,ALLOOPLP2INT21HPOPSIPOPDXPOPCXPOPCXLOOPLPlPOPAXLEADX,STRING2RETMOVAH,09HDISPALENDPINT21HCHANGPROCMOVCX,6CMPAL,10LEASI,DATAlJNGECHANGlL2:MOVAXJSIADDAL,7ADDSI,2CHANGI:ADDAL,30HCALLDISPAXRETCALLDISPCRCHANGENDPLOOPL2DISPAXPROCMOVAH,4CHXCHGAL,AHINT21HCALLDISPALDISPALPROCXCHGAH,ALPUSHAXCALLDISPALPUSHCXRETPUSHDXDISPAXENDPPUSHAXDISPCRPROCMOVCL,4PUSHAXSHRAL,CLPUSHDXCALLCHANGMOVAH,2MOVDL,OAHPOPAXINT21HRETMOVAH,2DISPCRENDPMOVDL,ODHCODEENDSINT21HENDSTARTPOPDX第三、四次上机一、实验目的1.增强和提高汇编语言程序设计的能力,掌握模块化程序设计的方法.2 .熟练掌握DOS常用功能的调用方法.二、实验仪器586微机一台三、实验内容编写如下程序,并在机器上调试成功。程序采用菜单式选择,可以接收用户从键盘输入的四个命令(1-4),各命令功能分别为:(1)按下“1”键,完成字符串小写字母变成大写字母。(2)按下“2”键,完成找最大值(3)按下“3”键,完成排序(4)按下“4”键,显示时间(5)按下“5”键,结束程序运行,返回系统提示符。;宏定义显示字符串DISPLMACROSTR!FunctiontodisplaystringsPUSHDXPUSHAX1.EADX,STRMOVAH,09HINT21HPOPAXPOPDXENDM判断用户是否选择继续ISCONTINUEMACROL;MaCrotojudgewhethertocontinue,LisamarkDISPS15,10,SMENUMOVAH,08HINT2IHCMPAL,IBHJNEL;若用JE会导致编译,跳不了那么远JMPMAINENDM设置光标宏一-CURSORMACROCURX,CURYPUSHAXPUSHBXPUSHDXQX必须保护,始终指向输入缓冲区MOVAH.02HMOVDH,CURXMOVDL,CURYMOVBH,0INTIOHPOPDXPOPBXPOPAXENDM定位字符串显示宏DISPSMACROX,Y,STR;将STR的内容显示到X,Y的位置PUSHAXPUSHBXPUSHDXMOVAH,02HMOVBH,OOH;显示页码,第O页MOVDH.X;行(X坐标)MOVDL,Y;列(Y坐标)INTIOH1.EADX,STRMOVAH,09HINT21HPOPDXPOPBXPOPAXENDM;清屏加色宏SCROLLMACRON,ULR,ULC,LRR,LRC,ATTPUSHAXPUSHBXPUSHCXPUSHDXMOVAH,06HMOV AL,N;N二上卷行数;N=O时,清窗口MOV CH,ULR;左上角行号(X)MOV CL,ULC;左上角列号(Y)MOV DH,LRR;右下角行号MOV DL,LRC;右下角列号MOV BH,ATT;卷入行属性,颜色设置INTIOHPOPDXPOPCXPOPBXPOPAXENDM子程序预处理宏PREP MACROT;预处理,显示子菜单标题(T),输入提示信息等LEAS1,INBUF+11.EADI,OUTBUFSCROLL21,2,0,22,79,0FH;清屏,内窗DISPS 3.20.T;显示子菜单标题(3行20列显示T)DISPS6,2,CAPION;PromptforastringtochangeDISPS 8,2,INCAP;Print "Your input is:"INT21HMOVCH,0MOVCL,SI;获取输入字符串中,字符的个数INCSIENDM""""""""""""""""""""""""""""""""""""""""""""""""""堆栈段STACKSEGMENTSTACK'STACK'DB100HDUP(?)TOPLABELWORDSTACKENDS;数据段9"""""""""""""""""""""""""""""""""""""""""""""""""""""""DATASEGMENTBASEDWMAIN,LTC,FMV,SORTS,STM,EXIT;建立跳转表WELCMDB'Welcometousethisprogram!$'MMENUIDBTHISPROGRAMISDEVELOPEDBYZHOUPENGFEI!-$'MMENUDDB2014/11/16$'MMENUCDB'PleaseChoseAnItem,AndInputTheNumber!S'MMENUlDB'1-LowercaseLettersToCapitalLettersS'MMENU2DB,2-FindTheMaximumValueS'MMENU3DB,3-SortS,MMENU4DB,4-SetTimeS1MMENU5DB,5-Exit!S,SMENUDB'PressAnyKeyToRedo,Press"ESC"ToReturnToMainMenu!$'WROCAPDB'WRONG!Youhavepress''"key!Pleaseinputanumberbetween1and5!$'CAPIONDB'PleaseInputYourStringsandEndWith"Enter"Key!$'INCAPDB'YourInputIs:$'INBUFDB100DB?DB100DUP(?)OUTCAPDB'MyOutputIs:$'OUTBUFDB100DUP(?)MAXCAPDBThecharofmaxASCIIis:.$'ERRINFDB'ERROR!Pleasechecktheformatyouinput!S,TIMESETCDB'Now,youcansetthetime!$'TIMESETFDB'Format:(OI2532)or(01:25:32),andendwithCR!$'TIMESETSDB'Succeed!$'TDINVDB,Invalidtimedata!Inputagain!$'NODATCAPDB'Youhaveinputnothing!S'TIMEDB8DUP12DUP(,,);时间的底DATAENDS程序开始CODESEGMENTASSUMECS:CODE,DSQATA,ESQATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVES,AXMOVAX,STACKMOVSS,AX1.EASP,TOP1.EADX,INBUF;指向输入缓冲区CLC欢迎界面及主菜单MAIN:SCROLL0,0,0,24,79,0;清屏SCROLL25,0,0,24,79,50HSCROLL21,2,0,22,79,OFH示outofmemoryDlSPS4,20,MMENUIDISPS6,30,MMENUDDISPS8,20,MMENUCDISPS10,20,MMENUlDISPS12,20,MMENU2DISPS14,20,MMENU3DISPS16,20,MMENU4DISPS18,20,MMENU5ML:CURSOR19.1DHMOVAH,01HINT21HCMPAL,31HJLERRORCMPAL,35HJGERRORANDAX5OOFH1.EABX,BASESHLAL,1ADDBX,AXJMPWORDPTRBX;CMPAL,;JELTC;CMPAL,2,;JEFMV;CMPAL,3,;设置窗口颜色;设置菜单颜色,黑底白字/注意逗号应为半角字符,否则提;DiSPlaythemainmenu;Recievethechoice;将AL乘2,因为跳转表地址是dw类型的;Choose1,lowercaselettertocapitalletter;Choose2,findthemaximumvalue;JESORTS;Choose3,sort;CMPAL,4'JE STM;Choose4,showcurrenttime;CMPAL,5,;JE EXIT;Choose5,exittheprogramERROR:CMPAL,0DH;如果是回车的话,赋CRJEMCRMOVWROCAP+23,AL;OthercharMOVIWROCAP+24;'JMPDMCR:MOVWORDPTRWROCAP+23,'RC,D:DISPS20,5,WROCAP;ShowthewronginformationJMPML1.TC:CALLLLTOCLIscontinueltcFMV:CALLFMAXVIscontinuefmvSORTS:CALLSORTIscontinuesortsSTM:CALLSHOWTIMEIscontinuestmEXIT:SCROLL0,0,0,24,79,0;清屏MOVAH,4CH;Exit.INT21H;Process:lowercaselettertocapitalletter.1.LTOCLPROCreflashliprepmmenui;显示子菜单CMPCL,O;若输入为空则跳转至REDOJEReflashlLLl:MOVAL,SICMPAL,a,JBMTOB;NOCHANGECMPALz,JAMTOBSUBAL,20HJConvertMTOB:MOVDI,ALINCSIINCDI1.OOPLLIMOVBYTEPTRDI,S,DISPS10,2,OUTCAPDISPS10,17,OUTBUFRET1.LTOCLENDP-Process:findthemaximumvalue.FMAXVPROCPUSHBXREFLASHF:PREPMMENU2;显示子菜单CMPCL,0;若输入为空则跳转至REDOJEReflashfMOVAL,0FLl:CMPAL,SIJANEXTMOVAL,SINEXT:INCSI1.OOPFLlMOVMAXCAP+26,ALDISPS10,2,MAXCAPPOPBXRETFMAXVENDP;Process:sort.SORTPROCPREPMMENU3;显示子菜单标题(T),输入提示信息等DECCXADDSLCXMOVBYTEPTRSI+11;$'1.PI:PUSHCXPUSHSI1.P2:MOVAL,SICMPALJSI-IlJBENOXCHGXCHGAL,SI-1MOVSI,ALNOXCHG:DECSI1.OOPLP2POPSIPOPCX1.OOPLPlDISPS10,2,OUTCAPDISPS10,17,INBUF2;显示排序结果RETSORTENDP;Process:showcurrenttime.DISPS 3,20,MMENU4DISPS 5,25,TIMESETCDISPS 7,15,TIMESETFSHOW:MOV SI,OMOV BL, IOODIV BLMOV AH,2CHINT 21HMOV AL,CHCALL BCDASCINC SIMOV AL,CLCALL BCDASCINCSIMOV AL,DHCALL BCDASCMOV DX,0A22HMOV CX,8MOV BX,004EHMOV AX,1301H 后,光标位置改变INT IOHMOV BP,OFFSET TIME 符串(BP为地址)SHOWTIMEPROCSCROLL21,2,0,22,79,OFH清屏,内窗;GETTIME;HOUR;要转换的在AL中;M1NUTE;要转换的在AL中;使用intIOH的13H号功能,在Teletype模式下显示字QX为行列(DHQL);CX为显示字符串长度;BH:页码,BL:属性;AL:显示输出方式,1字符串中只含显示字符,显示MOVAH,02H;设置光标位置MOVDX,0A22HMOVBH,OINTIOHMOVBX,0018H;延时用(外层),若不延时,光标会在时间左右来回跑!RE:MOVCX,OFFFFHREA:LOOPREADECBXJNZREMOVAH,01HINT16H;检测是否有字符输入,ZF=I:无JESHOWCALLSETTIMERET;设置时间子程序SHOWTIMEENDP;设置时间子程序SETTIMEPROCPUSHDXMOVAH,OAH;输入时间串1.EADX,INBUFINT21HCMPINBUFl,0JENODATMOVBL,10MOVAL,INBUF+2SUBAL,'0'MULBLADDAL,INBUF+3SUBAL,'0'CMPAUOJBINVALIDCMPAL,24JAEINVALID;判断时有效性MOVCH,ALMOVAL,INBUF+5SUBAL,'O'MULBLADDAL,INBUF+6SUBAL,'O'CMPAL,0JBINVALIDCMP AL, 60JAE INVALIDMOV CL, ALMOV AL, INBUF + 8SUB AL, '0'MULBLADD AL, INBUF + 9SUB AL, 'O'CMPAL,0JB INVALIDCMP AL, 60JAE INVALIDMOV DH, ALMOV DL, 0MOV AH, 2DHINT 21H;判断分有效性;判断秒有效性;置系统时间DISPS12,2O,T1MESETS假置成功JMPRETURNNODAT:DISPS12,20,NODATCAPJMPRETURNINVALID:DISPS12,20,TDINV;时间数据无效RETURN:POPDXRETSETTIMEENDPProCeSS:时间数值转换成ASCn码字符子程序,要转换的在AL中,调用前赋好值BCDASCPROCNEARPUSHBXCBWMOVBLJODIVBLADDAL,30HMOVTIMESI,ALINCSIADDAH,30HMOVTIMESI,AHINCSIPOPBXRETBCDASCENDP结束!一一CODEENDSENDSTART按下1键QB员:C:Windowssystem32cmd.exe-ZPFG.EXE回眼1-LowercaseLettersToCapitalLPleaseInputVourStringsandEndWith"Enter"Key!VourInputIs:sdfghjkMVOutputIs:SDFGHJKPressAnyKeyToRedo,Press"ESC"ToReturnr按下2键按下3键按下4键按下5键上机体会:几次的上机实验,在自己反复的尝试、验证与老师的在老师的悉心的指导下,做到了掌握基本的微机原理上机操作,对微机原理这门课的了解更深了一步,对这么课的学习起到了一点的帮助。