微机原理实验报告---汇编语言n的阶乘
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
微机原理实验报告-------颜色的排列组合方式
院系:自动化
班级:
学号:
姓名:
日期:
成绩:
1.题目
在实际中,有红黄蓝绿等7种颜色,按照排列组合方式,分别计算出有多少种排列方式?如果减少一种颜色,又有多少中排列呢?
2.题目分析
题目中给去n种(n=7)颜色,要求我们计算可能出现的组合种数,这是数学中常见的排列组合问题。题目的意思是指的传统的排列组合,不许有重复颜色的,否则与生活习惯就不符合了。
这个咱们就熟悉了,对于n种颜色,应该有n
A种排列方式。我们知道,
n
n
A在数值上就是n的阶乘,现在程序的对象成为求阶乘了。
n
对于阶乘,我的思路是利用循环,设计一个累加变量兼被乘数x,用n来作为结束判断,当x>n时,累乘循环结束,现在就得到了相应的种类数。
但是内存中的数值是以16进制存放的,还需要一步进制转换才能进行显示。我的算法是:开辟5个空间的变量result1存放个位数字,给bx赋值10,(※)把dx清零,用{dx,ax}除以bx,得到的余数放在dx中,就是个位数的十进制表示,在转放到result1的第一个地址中。此时商数存在ax中,再重复(※)之后的内容,直到全部转化完。
显示的算法是十进制数字加上30h,变为ASCII码,利用INT 21H中断循环显示各位数字。
程序还给阅读者提供了选择权,允许读者进行输入,当读者输入一个数据n(n<=7)时,程序会根据输入,显示出相应的运算结果,这样当给定的样色种类变化时,就不用对程序本身进行更改了,可谓更加方便灵活。
3.程序框图
4.程序编写
CRLF MACRO ;定义回车换行的宏
MOV DL,0DH
MOV AH,2
INT 21H
MOV DL,0AH
MOV AH,2
INT 21H
ENDM
STACK SEGMENT STACK ;初始定义
DW 100 DUP(?)
STACK ENDS
DATA SEGMENT
STRING DB 'ENTER SORT OF COLOUR: ','$' ;输入提示字符串RESULT1 DB 5 DUP(0) ;用来存储结果的各位数字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 DX,OFFSET STRING
MOV AH,9
INT 21H
MOV AH,1 ;输入样色的种类
INT 21H
SUB AH,AH
SUB AL,30H
MOV CX,AX ;颜色的种类用来控制循环
CRLF
MOV AX,1
MOV BX,1
LP:
MUL BX
INC BX
LOOP LP
LEA DI,RESULT1 ;LP循环求阶乘
MOV BX,10
MOV CX,4
LOOP1:
DIV BX
MOV [DI],DL ;LOOP1将16进制转为10进制INC DI
SUB DX,DX
LOOP LOOP1
DEC DI
MOV CX,4
DISPLAY: ;DISPLAY用来显示10进制的各位数字ADD BYTE PTR[DI],30H
MOV DL,[DI]
MOV AH,2
INT 21H
DEC DI
LOOP DISPLAY
MOV AX,4C00H
INT 21H
CODE ENDS
END START
5.运行结果
6. 结果讨论
排列中数是颜色种类n的阶乘,比较5种6种和7种的数值可发现,120,720和5450相差很大。种类和排列方式不是成简单的线性关系,跳跃很大。可以想象,当颜色总类增加到10种以上是,结果会更庞大。