1、2.1 程序功能说明 本程序需在DOS下运行。程序开始运行,程序完成初始化,输出提示信息。程序产生随机数1,随机数1转化为16进制ASC码并显示。此时选择运算方式,输入“+”执行加法运算,输入“-”则执行减法运算。程序产生随机数2,随机数2转化为16进制ASC码并显示。随机数1和随机数2完成已选择的运算方式,显示运算结果。2.2 程序要点说明 本程序的要点在于随机数的产生,并显示。将其转化为16进制数,并完成运算。在运算中符合了16进制数的算法要求。3功能及程序设计3.1主程序流程图及结构图本程序流程图如图3-1所示。 图3-1程序流程图程序结构图如图3-2所示。图3-2程序结构图3.2程序说
2、明(1)读取数据段的内容(2)调用随机数产生子程序产生0100内的随机数(3)调用MACT子程序,将随机数转换为16进制表示的ASCII码字符(4)判断并调用+或-进行运算.如果是“+”则跳转到加法运算程序段,此时在调用随机数产生子程序和MACT子程序将得到第二个16进制数b显示在屏幕上,a和b进行16进制加法运算。如果是“-”则跳转到减法运算程序段,此时在调用随机数产生子程序和MACT子程序将得到第二个16进制数b显示在屏幕上,a和b进行16进制减法运算,如果有借位则显示“Divider error”,如果没有借位位,则将计算结果显示出来。3.3 子程序功能说明3.3.1 MACT子程序说明
3、MACT子程序如下:MCAT PROC ;将随机数转换为16进制表示的ASCII码字符子程序 PUSH AX push bx PUSH CX PUSH DX CMP BX,9 JA S1 PUSH BX mov ax,bx mov bl,5 div bl cmp ah,3 jae vb1 mov www,1 jmp vn1 vb1:mov www,0 vn1:pop dx pop cx pop bx pop ax ADD BL,30H MOV AA,BL MOV AA+1,$ LEA DX,AA MOV AH,9 INT 21H JMP s3 s1:MOV CL,4 MOV AL,0 SHL
4、BX,CL CMP BH,9 JBE V1 SUB BH,9 ADD BH,40H JMP MM1 V1:ADD BH,30H MM1:MOV AA,BH POP BX AND BL,0FH jae vb2 jmp vn2 vb2: vn2: CMP BL,9 JBE TT1 SUB BL,9 ADD BL,40H JMP RR1TT1:RR1: MOV AA+1,BL MOV AA+2, s3:POP DX POP CX POP AX RETMCAT ENDP此程序主要是将2位16进制数的高四位转换成ASCLLL码并且显示在屏幕上,然后将低四位也转换成ASCLLL码并且显示在屏幕上,这时屏幕
5、上显示的数就是随机产生的16进制数。3.3.2 RAND子程序说明RAND PROC STI MOV AH,0 ;读时钟计数器值 INT 1AH MOV AX,DX ;清高6位 AND AH,3 MOV DL,101 ;除101,产生0100余数 DIV DL MOV BL,AH ;余数存BX,作随机数 POP DXRAND ENDP此程序利用读取系统时钟时间,并将时间除以101得到的余数便是我们需要的0-100的随机数,并将随机数保存在bl中。3.3.3 字符串显示子程序说明用DATA SEGMENT指令定义数据段,格式如下:DATA SEGMENT CC DB + ww db - GG D
6、B = II DB 0DH,0AH, AA DB 5 DUP(?) 0 ghh db 0,0dh,0ah, bnm dw 0DATA ENDS其中 内为要在界面显示的内容,其结尾的那一个字符必须是$,因此必在其结尾加上$才不会使程序出错。这样数据段定义好了,在后面的程序中调用改数据段。能在相应位置显示该数据段。字符串显示程序流程图如图3-2所示。图3-2 字符串显示子程序流程图4调试结果及分析程序执行“+”运算如图4-1。图4-1程序执行“+”运算产生进位如图4-2。图4-2程序执行“-”预算如图4-3。图4-3程序执行“-”运算被减数小于减数如图4-4。图4-45心得体会通过本次汇编语言课程
7、设计,使我深深的感受到了汇编语言的乐趣。汇编虽然是低级语言,但是正是因为低级,这也恰恰是它的优点,更接触底层硬件。通过汇编,可以更好的了解计算机系统的工作原理,而且把平时学到的理论知识和实践相结合,促进了课程的学习。在编程的过程中,通过自己思考和查找资料使自己受益匪浅。汇编的过程中也遇到了一些问题,由于自己的粗心,某些符号的书写错误,也大大的降低了自己的工作效率。这次的课程设计使我对汇编语言编程的方法和技巧有了一定的掌握,加深了自己对8086CPU的寄存器,存储器的理解;基本掌握了8086的指令系统;汇编语言程序设计的基本方法,包括顺序结构程序设计,分支结构程序设计,循环结构程序设计;并涉及到
8、了一部分宏汇编语言的技术;同时对BIOS的中断调用有了更深层次的理解。虽然本次课程设计整体有一些难度,但是,这段时间的学习和问题的解决,对自己专业知识的掌握有着非常重要的促进作用。通过这次课程设计,我最大的收获就是自己的动手能力和独立解决问题的能力得到了很大的提高,也充分体会到了自己设计东西的乐趣、学会查阅资料和对别人的东西融会变通的重要性,也明白了很多知识光靠趴在书本上学是学不到其中的精髓的,必须亲自去试着实践,亲自去经历才能对它们真正的掌握。最大的收获是更清晰了如何有条理的编程。第一个就是流程图,原来不以为然的事现在觉得非常的有必要。第二就是编程顺序,要写一个功能很复杂的程序首先写那些自己
9、可以很快完成的较简单的内容,比如先编写产生随机数的程序,这样既可以使编程变得更有条理,而且对心态也是很有帮助的。一步一步的完成相应的要求会使自己的心情倍感舒爽而不是一直未能达到要求时的迷茫。总之,这次的课程设计给了我一个难得的锻炼的机会,通过自己综合运用课堂上学到的知识,提升了自己解决问题的能力,同时也感谢老师为我们的耐心答疑及指导。6参考文献1王爽.汇编语言.北京:清华大学出版社,2013.9,12-202沈美明.IBM-PC汇编语言程序设计.北京:清华大学出版社,2001.8,10-153沈美明.IBM-PC汇编语言程序设计例题习题集.北京:清华大学出版社,1991,7-114 李真香.汇
10、编语言课程设计案例精编.北京:中国水利水电出版社,2004,60-655 钱晓捷.汇编语言程序设计学习及指南.湖北:华中科技大学出版社,2002,5-96 马力妮.80x86汇编语言程序设计北京:机械工业出版社,2004,32-407程学先,徐东平.汇编语言程序设计.武汉:武汉理工大学出版社,2003,42-458黄明,梁旭.汇编语言程序设计习题详解.北京:机械工业出版社,2004,17-20附录:源代码STACK SEGMENT DB 200 DUP(0)STACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKSTART: MOV AX,DATA MOV DS,AX MOV CX,20 CALL RAND ;产生一随机数 CALL MCAT ;将随机数转换为16进制表示的ASCII码字符 MOV AX,BX CMP www,0 ;WWW=0? JE A1 ;执行 CMP www,1 ;www=1? JE A2 ; A1: MOV DL,CC ;显示 MOV AH,2产生另一随机数 add bx,0fh MOV DL,GG ; ADD AX,BX cmp ax,0 jne yjw1 lea dx,ghh mov ah,9 int 21h jmp qq1 yjw1: JMP B1 A2: MOV DL,WW ; MOV AH,