内容发布更新时间 : 2024/11/5 21:34:11星期一 下面是文章的全部内容请认真阅读。
inc di mov dx,0b800H ;将输入的字符串打印至屏幕 mov es,dx mov byte ptr es:[si],al mov byte ptr es:[si+1],07H sub al,30h mov [di],al ret compare: mov dx,0b800H ;将输入的字符串打印至屏幕 mov es,dx mov byte ptr es:[si],al mov byte ptr es:[si+1],07H add si,2 mov al,[di-1] mov bl,10 mul bl add al,[di] cmp al,[di-2] jb minimum mov di,1AH jmp far ptr main minimum: mov [di-2],al mov di,1AH jmp far ptr main print_prog1: ;作为中转,因为print_prog程序段超出了je跳转的范围 jmp print_prog error: ;调用第10号中断的2号子程序 mov ah,2 ;置光标 mov bh,0 mov dh,10 ;dh中放行号 mov dl,35 ;dl中放列号 int 10h mov dx,0 ;ds:dx 指向字符串的首地址 mov ah,9 ;使用int 21h号中断例程的9号子程序 ;功能为在光标位置显示字符串 提供要显示的字符串的地址作为参数 ;要显示的字符串需用'$'作为结束符 int 21h mov cx,10H ;设置一个空循环,用于保持错误的提示一段时间 empty: loop empty mov ah,2 ;置光标 mov bh,0 mov dh,10 ;dh中放行号 mov dl,35 ;dl中放列号 int 10h mov dx,0DH ;ds:dx 指向字符串的空字符串地址 mov ah,9 ;使用int 21h号中断例程的9号子程序 ;功能为在光标位置显示字符串 提供要显示的字符串的地址作为参数 ;要显示的字符串需用'$'作为结束符 int 21h jmp far ptr main print_prog:xor di,di add di,160 ;在屏幕的第二行打印输出最小值 mov ax,0B800H mov es,ax mov ax,cs mov ds,ax mov si,offset message mov dx,0 mov bx,0 jmp print print: mov cl,[si] cmp cl,'$' je print_data mov byte ptr es:[di],cl inc di mov byte ptr es:[di],07H ;07H~代表颜色为黑底白字 inc di inc si jmp short print print_data: ;打印记录存储的数据值 mov ax,data mov ds,ax push si mov si,1AH mov cl,[si] ;取出最小数的数值 mov ch,0 mov ax,cx ;因为该数值在内存中是以十六进制存在的,要转化为易于理解的ascii码十进制的形式,需要进行除十取商和取余操作 mov bl,10 div bl mov cl,al ;获取除十取商后的值即十位上的数值并打印 add cl,48 mov byte ptr es:[di],cl inc di mov byte ptr es:[di],71H ;71H~代表颜色为白底蓝字 inc di mov cl,ah ;获取除十取余后的值即个位上的数值并打印 add cl,48 mov byte ptr es:[di],cl inc di mov byte ptr es:[di],71H ;71H~代表颜色为白底蓝字 ending:mov ax,4c00H ;最终程序运行结束 int 21H code ends end start
六、实验过程及解释
1.本实验已完成的功能是:
a.每次输入一个两位十进制数,按下空格后,会在存储最小值的数据区将刚输入的数值与当前的最小数值进行比对,并时刻在数据区存储当前的最小数。如果想要向屏幕打印当前所有输入的数字中的最小数的数值时,只需按下回车键,会将当前的最小值打印至屏幕。
b.如果按下错误的按键,屏幕中央会打印出输入错误的提醒,并且这个提醒只会显示几秒钟,类似于弹窗效果,真正起到了提示作用。
2.程序调试结果: a.
通过masm和link命令使得程序编译链接成功。 b.
正确输入的时候,在此例中,输出了最小数为02,其中02数字的显示为白底蓝字。
c.
输入错误时,会在屏幕中间弹出“wrong Input!”的警告,警告保持几秒后自动消失。
七、实验总结
本次实验,相较于上一个实验又是一个难度的提升,其中如何得到按键的值,并向屏幕
打印出来对应的按键值,还需要了解按键中断触发的工作原理,而这一块在课堂上老师讲解得很浅,还需要自己去查阅相关的资料。本实验中,我在研读了王爽的《汇编语言》后选中了int16中断的0号功能,关于此功能的调用与使用我也是花了一些时间去琢磨,但此功能在之后的几个实验中都有着极其重要的意义。此外,还有如何找到最小值,如何在按下不相关按键后提示错误输入并且只显示几秒,这些都用到了一些编程的小技巧,而这些小技巧都是我自己一点一点思索出来的,虽然功能很简单,但是在我看来,这些都是很有趣、很让我满足的。
实验四 子程序设计
一、实验目的:
1.进一步掌握子程序设计方法; 2.进一步掌握基本的 DOS 功能调用。
二、实验内容:
1.从键盘上输入某班学生的某科目成绩.输入按学生的学号由小到大的顺序输入。