Xxxxx大学微机原理课程设计说明书2012级电气工程及其自动化专业971班级题目产生随机数并运算的程序姓名xxx学号xxxxx指导教师xxx职称xxx二О一二年十二月十四日目录摘要.................................................................................................................1产生随机数并运算.........................................................................................2一、产生随机数并运算程序的基本原理.....................................................2二、设计方案.................................................................................................22.1随机数的产生.....................................................................................22.2将随机数转换为16进制ASCII码字符..........................................22.3利用随机数判断随机数加减............................................................22.4将表达式结果输出............................................................................3三,软件设计.................................................................................................33.1流程图................................................................................................33.2程序设计............................................................................................5四、结论.......................................................................................................11参考文献.......................................................................................................111摘要本课程适合包括对该设计汇编程序要求分析、原理介绍、汇编流程图、程序说明、总结、参考文献。汇编执行指令是机器指令的符号化表示,其操作码用记忆符表示,地址码直接用标号、变量名字、常数等表示,汇编执行指令经汇编程序翻译为机器指令,二者之间基本上保持一一对应的关系。采用汇编语言编写程序虽不如高级程序设计语言简便、直观,但是会变出的目标程序占用内存较少,运行效率高,且能直接引用计算机的各种设备资源。关键词:汇编,中断,随机数2产生随机数并运算一、产生随机数并运算程序的基本原理要随机产生两个十六进制数,所以要有随机数,可以在子程序中对产生的随机数进行定义,因为题目中有两个随机数,在子程序里会节省指令数,提高运行速度;将随机数转化为16进制的ASCII码字符,同样也需要利用子程序调用来节省指令工作时间;利用产生的随机数判断应该是对结果进行加还是减;将随机数运算表达式及结果输出,此时需要用MOVAH,9INT21H这两条指令来进行多字符的输出;利用循环语句保持输出,编写在输入为‘Q’是结束本次操作。二、设计方案2.1随机数的产生本次汇编采用的是INT1AH进行产生随机数,因为产生随机数时在子程序里面进行的,为了不影响操作的结果,以及防止改变AX,BX,CX,DX的值,一定要先保护现场,然后使用STI清零IF位,读时钟信号的值,并将其保存在AX中,将AX的高8位与00000011想与,所以此时AX的值的范围是0000H到03FFH,用AX除以101,会产生0到100的余数,将余数保存在BX中,那么此时产生的BX的值就是所需的随机数,最后恢复现场。2.2将随机数转换为16进制ASCII码字符由于产生的随机数是存储在BX中的10进制,而认为重视要求16进制相加减,所以需要将其转化为16进制ASCII码字符。十进制转换为十六进制可类似于十进制转换为二进制数的降幂法和除法来转换为十六进制数。也可将十进制转换为二进制数,讲讲二进制转换为十六进制。2.3利用随机数判断随机数加减在DATA段就定义了这个标号的值,一来判断两个随机数是相加还是相减,如果就执行相加的子程序,是1就执行相减的子程序,由于在将随机数转换为十六进制数的子程序中根据产生的随机数定义了的值,而两种情况,所以可以作为随机数加减的标志来判断。32.4将表达式结果输出本次结果的输出需要包含参加运算的随机数的表达式,所以两个随机数与中间的‘+’或者‘-’,以及‘=’都要进行定义,在DATA段里需要详细的制定然后在主程序里每完成一步可以确定表达式的符号后,需要通过DOS功能调用程序在屏幕上输出或输入字符,在本实验需要用到的几个有关DOS输入输出功能的调用号如下:调用号调用号功能01单字符输入02单字符输出0AH多字符输入09多字符输出6单字符输入/输出4CH过程终止DOS功能调用号需要送到AH寄存器中,如果有需要,按要求给定输入参数,最后还要再下面写入中断指令:INT21H。三,软件设计3.1流程图产生随机数并运算流程图如图1所示:4结果与表达式输出,循环保持开始进制数,并产生:产生随机数并运算的顺序流程图53.2程序设计DATASEGMENTCCDB'+'WWDB'-'GGDB'='IIDB0DH,0AH,'$'AADB5DUP(?)(0)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVCX,20CALLRAND;产生一随机数CALLMCAT;将随机数转换为16进制表示的ASCII码字符MOVAX,BXPUSHAXCMP=0?JEA1;执行'+'CMP=1?JEA2;执行'-'6A1:MOVDL,CC;显示'+'MOVAH,2INT21HCALLRAND;产生另一随机数ADDBX,0FhCALLMCAT;将随机数转换为16进制表示的ASCII码字符MOVDL,GG;显示'='MOVAH,2INT21HPOPAXADDAX,BXCMPAX,0JNEyjw1LEADX,GHHMOVAH,9INT21hJMPQQ1yjw1:JMPB1A2:MOVDL,WW;显示'-'MOVAH,2INT21HMOVCX,65535mai1:loopmai1CALLRAND1CALLMCATMOVDL,GGMOVAH,2INT21HPOPAX7SBBAX,BXCMPAX,0JNEyjw2LEADX,GHHMOVAH,9INT21HJMPQQ1yjw2:JMPB1B1:MOVBX,AXCALLMCATLEADX,IIMOVAH,9INT21HQQ1:MOVAH,4CHINT21HMCATPROC;将随机数转换为16进制表示的ASCII码字符子程序PUSHAXPUSHBXPUSHCXPUSHDXCMPBX,9JAS1;BX9跳转到S1PUSHAXPUSHBXPUSHCXPUSHDXMOVAX,BXMOVbl,58DIVbl;除5把余数放到AH中CMPAH,3JAEvB1MOV:MOV:POPDXPOPCXPOPBXPOPAXADDBL,30HMOVAA,BLMOVAA+1,'$';LEADX,AAMOVAH,9INT21HJMPs3s1:MOVCL,4MOVAL,0PUSHBXSHLBX,CL;左移4位使BL内容移到BH中CMPBH,9JBEV1SUBBH,9;BH9,加40H转换为ASCII码ADDBH,40HJMPMM1V1:ADDBH,30HMM1:MOVAA,BHPOPBX9ANDBL,0FHPUSHAXPUSHBXPUSHCXPUSHDXMOVAX,BXMOVbl,5DIVblCMPAH,3JAEvb2MOV:MOV:POPDXPOPCXPOPBXPOPAXCMPBL,9JBETT1SUBBL,9ADDBL,40HJMPRR1TT1:ADDBL,30H;转换成ASCII码RR1:MOVAA+1,BLMOVAA+2,'$'LEADX,AA;9号字符串显示功能MOVAH,9INT21Hs3:POPDX10POPCXPOPBXPOPAXRETMCATENDPRANDPROCPUSHCXPUSHDXPUSHAXSTIMOVAH,0;读时钟计数器值INT1AHMOVAX,DX;清高6位ANDAH,3MOVDL,101;除101,产生0~100余数DIVDLMOVBL,AH;余数存BX,作随机数POPAXPOPDXPOPCXRETRANDENDP11四、结论在本次课程设计的过程中,通过对各种指令的再次使用加强了对各种指令的使用技巧,并在设计中,通过查阅资料,对各种不理解的问题都进行了处理。本程序需在DOS下运行。每运行一次可执行程序random.exe,即可显示任意两个16进制数的加法或减法表达式及其运算结果。在减法运算中,如果被减数小于减数,显示“DIVideOverflow”的提示信息。通过对程序的编译和调试结果如下图:参考文献[1]钱晓捷.《微机原理与接口技术》,第4版,机械工业出版社,2008年1月出版。[2]沈美明等编著.《80X86汇编语言程序设计》,清华大学出版社,2001年9月出版。[3]杨素行等编著.《微型计算机系统原理及应用》,第2版,清华大学出版社,2004年2月出版。[4]康华光.《电子技术基础-数学部分》,北京大学出版社,2006年出版。[5]尚凤军.《微机原理与接口技术》,机械工业出版社,2008年出版。12设计总结:汇编语言是我们理解整个计算机系统的最佳起点和最有效途径。人们经常认为汇编语言的应用范围很小,而忽视它的重要性。其实汇编语言对每一个希望学习计算机科学与技术的人来说都是非常重要的,是不能不学习的语言。汇编语言直接描述机器指令,比机器指令容易记忆和理解。通过学习和使用汇编语言,能够感知、体会、理解机器的逻辑功能,向上为理解各种软件系统的原理,打下技术理论基础;向下为掌握硬件系统的原理,打下实践应用基础。学习汇编语言,向上可以理解软件,向下能够感知硬件,是我们理解整个计算机系统的最佳起点和最有效途径。通过本次课程设计,认真阅读了相关知识,对单字符输入输出,多字符输入输出再次记忆和使用,通过使用入栈来保护寄存器里的内容,在下面的使用中不伤害到寄存器原来的数据,在使