微机原理实验报告---汇编语言n的阶乘

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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种以上是,结果会更庞大。

相关文档
最新文档