微机原理上机汇编语言程序.docx

上传人:小飞机 文档编号:3513751 上传时间:2023-03-13 格式:DOCX 页数:14 大小:41.10KB
返回 下载 相关 举报
微机原理上机汇编语言程序.docx_第1页
第1页 / 共14页
微机原理上机汇编语言程序.docx_第2页
第2页 / 共14页
微机原理上机汇编语言程序.docx_第3页
第3页 / 共14页
微机原理上机汇编语言程序.docx_第4页
第4页 / 共14页
微机原理上机汇编语言程序.docx_第5页
第5页 / 共14页
亲,该文档总共14页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《微机原理上机汇编语言程序.docx》由会员分享,可在线阅读,更多相关《微机原理上机汇编语言程序.docx(14页珍藏版)》请在三一办公上搜索。

1、微机原理上机 汇编语言程序上机作业四 一实验目的 1.增强和提高汇编语言程序设计的能力,掌握模块化程序设计的方法. 2.熟练掌握DOS常用功能的调用方法. 二试验仪器 586微机 一台 三实验内容 编写如下程序,并在机器上调试成功。程序采用菜单式选择,可以接收用户从键盘输入的五个命令,各命令功能分别为: 按下“1”键,完成字符串小写字母变成大写字母。 用户输入一由英文大小写字母或数字0-9组成的字符串,程序逐个检查字符串中各字符,将原串中小写字母变成大写字母,其他字符不变,并在屏幕上显示。用户按任一键,重做,按ESC键,返回主菜单。 按下“2”键,完成找最大值。 a.接收用户输入的可显示字符串

2、,程序将其中ASCII码值最大的字符显示出来; b.接收用户输入若干个无符号8位数,程序将其中最大的数显示出来。用户按任一键,重做,按ESC键,返回主菜单。 按下“3”键,完成排序。 a.接收用户输入的可显示字符串,以回车结束。程序按ASCII码值大小由大到小排序并输出显示; b.接收用户输入若干个有符号8位数,程序将其中最大的数显示出来。用户按任一键,重做,按ESC键,返回主菜单。 按下“4”键,显示时间。 首先提示用户对时,即用户输入时、分、秒,然后,在屏幕上不断显示时间,格式为: XX: XX: XX 最好定点显示。用户按任一键,重新对时,按ESC键,返回主菜单。 按下“5”键,结束程序

3、运行,返回系统提示符。 四程序代码 STACK TOP STACK SEGMENT STACK DB 256 DUP(?) LABEL WORD ENDS SEGMENT DW G1, G2, G3, G4, G5 DB 1. Change small letters into capital letters of string;, 0DH, 0AH, $ DB 2. Find the maximum of string;, 0DH, 0AH, $ DATA TABLE STRING1 STRING2 STRING3 DB 3. Sort for datas;, 0DH, 0AH, $ STR

4、ING4 DB 4. 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

5、DB The maximum 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

6、 ? DB 20 DUP (?) 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 ; 光标位置设置 MOV AH, 1 INT 21H CMP AL, 1 JB AGAIN C

7、MP AL, 5 JA AGAIN SUB AL, 1 ; N-1 SHL AL, 1 ; (N-1)*2 CBW ; AL-AX LEA BX, TABLE G1: G2: G3: G4: G5: MENU ADD BX, AX JMP WORD PTR BX CALL FAR PTR CHGLTR MOV AH, 8 INT 21H CMP AL, 1BH JZ MAIN JMP G1 CALL FAR PTR MAXLTR MOV AH, 8 INT 21H CMP AL, 1BH JZ MAIN JMP G2 CALL FAR PTR SORTNUM MOV AH, 8 INT 21H

8、 CMP AL, 1BH JZ MAIN JMP G3 CALL FAR PTR TIMCHK MOV AH, 8 INT 21H CMP AL, 1BH JZ MAIN JMP G4 MOV AH, 4CH INT 21H 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

9、 MOV DH, 6 INT 10H MOV AH, 9 LEA DX, STRING2 INT 21H MOV AH, 2 MOV DL, 5 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 MOV DH, 10

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

11、DH, 5 ; 行号 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 B

12、X, $ ; 在输入字符串尾加结束标志$ MOV AH, 2 MOV BH, 0 ; 页号 MOV DL, 5 ; 列号 MOV DH, 7 ; 行号 INT 10H ; 源字符串提示光标位置设置 MOV AH, 9 LEA DX, PRESTR INT 21H ; 输出源字符串提示 MOV AH, 9 LEA DX, KEYBUF + 2 INT 21H ; 输出源字符串 LEA BX, KEYBUF + 2 LCHG: CMP BYTE PTR BX, 61H JB NOCHG AND BYTE PTR BX, 0DFH NOCHG: INC BX LOOP LCHG MOV AH, 2

13、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 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

14、DL, 5 MOV DH, 5 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 ; 将字符串中小写字母转换成大写字母 ; 页号 ; 列号 ; 行号 ; 新字符串提示光标位置设置 ; 输出新字符串提示 ; 输出新字符串 ; 页号 ; 列号 ; 行号 ; 提示信息光标位置设置 ; 输出提示信息 ; 在输入字符串中找出最大值 ; 清屏 ; 页号 ; 列号 ; 行号 ; 输入提示光标位置设置 ; 输入字符串提示 ; 列号 ; 行号 ; 输入

15、字符串光标位置设置 INT 21H CMP KEYBUF + 1, 0 JZ REMAX LEA BX, KEYBUF + 2 MOV AL, KEYBUF + 1 CBW MOV CX, AX ADD BX, 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

16、BH, 0 MOV DL, 5 MOV DH, 8 INT 10H MOV AH, 9 LEA DX, MAXCHR INT 21H MOV DL, 0 LEA BX, KEYBUF + 2 LCMP: CMP BX, DL JB NOLCHG MOV DL, BX NOLCHG: INC BX LOOP LCMP MOV AH, 2 INT 21H MOV AH, 2 MOV BH, 0 MOV DL, 5 MOV DH, 9 INT 10H ; 页号 ; 列号 ; 行号 ; 源字符串提示光标位置设置 ; 输出字符串提示 ; 输出字符串 ; 页号 ; 列号 ; 行号 ; 新字符串提示光标位置

17、设置 ; 输出字符串中最大值提示 ; 找出字符串中最大字符,放入DL ; 输出字符串中最大字符 ; 页号 ; 列号 ; 行号 ; 提示信息光标位置设置 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, 2 MOV DL, 5 M

18、OV 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 MOV 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 ; 输出提示信息 ; 对输入数据组排序 ; 清屏 ; 页号 ; 列号 ; 行号 ; 输入提示光标位置设置 ; 列号 ; 行号 ; 输入数据组光标位置设置; 输入数据组字符串 ;

19、字符串转换成数据串 ; 判断数据串是否有错 ; 判断数据串是否为空 ; 页号 ; 列号 ; 行号 ; 输出提示光标位置设置 ; 输出数据串提示 ; 页号 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 10H MOV AH, 9 LEA DX, HINTSTR INT 21H RET SORTNUM ENDP ; 列号 ; 行号 ; 输出数据组光标位置设置 ; 数据组排序 ; 数据组的输出 ; 页号 ; 列号 ; 行号

20、 ; 提示信息光标位置设置 ; 输出提示信息 CIN_INT PROC NEAR ; 读入整型数 ; 入口参数:无 ; 出口参数为:AL 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 ; 判断当前字符是否为空格 CMP BYTE PTR SI, 0 JB ERRNUM CMP BYTE PTR SI, 9 JA ERRNUM ; 判断当前字

21、符是否在0-9之间 MOV DL, 1 ; 有无数据标志置1,即有数据 MUL DH XOR BH, BH MOV BL, SI ADD AX, BX SUB AX, 0 ; 计算出当前数据x CMP AH, 0 JA ERRNUM ; 判断x是否越界 JMP NEXT ADDNUM: CMP DL, 1 JNZ NEXT ; 判断是否有数据 INC CH 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: M

22、OV NUMBUF, CH MOV AL, 1 JMP CRTNUM ERRNUM: MOV AL, 0 CRTNUM: RET CIN_INT ENDP ; 数据组数据个数加1 ; 清零 ; 依次检查各字符 ; 判断是否有未加入的数据 ; 置数据组数据个数 ; 输入数据无错误 ; 输入数据有错误 ADDNEW PROC NEAR ; 增加新数 ; 入口参数:CH、AL ; 出口参数:无 PUSH AX LEA BX, NUMBUF MOV AL, CH CBW ADD BX, AX POP AX MOV BX, AL RET ADDNEW ENDP MPSORT PROC FAR ; 数据组

23、排序 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 LP2: MOV AL, SI CMP AL, SI - 1 JAE NOXCHG XCHG AL, SI - 1 MOV SI, AL MOV DL, 1 NOXCHG: DEC SI LOOP LP2 POP SI POP CX CMP DL,

24、1 JNZ NOSORT LOOP LP1 NOSORT:RET MPSORT ENDP ; 交换标志置0 ; 内循环开始 ; 交换操作 ; 交换标志置1 ; 判断交换标志 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 RET INT_OUT ENDP ; 输出数据组 OUTNUM PROC NEAR ; 将十进制数以十六进制输出 ; 入口

25、参数:AL,BL ; 出口参数:无 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 RET 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 IN

26、T 10H MOV AH, 9 LEA DX, IN_TIM INT 21H MOV AH, 0AH LEA DX, KEYBUF INT 21H 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 INVALID ; 设定并显示时间 ; 清屏 ; 页号 ; 列号 ; 行号 ; 设置提示光标位置设置; 时间串提示 ; 输入时间串 ; 判断 时 有效性 MOV CH, AL MOV AL, KEYBUF + 5 SUB AL,

27、 0 MUL BL ADD AL, KEYBUF + 6 SUB AL, 0 CMP AL, 0 JB INVALID CMP AL, 60 JAE INVALID 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 INVALID MOV DH, AL MOV DL, 0 MOV AH, 2DH INT 21H INVALID: CALL TIME RET TIMCHK ENDP TIME PROC ;设置显示器方式 MO

28、V AH, 0 MOV AL, 3; MOV BL, 0; INT 10H 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 MOV AH, 2CH INT 21H MOV AL,

29、 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 REA DEC BX JNZ RE MOV AH, 0BH INT 21H CMP AL, 0 JZ DISP1 RET TIME ENDP SHOWNUM PROC ; 入口参数:AL; 出口

30、参数:无 CBW PUSH CX PUSH DX MOV CL, 10 DIV CL ADD AH, 0 MOV BH, AH ; 提示光标位置设置 ; 取系统时间,CH,CL,DH分别存放时/分/秒 ; 显示 时 ; 显示 分 ; 显示 : 秒 ; 设置光标位置 ; 延时 ; 或 MOV AH, 01H ; INT 16H ; JE DISP1 ; 检查键盘状态 ; 把AL中的数字以十进制输出 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 E

31、ND START 五实验体会 实验中遇到的问题以及解决方法:在这几次的编程实验中,我遇到了许多问题。首先,在最开始的时候,无论怎么输入都显示:masm不是内部或外部命令,也不是可运行的程序或批处理文件。后来发现把自己编写的asm文件放到E盘masm文件夹里就行了,之后的每一步实验按照要求一步一步做,就都能出来结果。还有就是不懂得如何输出自己所得到的结果,于是先抄写课本上所给的程序,当出现自己想要的结果之后,再与同学讨论输出结果的语句,充分理解其内涵。 心得体会:通过几次的上机实验课,我懂得了如何使用txt文档编写asm文件。然后对其进行编译和连接。当完成上述过程后,可以使用DEBUG功能来对程序进行调试,这样,就可以清楚地看到每一步运行时各个寄存器的状态。同时,通过自己编译程序,我能够更好地理解课本中的许多程序,也能够自己编写一些简单的程序。总而言之,通过这几次的上机实验课,我学会了通过用计算机编译程序来处理自己在理论课学习上遇到的各种问题。希望在以后的实验中能够积累的越来越多,对此体会也越来越深。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号