《2022年微机原理大作业代码 .pdf》由会员分享,可在线阅读,更多相关《2022年微机原理大作业代码 .pdf(14页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1 四、程序代码STACK SEGMENT STACK DB 256 DUP(?) TOP LABEL WORD STACK ENDS DATA SEGMENT TABLE DW G1, G2, G3, G4, G5 STRING1 DB 1. Change small letters into capital letters of string;, 0DH, 0AH, $ STRING2 DB 2. Find the maximum of string;, 0DH, 0AH, $ STRING3 DB 3. Sort for datas;, 0DH, 0AH, $ STRING4 DB 4.
2、 Show Time;, 0DH, 0AH, $ STRING5 DB 5. Exit., 0DH, 0AH, $ STRINGN DB Input the number you select (1-5) : $ IN_STR DB Input the string (including letters & numbers, less than 60 letters) :, 0DH, 0AH, $ PRESTR DB Original string : $ NEWSTR DB New string : $ OUT_STR DB The string is $ MAXCHR DB The max
3、imum is $ IN_NUM DB Input the numbers (0 - 255, no more than 20 numbers) : , 0DH, 0AH, $ OUT_NUM DB Sorted numbers : , 0DH, 0AH, $ IN_TIM DB Correct the time (HH:MM:SS) : $ HINTSTR DB Press ESC, go back to the menu; or press any key to play again!$ KEYBUF DB 61 DB ? DB 61 DUP (?) NUMBUF DB ? DB 20 D
4、UP (?) DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA, SS:STACK START: MOV AX, DATA MOV DS, AX MOV AX, STACK MOV SS, AX MOV SP, OFFSET TOP MAIN: CALL FAR PTR MENU ; 设置显示器AGAIN: MOV AH, 2 MOV BH, 0 ; 页号MOV DL, 41 ; 列号MOV DH, 10 ; 行号INT 10H ; 光标位置设置名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - -
5、- - 名师精心整理 - - - - - - - 第 1 页,共 14 页 - - - - - - - - - 2 MOV AH, 1 INT 21H CMP AL, 1 JB AGAIN CMP AL, 5 JA AGAIN SUB AL, 1 ; N-1 SHL AL, 1 ; (N-1)*2 CBW ; AL-AX LEA BX, TABLE ADD BX, AX JMP WORD PTR BX G1: CALL FAR PTR CHGLTR MOV AH, 8 INT 21H CMP AL, 1BH JZ MAIN JMP G1 G2: CALL FAR PTR MAXLTR MOV
6、AH, 8 INT 21H CMP AL, 1BH JZ MAIN JMP G2 G3: CALL FAR PTR SORTNUM MOV AH, 8 INT 21H CMP AL, 1BH JZ MAIN JMP G3 G4: CALL FAR PTR TIMCHK MOV AH, 8 INT 21H CMP AL, 1BH JZ MAIN JMP G4 G5: MOV AH, 4CH INT 21H 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 14 页 - - -
7、 - - - - - - 3 MENU PROC FAR ; 显示主界面;设置显示器方式MOV AH, 0 MOV AL, 3; MOV BL, 0; INT 10H ; 清屏MOV AH, 2 MOV BH, 0 ; 页号MOV DL, 5 ; 列号MOV DH, 5 ; 行号INT 10H ; 光标位置设置MOV AH, 9 LEA DX, STRING1 INT 21H MOV AH, 2 MOV DL, 5 ; 列号MOV DH, 6 ; 行号INT 10H ; 光标位置设置MOV AH, 9 LEA DX, STRING2 INT 21H MOV AH, 2 MOV DL, 5 ;
8、列号MOV DH, 7 ; 行号INT 10H ; 光标位置设置MOV AH, 9 LEA DX, STRING3 INT 21H MOV AH, 2 MOV DL, 5 ; 列号MOV DH, 8 ; 行号INT 10H ; 光标位置设置MOV AH, 9 LEA DX, STRING4 INT 21H MOV AH, 2 MOV DL, 5 ; 列号MOV DH, 9 ; 行号INT 10H ; 光标位置设置MOV AH, 9 LEA DX, STRING5 INT 21H MOV AH, 2 MOV DL, 5 ; 列号名师资料总结 - - -精品资料欢迎下载 - - - - - - -
9、 - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 14 页 - - - - - - - - - 4 MOV DH, 10 ; 行号INT 10H ; 光标位置设置MOV AH, 9 LEA DX, STRINGN INT 21H RET MENU ENDP CHGLTR PROC FAR ; 将输入字符串中小写字母便换成大写字母RECHG: ;设置显示器方式MOV AH, 0 MOV AL, 3 MOV BL, 0 INT 10H ; 清屏MOV AH, 2 MOV BH, 0 ; 页号MOV DL, 5 ; 列号MOV DH, 5 ; 行
10、号INT 10H ; 输入提示光标位置设置MOV AH, 9 LEA DX, IN_STR INT 21H ; 输入字符串提示MOV AH, 2 MOV DL, 5 ; 列号MOV DH, 6 ; 行号INT 10H ; 输入字符串光标位置设置MOV AH, 0AH LEA DX, KEYBUF INT 21H ; 输入字符串CMP KEYBUF + 1, 0 JZ RECHG ; 判断输入字符串是否为空串LEA BX, KEYBUF + 2 MOV AL, KEYBUF + 1 CBW MOV CX, AX ADD BX, AX MOV BYTE PTR BX, $ ; 在输入字符串尾加结束
11、标志$ MOV AH, 2 MOV BH, 0 ; 页号MOV DL, 5 ; 列号MOV DH, 7 ; 行号INT 10H ; 源字符串提示光标位置设置MOV AH, 9 LEA DX, PRESTR 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 14 页 - - - - - - - - - 5 INT 21H ; 输出源字符串提示MOV AH, 9 LEA DX, KEYBUF + 2 INT 21H ; 输出源字符串LEA BX, KEYBUF + 2 LCHG
12、: CMP BYTE PTR BX, 61H JB NOCHG AND BYTE PTR BX, 0DFH NOCHG: INC BX LOOP LCHG ; 将字符串中小写字母转换成大写字母MOV AH, 2 MOV BH, 0 ; 页号MOV DL, 5 ; 列号MOV DH, 8 ; 行号INT 10H ; 新字符串提示光标位置设置MOV AH, 9 LEA DX, NEWSTR INT 21H ; 输出新字符串提示MOV AH, 9 LEA DX, KEYBUF + 2 INT 21H ; 输出新字符串MOV AH, 2 MOV BH, 0 ; 页号MOV DL, 5 ; 列号MOV
13、DH, 9 ; 行号INT 10H ; 提示信息光标位置设置MOV AH, 9 LEA DX, HINTSTR INT 21H ; 输出提示信息RET CHGLTR ENDP MAXLTR PROC FAR ; 在输入字符串中找出最大值REMAX: ;设置显示器方式MOV AH, 0 MOV AL, 3 MOV BL, 0 INT 10H ; 清屏MOV AH, 2 MOV BH, 0 ; 页号MOV DL, 5 ; 列号MOV DH, 5 ; 行号名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - -
14、 - - 第 5 页,共 14 页 - - - - - - - - - 6 INT 10H ; 输入提示光标位置设置MOV AH, 9 LEA DX, IN_STR INT 21H ; 输入字符串提示MOV AH, 2 MOV DL, 5 ; 列号MOV DH, 6 ; 行号INT 10H ; 输入字符串光标位置设置MOV AH, 0AH LEA DX, KEYBUF INT 21H ; 输入字符串CMP KEYBUF + 1, 0 JZ REMAX ; 判断输入字符串是否为空串LEA BX, KEYBUF + 2 MOV AL, KEYBUF + 1 CBW MOV CX, AX ADD B
15、X, AX MOV BYTE PTR BX, $ ; 在输入字符串位加结束标志$ MOV AH, 2 MOV BH, 0 ; 页号MOV DL, 5 ; 列号MOV DH, 7 ; 行号INT 10H ; 源字符串提示光标位置设置MOV AH, 9 LEA DX, OUT_STR INT 21H ; 输出字符串提示MOV AH, 9 LEA DX, KEYBUF + 2 INT 21H ; 输出字符串MOV AH, 2 MOV BH, 0 ; 页号MOV DL, 5 ; 列号MOV DH, 8 ; 行号INT 10H ; 新字符串提示光标位置设置MOV AH, 9 LEA DX, MAXCHR
16、 INT 21H ; 输出字符串中最大值提示MOV DL, 0 LEA BX, KEYBUF + 2 LCMP: CMP BX, DL JB NOLCHG MOV DL, BX 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 14 页 - - - - - - - - - 7 NOLCHG: INC BX LOOP LCMP ; 找出字符串中最大字符,放入DL MOV AH, 2 INT 21H ; 输出字符串中最大字符MOV AH, 2 MOV BH, 0 ; 页号MOV
17、 DL, 5 ; 列号MOV DH, 9 ; 行号INT 10H ; 提示信息光标位置设置MOV AH, 9 LEA DX, HINTSTR INT 21H ; 输出提示信息RET MAXLTR ENDP SORTNUM PROC FAR ; 对输入数据组排序RESORT: ;设置显示器方式MOV AH, 0 MOV AL, 3 MOV BL, 0 INT 10H ; 清屏MOV AH, 2 MOV BH, 0 ; 页号MOV DL, 5 ; 列号MOV DH, 5 ; 行号INT 10H ; 输入提示光标位置设置MOV AH, 9 LEA DX, IN_NUM INT 21H MOV AH,
18、 2 MOV DL, 5 ; 列号MOV DH, 6 ; 行号INT 10H ; 输入数据组光标位置设置MOV AH, 0AH LEA DX, KEYBUF INT 21H ; 输入数据组字符串CALL CIN_INT ; 字符串转换成数据串CMP AL, 0 JZ RESORT ; 判断数据串是否有错CMP NUMBUF, 0 JZ RESORT ; 判断数据串是否为空名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 14 页 - - - - - - - - - 8 MO
19、V AH, 2 MOV BH, 0 ; 页号MOV DL, 5 ; 列号MOV DH, 7 ; 行号INT 10H ; 输出提示光标位置设置MOV AH, 9 LEA DX, OUT_NUM INT 21H ; 输出数据串提示MOV AH, 2 MOV BH, 0 ; 页号MOV DL, 5 ; 列号MOV DH, 8 ; 行号INT 10H ; 输出数据组光标位置设置CALL FAR PTR MPSORT ; 数据组排序CALL FAR PTR INT_OUT ; 数据组的输出MOV AH, 2 MOV BH, 0 ; 页号MOV DL, 5 ; 列号MOV DH, 9 ; 行号INT 10
20、H ; 提示信息光标位置设置MOV AH, 9 LEA DX, HINTSTR INT 21H ; 输出提示信息RET SORTNUM ENDP CIN_INT PROC NEAR ; 读入整型数; 入口参数:无; 出口参数为: AL (有无错误标志,0 为有, 1 为无)MOV CL, KEYBUF + 1 LEA SI, KEYBUF + 2 MOV CH, 0 ; 数据组数据个数置0 MOV DH, 10 MOV AL, 0 ; 当前数据 x=0 MOV DL, 0 ; 有无数据标志置0,即无数据FNDNUM: CMP BYTE PTR SI, JZ ADDNUM ; 判断当前字符是否为
21、空格CMP BYTE PTR SI, 0 JB ERRNUM CMP BYTE PTR SI, 9 JA ERRNUM ; 判断当前字符是否在0-9之间MOV DL, 1 ; 有无数据标志置1,即有数据MUL DH 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 14 页 - - - - - - - - - 9 XOR BH, BH MOV BL, SI ADD AX, BX SUB AX, 0 ; 计算出当前数据x CMP AH, 0 JA ERRNUM ; 判断 x
22、是否越界JMP NEXT ADDNUM: CMP DL, 1 JNZ NEXT ; 判断是否有数据INC CH ; 数据组数据个数加1 CALL ADDNEW MOV DL, 0 MOV AL, 0 ; 清零NEXT: INC SI DEC CL CMP CL, 0 JNZ FNDNUM ; 依次检查各字符CMP DL, 1 JNZ TOTAL ; 判断是否有未加入的数据INC CH CALL ADDNEW TOTAL: MOV NUMBUF, CH ; 置数据组数据个数MOV AL, 1 ; 输入数据无错误JMP CRTNUM ERRNUM: MOV AL, 0 ; 输入数据有错误CRTNU
23、M: RET CIN_INT ENDP ADDNEW PROC NEAR ; 增加新数; 入口参数: CH(数据组数据个数) 、AL (当前数据x); 出口参数:无PUSH AX LEA BX, NUMBUF MOV AL, CH CBW ADD BX, AX POP AX MOV BX, AL RET ADDNEW ENDP 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 14 页 - - - - - - - - - 10 MPSORT PROC FAR ; 数据组排序
24、MOV AL, NUMBUF CMP AL, 1 JBE NOSORT ; 若只有一个元素,停止排序CBW MOV CX, AX LEA SI, NUMBUF ; SI 指向数据组首地址ADD SI, CX ; SI 指向数据组末地址DEC CX ; 外循环次数LP1: ; 外循环开始PUSH CX PUSH SI MOV DL, 0 ; 交换标志置0 LP2: ; 内循环开始MOV AL, SI CMP AL, SI - 1 JAE NOXCHG XCHG AL, SI - 1 ; 交换操作MOV SI, AL MOV DL, 1 ; 交换标志置1 NOXCHG: DEC SI LOOP L
25、P2 POP SI POP CX CMP DL, 1 JNZ NOSORT ; 判断交换标志LOOP LP1 NOSORT:RET MPSORT ENDP INT_OUT PROC FAR ; 输出数据组MOV AL, NUMBUF CBW MOV CX, AX MOV BL, 10H LEA SI, NUMBUF + 1 PRINT: MOV AL, SI CALL OUTNUM INC SI MOV AH, 2 MOV DL, INT 21H LOOP PRINT 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理
26、 - - - - - - - 第 10 页,共 14 页 - - - - - - - - - 11 RET INT_OUT ENDP OUTNUM PROC NEAR ; 将十进制数以十六进制输出; 入口参数: AL (待转换的数据) ,BL (转换进制数16); 出口参数:无MOV AH, 0 DIV BL PUSH AX CMP AH, 10 JB PNUM ADD AH, 7 PNUM: ADD AH, 30H MOV DL, AH POP AX PUSH DX CMP AL, 0 JZ OUTN CALL OUTNUM OUTN: POP DX MOV AH, 2 INT 21H RE
27、T OUTNUM ENDP TIMCHK PROC FAR ; 设定并显示时间;设置显示器方式MOV AH, 0 MOV AL, 3; MOV BL, 0; INT 10H ; 清屏MOV AH, 2 MOV BH, 0 ; 页号MOV DL, 5 ; 列号MOV DH, 6 ; 行号INT 10H ; 设置提示光标位置设置MOV AH, 9 LEA DX, IN_TIM INT 21H ; 时间串提示MOV AH, 0AH LEA DX, KEYBUF INT 21H ; 输入时间串名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - -
28、- 名师精心整理 - - - - - - - 第 11 页,共 14 页 - - - - - - - - - 12 MOV BL, 10 MOV AL, KEYBUF + 2 SUB AL, 0 MUL BL ADD AL, KEYBUF + 3 SUB AL, 0 CMP AL, 0 JB INVALID CMP AL, 24 JAE INV ALID ; 判断 时 有效性MOV CH, AL MOV AL, KEYBUF + 5 SUB AL, 0 MUL BL ADD AL, KEYBUF + 6 SUB AL, 0 CMP AL, 0 JB INVALID CMP AL, 60 JAE
29、 INV ALID ; 判断 分 有效性MOV CL, AL MOV AL, KEYBUF + 8 SUB AL, 0 MUL BL ADD AL, KEYBUF + 9 SUB AL, 0 CMP AL, 0 JB INVALID CMP AL, 60 JAE INV ALID ; 判断 秒 有效性MOV DH, AL MOV DL, 0 MOV AH, 2DH INT 21H ; 置系统时间INVALID: CALL TIME RET TIMCHK ENDP TIME PROC ; 显示时间子程序;设置显示器方式MOV AH, 0 MOV AL, 3; MOV BL, 0; INT 10H
30、 ; 清屏名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 14 页 - - - - - - - - - 13 MOV AH, 2 MOV BH, 0 ; 页号MOV DL, 10 ; 列号MOV DH, 9 ; 行号INT 10H ; 提示信息光标位置设置MOV AH, 9 LEA DX, HINTSTR INT 21H ; 输出提示信息DISP1: MOV AH, 2 MOV BH, 0 ; 页号MOV DL, 72 ; 列号MOV DH, 0 ; 行号INT 10H
31、 ; 提示光标位置设置MOV AH, 2CH ; 取系统时间 ,CH,CL,DH 分别存放时 /分/秒INT 21H MOV AL, CH ; 显示 时CALL SHOWNUM MOV AH, 2 MOV DL, : INT 21H MOV AL, CL ; 显示 分CALL SHOWNUM MOV AH, 2 MOV DL, : INT 21H MOV AL, DH ; 显示 : 秒CALL SHOWNUM MOV AH,02H ; 设置光标位置MOV DX,090AH MOV BH,0 INT 10H MOV BX,0018H RE: MOV CX,0FFFFH ; 延时REA: LOOP
32、 REA DEC BX JNZ RE MOV AH, 0BH ; 或MOV AH, 01H INT 21H ; INT 16H CMP AL, 0 ; JE DISP1 JZ DISP1 ; 检查键盘状态RET TIME ENDP 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 14 页 - - - - - - - - - 14 SHOWNUM PROC ; 把 AL 中的数字以十进制输出; 入口参数: AL (待显示的数据); 出口参数:无CBW PUSH CX PUSH DX MOV CL, 10 DIV CL ADD AH, 0 MOV BH, AH ADD AL, 0 MOV AH, 2 MOV DL, AL INT 21H MOV DL, BH INT 21H POP DX POP CX RET SHOWNUM ENDP CODE ENDS END START 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 14 页 - - - - - - - - -