微机原理大作业代码.pdf
微机原理与接口技术微机原理与接口技术大作业大作业1一 实验目的1.掌握汇编语言设计方法。2.掌握与综合设计的方法与能力。3.掌握工程实践能力。二实验内容三具体设计与程序四运行结果五总结与体会对这次程序的制作,使我对汇编语言的基本知识的使用更加熟练,同时也增加了我对汇编语言的一些认识,在作业完成过程中通过和同学的交流,也增加了合作的技巧。通过查阅以下资料也学到了一些课本上没有的东西,拓宽了自己的知识面,增加了学好汇编语言的信心。在设计的过程中遇到很多问题这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正提高自己的实际动手能力和独立思考的能力。2四、程序代码STACK SEGMENT STACKDB 256 DUP(?)TOPLABEL WORDSTACK ENDSDATASEGMENTTABLEDW G1,G2,G3,G4,G5STRING1DB 1.Change small letters into capital letters of string;,0DH,0AH,$STRING2DB 2.Find the maximum of string;,0DH,0AH,$STRING3DB 3.Sort for datas;,0DH,0AH,$STRING4DB 4.Show Time;,0DH,0AH,$STRING5DB 5.Exit.,0DH,0AH,$STRINGNDB Input the number you select(1-5):$IN_STR DB Input the string(including letters&numbers,less than 60 letters):,0DH,0AH,$PRESTRDB Original string:$NEWSTRDB New string:$OUT_STRDB The string is$MAXCHRDB The maximum is$IN_NUMDB Input the numbers(0-255,no more than 20 numbers):,0DH,0AH,$OUT_NUMDB Sorted numbers:,0DH,0AH,$IN_TIMDB Correct the time(HH:MM:SS):$HINTSTRDB Press ESC,go back to the menu;or press any key to play again!$KEYBUFDB 61DB?DB 61 DUP(?)NUMBUFDB?DB 20 DUP(?)DATAENDSCODESTART:MAIN:SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKMOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV SP,OFFSET TOPCALL FAR PTR MENU;设置显示器3AGAIN:MOV AH,2MOV BH,0;页号MOV DL,41;列号MOV DH,10;行号INT 10H;光标位置设置MOV AH,1INT 21HCMP AL,1JB AGAINCMP AL,5JA AGAINSUB AL,1;N-1SHL AL,1;(N-1)*2CBW;AL-AXLEA BX,TABLEADD BX,AXJMP WORD PTR BXG1:CALL FAR PTR CHGLTRMOV AH,8INT 21HCMP AL,1BHJZ MAINJMP G1G2:CALL FAR PTR MAXLTRMOV AH,8INT 21HCMP AL,1BHJZ MAINJMP G2G3:CALL FAR PTR SORTNUMMOV AH,8INT 21HCMP AL,1BHJZ MAINJMP G3G4:CALL FAR PTR TIMCHKMOV AH,8INT 21HCMP AL,1BH4G5:JZ MAINJMP G4MOV AH,4CHINT 21HMENUPROC FAR;设置显示器方式MOV AH,0MOV AL,3;MOV BL,0;INT 10HMOV AH,2MOV BH,0MOV DL,5MOV DH,5INT 10HMOV AH,9LEA DX,STRING1INT 21HMOV AH,2MOV DL,5MOV DH,6INT 10HMOV AH,9LEA DX,STRING2INT 21HMOV AH,2MOV DL,5MOV DH,7INT 10HMOV AH,9LEA DX,STRING3INT 21HMOV AH,2MOV DL,5MOV DH,8INT 10HMOV AH,9LEA DX,STRING4INT 21HMOV AH,2MOV DL,5MOV DH,9;显示主界面;清屏;页号;列号;行号;光标位置设置;列号;行号;光标位置设置;列号;行号;光标位置设置;列号;行号;光标位置设置;列号;行号5INT 10HMOV AH,9LEA DX,STRING5INT 21HMOV AH,2MOV DL,5MOV DH,10INT 10HMOV AH,9LEA DX,STRINGNINT 21HRETMENUENDPCHGLTRPROC FARRECHG:;设置显示器方式MOV AH,0MOV AL,3MOV BL,0INT 10HMOV AH,2MOV BH,0MOV DL,5MOV DH,5INT 10HMOV AH,9LEA DX,IN_STRINT 21HMOV AH,2MOV DL,5MOV DH,6INT 10HMOV AH,0AHLEA DX,KEYBUFINT 21HCMP KEYBUF+1,0JZ RECHGLEA BX,KEYBUF+2MOV AL,KEYBUF+1CBWMOV CX,AXADD BX,AXMOV BYTE PTR BX,$MOV AH,2;光标位置设置;列号;行号;光标位置设置;将输入字符串中小写字母便换成大写字母;清屏;页号;列号;行号;输入提示光标位置设置;输入字符串提示;列号;行号;输入字符串光标位置设置;输入字符串;判断输入字符串是否为空串;在输入字符串尾加结束标志$6MOV BH,0;页号MOV DL,5;列号MOV DH,7;行号INT 10H;源字符串提示光标位置设置MOV AH,9LEA DX,PRESTRINT 21H;输出源字符串提示MOV AH,9LEA DX,KEYBUF+2INT 21H;输出源字符串LEA BX,KEYBUF+2LCHG:CMP BYTE PTR BX,61HJB NOCHGAND BYTE PTR BX,0DFHNOCHG:INC BXLOOP LCHG;将字符串中小写字母转换成大写字母MOV AH,2MOV BH,0;页号MOV DL,5;列号MOV DH,8;行号INT 10H;新字符串提示光标位置设置MOV AH,9LEA DX,NEWSTRINT 21H;输出新字符串提示MOV AH,9LEA DX,KEYBUF+2INT 21H;输出新字符串MOV AH,2MOV BH,0;页号MOV DL,5;列号MOV DH,9;行号INT 10H;提示信息光标位置设置MOV AH,9LEA DX,HINTSTRINT 21H;输出提示信息RETCHGLTRENDPMAXLTRPROC FAR;在输入字符串中找出最大值REMAX:;设置显示器方式MOV AH,0MOV AL,37MOV BL,0INT 10HMOV AH,2MOV BH,0MOV DL,5MOV DH,5;清屏;页号;列号;行号INT 10HMOV AH,9LEA DX,IN_STRINT 21HMOV AH,2MOV DL,5MOV DH,6INT 10HMOV AH,0AHLEA DX,KEYBUFINT 21HCMP KEYBUF+1,0JZ REMAXLEA BX,KEYBUF+2MOV AL,KEYBUF+1CBWMOV CX,AXADD BX,AXMOV BYTE PTR BX,$MOV AH,2MOV BH,0MOV DL,5MOV DH,7INT 10HMOV AH,9LEA DX,OUT_STRINT 21HMOV AH,9LEA DX,KEYBUF+2INT 21HMOV AH,2MOV BH,0MOV DL,5MOV DH,8INT 10HMOV AH,9LEA DX,MAXCHRINT 21H;输入提示光标位置设置;输入字符串提示;列号;行号;输入字符串光标位置设置;输入字符串;判断输入字符串是否为空串;在输入字符串位加结束标志$;页号;列号;行号;源字符串提示光标位置设置;输出字符串提示;输出字符串;页号;列号;行号;新字符串提示光标位置设置;输出字符串中最大值提示8MOV DL,0LEA BX,KEYBUF+2LCMP:CMP BX,DLJB NOLCHGMOV DL,BXNOLCHG:INC BXLOOP LCMPMOV AH,2INT 21HMOV AH,2MOV BH,0MOV DL,5MOV DH,9INT 10HMOV AH,9LEA DX,HINTSTRINT 21HRETMAXLTRENDPSORTNUMPROC FARRESORT:;设置显示器方式MOV AH,0MOV AL,3MOV BL,0INT 10HMOV AH,2MOV BH,0MOV DL,5MOV DH,5INT 10HMOV AH,9LEA DX,IN_NUMINT 21HMOV AH,2MOV DL,5MOV DH,6INT 10HMOV AH,0AHLEA DX,KEYBUFINT 21HCALL CIN_INT;找出字符串中最大字符,放入DL;输出字符串中最大字符;页号;列号;行号;提示信息光标位置设置;输出提示信息;对输入数据组排序;清屏;页号;列号;行号;输入提示光标位置设置;列号;行号;输入数据组光标位置设置;输入数据组字符串;字符串转换成数据串9CMP AL,0JZ RESORT;判断数据串是否有错CMP NUMBUF,0JZ RESORT;判断数据串是否为空MOV AH,2MOV BH,0;页号MOV DL,5;列号MOV DH,7;行号INT 10H;输出提示光标位置设置MOV AH,9LEA DX,OUT_NUMINT 21H;输出数据串提示MOV AH,2MOV BH,0;页号MOV DL,5;列号MOV DH,8;行号INT 10H;输出数据组光标位置设置CALL FAR PTR MPSORT;数据组排序CALL FAR PTR INT_OUT;数据组的输出MOV AH,2MOV BH,0;页号MOV DL,5;列号MOV DH,9;行号INT 10H;提示信息光标位置设置MOV AH,9LEA DX,HINTSTRINT 21H;输出提示信息RETSORTNUMENDPCIN_INTPROC NEAR;读入整型数;入口参数:无;出口参数为:AL(有无错误标志,0 为有,1 为无)MOV CL,KEYBUF+1LEA SI,KEYBUF+2MOV CH,0;数据组数据个数置 0MOV DH,10MOV AL,0;当前数据 x=0MOV DL,0;有无数据标志置 0,即无数据FNDNUM:CMP BYTE PTR SI,JZ ADDNUM;判断当前字符是否为空格CMP BYTE PTR SI,010JB ERRNUMCMP BYTE PTR SI,9JA ERRNUM;判断当前字符是否在0-9之间MOV DL,1;有无数据标志置 1,即有数据MUL DHXOR BH,BHMOV BL,SIADD AX,BXSUB AX,0;计算出当前数据 xCMP AH,0JA ERRNUM;判断 x 是否越界JMP NEXTADDNUM:CMP DL,1JNZ NEXT;判断是否有数据INC CH;数据组数据个数加 1CALL ADDNEWMOV DL,0MOV AL,0;清零NEXT:INC SIDEC CLCMP CL,0JNZ FNDNUM;依次检查各字符CMP DL,1JNZ TOTAL;判断是否有未加入的数据INC CHCALL ADDNEWTOTAL:MOV NUMBUF,CH;置数据组数据个数MOV AL,1;输入数据无错误JMP CRTNUMERRNUM:MOV AL,0;输入数据有错误CRTNUM:RETCIN_INT ENDPADDNEWPROC NEAR;增加新数;入口参数:CH(数据组数据个数)、AL(当前数据 x);出口参数:无PUSH AXLEA BX,NUMBUFMOV AL,CH11CBWADD BX,AXPOP AXMOV BX,ALRETADDNEWENDPMPSORTPROC FARMOV AL,NUMBUFCMP AL,1JBE NOSORTCBWMOV CX,AXLEA SI,NUMBUFADD SI,CXDEC CXLP1:PUSH CXPUSH SIMOV DL,0LP2:MOV AL,SICMP AL,SI-1JAE NOXCHGXCHG AL,SI-1MOV SI,ALMOV DL,1NOXCHG:DEC SILOOP LP2POP SIPOP CXCMP DL,1JNZ NOSORTLOOP LP1NOSORT:RETMPSORTENDPINT_OUTPROC FARMOV AL,NUMBUFCBWMOV CX,AXMOV BL,10HLEA SI,NUMBUF+1PRINT:MOV AL,SI;数据组排序;若只有一个元素,停止排序;SI 指向数据组首地址;SI 指向数据组末地址;外循环次数;外循环开始;交换标志置 0;内循环开始;交换操作;交换标志置 1;判断交换标志;输出数据组12CALL OUTNUMINC SIMOV AH,2MOV DL,INT 21HLOOP PRINTRETINT_OUT ENDPOUTNUMPROC NEAR;将十进制数以十六进制输出;入口参数:AL(待转换的数据),BL(转换进制数 16);出口参数:无MOV AH,0DIV BLPUSH AXCMP AH,10JB PNUMADD AH,7PNUM:ADD AH,30HMOV DL,AHPOP AXPUSH DXCMP AL,0JZ OUTNCALL OUTNUMOUTN:POP DXMOV AH,2INT 21HRETOUTNUMENDPTIMCHKPROC FAR;设定并显示时间;设置显示器方式MOV AH,0MOV AL,3;MOV BL,0;INT 10H;清屏MOV AH,2MOV BH,0;页号MOV DL,5;列号MOV DH,6;行号INT 10H;设置提示光标位置设置MOV AH,9LEA DX,IN_TIM13INT 21HMOV AH,0AHLEA DX,KEYBUFINT 21HMOV BL,10MOV AL,KEYBUF+2SUB AL,0MUL BLADD AL,KEYBUF+3SUB AL,0CMP AL,0JB INVALIDCMP AL,24JAE INVALIDMOV CH,ALMOV AL,KEYBUF+5SUB AL,0MUL BLADD AL,KEYBUF+6SUB AL,0CMP AL,0JB INVALIDCMP AL,60JAE INVALIDMOV CL,ALMOV AL,KEYBUF+8SUB AL,0MUL BLADD AL,KEYBUF+9SUB AL,0CMP AL,0JB INVALIDCMP AL,60JAE INVALIDMOV DH,ALMOV DL,0MOV AH,2DHINT 21HINVALID:CALL TIMERETTIMCHKENDP;时间串提示;输入时间串;判断 时 有效性;判断 分 有效性;判断 秒 有效性;置系统时间14TIMEPROC;设置显示器方式MOV AH,0MOV AL,3;MOV BL,0;INT 10HMOV AH,2MOV BH,0MOV DL,10MOV DH,9INT 10HMOV AH,9LEA DX,HINTSTRINT 21HDISP1:MOV AH,2MOV BH,0MOV DL,72MOV DH,0INT 10HMOV AH,2CHINT 21HMOV AL,CHCALL SHOWNUMMOV AH,2MOV DL,:INT 21HMOV AL,CLCALL SHOWNUMMOV AH,2MOV DL,:INT 21HMOV AL,DHCALL SHOWNUMMOV AH,02HMOV DX,090AHMOV BH,0INT 10HMOV BX,0018HRE:MOV CX,0FFFFHREA:LOOP READEC BXJNZ REMOV AH,0BH;显示时间子程序;清屏;页号;列号;行号;提示信息光标位置设置;输出提示信息;页号;列号;行号;提示光标位置设置;取系统时间,CH,CL,DH 分别存放时/分/秒;显示 时;显示 分;显示:秒;设置光标位置;延时;或MOV AH,01H15INT 21H;INT 16HCMP AL,0;JE DISP1JZ DISP1;检查键盘状态RETTIMEENDPSHOWNUM PROC;把 AL 中的数字以十进制输出;入口参数:AL(待显示的数据);出口参数:无CBWPUSH CXPUSH DXMOV CL,10DIV CLADD AH,0MOV BH,AHADD AL,0MOV AH,2MOV DL,ALINT 21HMOV DL,BHINT 21HPOP DXPOP CXRETSHOWNUM ENDPCODEENDSENDSTART16